我试图解决无限猴子定理,这是我在网上遇到的编程任务的一部分。

问题陈述是:


  该定理指出,猴子无限制地在打字机键盘上敲击键将几乎肯定会键入给定的文本,例如威廉·莎士比亚的完整著作。好吧,假设我们用Python函数替换了猴子。您认为Python函数仅生成一个莎士比亚句子需要多长时间?我们要拍摄的一句话是:“想起来就像鼬鼠一样”


我正在尝试查看a)是否可以生成字符串b)在生成了多少次迭代之后,字符串

我将上一个SO问题设为递归限制为10000,但仍遇到达到最大递归深度的运行时错误。

我仍然在寻找关于python的方法。我希望看到有关如何更好地做到这一点的建议,而不会遇到递归深度问题。

到目前为止,这是我的代码:

import random
import sys
alphabet=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',' ']
quote="methinks  it is like a weasel"
msg='cont'
count=0

sys.setrecursionlimit(10000)

def generate(msg):
    sentence=''
    while len(sentence)!=27:
        #random.choice() prints a random element from list 'alphabet'
        sentence=sentence+random.choice(alphabet)
    if msg=='cont':
        verify(sentence)

def verify(msg2):
    global count
    if msg2.find(quote)==-1:
        count+=1
        generate('cont')

    else:
        print 'sentence is ',msg2 ,'count is',count

if __name__ == '__main__':
    generate(msg)

最佳答案

在这种情况下,最好事前思考。如果我们忽略大小写和标点符号,则您的字符串包含28个字符,原则上每个字符可以是26个字母中的任何一个或一个空格。组合的数量是2728,恰好是11972515182562019788602740026717047105105681。如果您每秒可以枚举十亿个猜测,则是2728 / 1E9(尝试/秒)/ 3600(秒/小时)/ 24(小时/天)/ 365.25(天/年)/ 14E9(年/当前宇宙年龄)
=> 27099008032844.297。好消息是,您可能会在任何时候迷失答案,因此预期的时间仅为当前宇宙年龄27万亿倍的一半。

淘汰堆栈是您最少的问题。

之所以称其为无限猴子定理,是因为您可以除以可以并行处理该猴子的猴子的数量,如果是无穷大,则求解时间将成为每只猴子产生猜测的时间,即十亿分之一秒。

关于python - 无限猴子定理:超过最大递归深度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26078266/

10-12 17:01