Bu Python kodu yazmış ve bazen merak basitçe değil sonlandırmak (biz sonsuz bellek / zaman ve hiçbir yineleme derinliği sınırı vardı varsayarak).
Sezgisel olarak sona erdiğini düşünürsünüz, çünkü bir noktada şanslı olmalısınız ve eğer sona ermezse şanslı olmak için sonsuz zamanınız vardır. Öte yandan, özyineleme derinliği arttıkça katlanarak daha şanslı olmalısınız.
import random
def random_tree():
if random.random() < 0.5:
return 0
return [random_tree() for _ in range(random.randint(1, 5))]
Her random_tree
zaman sona ermezse, neden ve sona ermesi olasılığı nedir?
Muhtemelen daha karmaşık, ama aynı zamanda bana da ilgi çeken, için sonlandırma şansı nedir :
def random_tree(a, b):
if random.random() < a:
return 0
return [random_tree(a, b) for _ in range(random.randint(1, b))]
Veya sözde kodda:
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
Bu bir dallanma süreci olarak bilinir. Cevabı bulmak için yukarıya bakın.
—
Yuval Filmus
random_tree(0.5, 5)
.