मैंने इस पायथन कोड को लिखा, और आश्चर्य किया कि क्या यह कभी-कभी समाप्त नहीं होता है (यह मानते हुए कि हमारे पास अनंत स्मृति / समय था और कोई पुनरावृत्ति गहराई सीमा नहीं है)।
सहज रूप से आपको लगता है कि यह समाप्त हो जाएगा, क्योंकि कुछ बिंदु पर आपको भाग्यशाली होना चाहिए , और अगर यह समाप्त नहीं होता है तो आपके पास भाग्यशाली होने के लिए अनंत समय है। दूसरी ओर, जैसे-जैसे पुनरावृत्ति की गहराई बढ़ती जाती है, आपको तेजी से और अधिक भाग्यशाली बनना चाहिए।
import random
def random_tree():
if random.random() < 0.5:
return 0
return [random_tree() for _ in range(random.randint(1, 5))]
यदि random_tree
हमेशा समाप्त नहीं होता है, तो क्यों, और क्या मौका है कि यह समाप्त होता है?
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
इसे ब्रांचिंग प्रक्रिया के रूप में जाना जाता है। इसका उत्तर खोजने के लिए इसे देखें।
—
युवल फिल्मस ६
random_tree(0.5, 5)
।