1
これらのメモ実装の違いは何か(存在する場合)?一方が他方に優先するユースケースはありますか?別の言い方をすればMemoization実装の違い - Python
を(私は、例として、このFibo
再帰を含む):if some_value in self.memo:
とif some_value not in self.memo:
をチェック差があり、その場合、一方が等より良いパフォーマンスのために最適化より良い実装を(提示する場合があります)?
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
'in'と' not in'はほぼ同じ時間の複雑さを必要とするはずです。検索には 'O(1)'があり、キー値をハッシュしてからハッシュテーブルを探します。確かに見つけ出すために 'timeit'を試すことができます。 –