Pythonを始めたばかりで、何をすればいいのか全くわかりませんメモ化とは何か、どのように使用するのか教えてください。また、簡単な例を挙げていただけますか?
ベストアンサー1
メモ化とは、メソッドの入力に基づいてメソッド呼び出しの結果を記憶し (「メモ化」→「覚書」→記憶される)、結果を再度計算するのではなく、記憶された結果を返すことを意味します。メソッドの結果のキャッシュと考えることができます。詳細については、Cormen らの「Introduction To Algorithms (3e)」の 387 ページの定義を参照してください。
Python でメモ化を使用して階乗を計算する簡単な例は次のようになります。
factorial_memo = {}
def factorial(k):
if k < 2: return 1
if k not in factorial_memo:
factorial_memo[k] = k * factorial(k-1)
return factorial_memo[k]
さらに複雑にして、メモ化プロセスをクラスにカプセル化することもできます。
class Memoize:
def __init__(self, f):
self.f = f
self.memo = {}
def __call__(self, *args):
if not args in self.memo:
self.memo[args] = self.f(*args)
#Warning: You may wish to do a deepcopy here if returning objects
return self.memo[args]
それから:
def factorial(k):
if k < 2: return 1
return k * factorial(k - 1)
factorial = Memoize(factorial)
「デコレーター「」は Python 2.4 で追加され、次のように記述するだけで同じことが実現できるようになりました。
@Memoize
def factorial(k):
if k < 2: return 1
return k * factorial(k - 1)
のPython デコレータ ライブラリ同様のデコレータにはmemoized
これは、ここで示したクラスよりも少し堅牢ですMemoize
。