Какова вероятность того, что этот код заканчивается?


10

Я написал этот код на Python и подумал, а может ли он просто не завершиться (при условии, что у нас было бесконечное количество памяти / времени и нет предела глубины рекурсии).

Интуитивно вы думаете, что он заканчивается, поскольку в какой-то момент вам повезет , а если он не закончится, у вас будет бесконечное количество времени, чтобы стать удачливым. С другой стороны, с увеличением глубины рекурсии вы должны стать экспоненциально более удачливыми.

import random

def random_tree():
    if random.random() < 0.5:
        return 0
    return [random_tree() for _ in range(random.randint(1, 5))]

Если random_treeне всегда заканчивается, почему, и какова вероятность того, что он прекращается?

Я пытался вычислить это, используя , что в своей потрясающей бесполезности либо дает ответ ~ или ... .P=1(10.5)(1(P+P2+P3+P4+P5)/5)0.6841241

Возможно, более сложный, но также и интригующий для меня, каков шанс завершения для:P(a,b)

def random_tree(a, b):
    if random.random() < a:
        return 0
    return [random_tree(a, b) for _ in range(random.randint(1, b))]

Или в псевдокоде:

random_tree(a, b) is a function that either:
    - returns 0 with probability a
    - returns a list containing the results of 1 to b
      (uniformly chosen from this inclusive range) recursive calls

random_tree(a, b):
    if rand() < a # rand() is a random real on [0, 1)
        return 0
    list = []
    len = randint(1, b) # uniform random integer from 1 to b inclusive
    do len times
        append random_tree(a, b) to list
    return list

1
@DavidRicherby Добавлено внизу. Код сверху просто random_tree(0.5, 5).
orlp

Это известно как процесс ветвления. Ищите это, чтобы найти ответ.
Юваль Фильмус

Ответы:


8

Это пример ветвящегося процесса . Поведение ветвящегося процесса зависит от ожидаемого числа детей, которое в вашем случае составляет . Когда это число не превышает 1, процесс вымирает с вероятностью 1. Когда число превышает 1, у него есть шанс выжить навсегда; вероятность вымирания - это то, что вы рассчитали - вам нужно выбрать корень, который меньше 1.1.25>1


Почему корень недействителен? 1
orlp

Так и получается. Этот корень выражает тот факт, что если вы никогда не начнете, процесс исчезнет. Я предлагаю вам немного почитать эту классическую тему, которая рассматривается, например, Феллером.
Юваль Фильмус
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.