【问题标题】:Why my using memo didn't raise the efficiency at all?为什么我的使用备忘录根本没有提高效率?
【发布时间】:2014-06-27 10:38:53
【问题描述】:

我在Think in Python中做练习,使用Memo计算斐波那契数列比不使用效率高得多。但是当实现它并测试所消耗的时间时,我发现运行时间并没有减少。我知道我的程序肯定有问题,有人可以告诉我哪里出错了。非常感谢。

import time

known = {0:0,1:1}
def fibonacci_memo(n):
    """return the nth number of fibonacci sequence
    using memo to raise efficiency"""
    if n in known:
        return known[n]

    res = fibonacci(n-1) + fibonacci(n-2)
    known[n] = res
    return res

def fibonacci(n):
    """return the nth number of fibonacci sequence
    without using memo"""
    if n == 0:
        return 0
    if n == 1:
        return 1
    return fibonacci(n-1) + fibonacci(n-2)

if __name__ == '__main__':
    start = time.clock()
    print fibonacci_memo(32)
    elaspsed = time.clock() - start
    print 'using memo time used: ' + str(elaspsed)

    start = time.clock()
    print fibonacci(32)
    elaspsed = time.clock() - start
    print 'without using memo time used: ' + str(elaspsed)

输出类似于:

2178309
using memo time used: 1.83040345779
2178309
without using memo time used: 1.792043347

【问题讨论】:

    标签: python performance memoization


    【解决方案1】:

    您的 fibonacci_memo 函数不是递归调用自身,而是调用原始(非记忆化)fibonacci 函数。

    【讨论】:

      【解决方案2】:

      你的记忆函数的递归调用了一个不同的函数。尝试用这个替换 fibonacci_memo:

      def fibonacci_memo(n):
          """return the nth number of fibonacci sequence
          using memo to raise efficiency"""
          if n in known:
              return known[n]
      
          res = fibonacci_memo(n-1) + fibonacci_memo(n-2)
          known[n] = res
          return res
      

      【讨论】:

        猜你喜欢
        • 2011-01-12
        • 1970-01-01
        • 2021-12-12
        • 2019-04-06
        • 1970-01-01
        • 1970-01-01
        • 2011-04-07
        • 2011-06-20
        • 1970-01-01
        相关资源
        最近更新 更多