나는이 파이썬 코드를 작성하고 때로는 단순히 끝나지 않는지 궁금했다 (무한 메모리 / 시간이 있고 재귀 깊이 제한이 없다고 가정).
직관적으로 당신은 어느 시점에서 운이 좋아야하기 때문에 그것이 종결된다고 생각할 것이며, 그것이 끝나지 않으면 운이 좋을 시간이 무한합니다. 반면에 재귀 깊이가 증가하면 기하 급수적으로 더 운이 좋아야합니다.
import random
def random_tree():
if random.random() < 0.5:
return 0
return [random_tree() for _ in range(random.randint(1, 5))]
경우 random_tree
항상 종료하지 않는 이유는, 그것이 종료 않는 기회는 무엇인가?
나는 사용하여 계산하려고했는데 , 그것은 쓸모가 없어서 ~ 0.684124 또는 ... 1 .
아마 더 복잡뿐만 아니라, 나에게, 흥미롭고 종료 기회 무엇 에 대한이 :
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
이것을 분기 프로세스라고합니다. 답을 찾으려면 찾아보십시오.
—
Yuval Filmus
random_tree(0.5, 5)
합니다.