メモ化とは何ですか?Python ではどのように使用できますか?質問する

メモ化とは何ですか?Python ではどのように使用できますか?質問する

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

おすすめ記事