Memoization实现之间的区别 - Python

时间:2016-05-17 22:08:33

标签: python python-2.7 memoization

这些memoization实现之间有什么区别(如果存在)?是否有一个用例比另一个更好? (我将此Fibo递归作为示例包含在内)

换句话说:检查if some_value in self.memo:if some_value not in self.memo:之间是否存在差异,如果是,是否存在更好的实施方案(更好地针对性能进行优化等)?< / p>

class Fibo:
    def __init__(self):
        self.memo = {}

    """Implementation 1""" 
    def fib1(self, n):
        if n in [0,1]:
            return n

        if n in self.memo:
            return self.memo[n]

        result = self.fib1(n - 1) + self.fib1(n - 2)

        self.memo[n] = result

        return result

    """Implementation 2"""
    def fib2(self, n):
        if n in [0,1]:
            return n

        if n not in self.memo:
            result = self.fib2(n - 1) + self.fib2(n - 2)

            self.memo[n] = result

        return self.memo[n]

# Fibo().fib1(8) returns 21
# Fibo().fib2(8) returns 21

1 个答案:

答案 0 :(得分:2)

这些实现中没有显着的性能差异。在我看来,fib2是一个更具可读性/ pythonic的实现,应该是首选。

我要做的另一个建议是在__init__中初始化备忘录,如下所示:

self.memo = {0:0, 1:1}

这避免了在每次调用中进行条件检查的需要,您现在可以简单地删除fib方法的前两行。