4

「メモ化」と「キャッシュ」という用語を比較し、ウィキペディアのメモ化エントリを読んで、人々は「メモ化」という用語を使用すると意味があることに同意しますか?

  • メモ化された結果はプロセスのメモリに保持されます。つまり、memcachedには保存されません。
  • フィボナッチなどの数学関数のように、時間の経過とともに変化する可能性のある値ではなく、関数を「メモ化」するだけです。たとえば、Web サイトの登録ユーザー数などです。

上記以外のことをしている場合、結果をキャッシュしているだけですか?

4

4 に答える 4

7

よくわかりませんが、メモ化では、 の結果を格納できるように、決定論的 (つまり、特定y = f(u)のに対しては常に同じでなければならない) であることが必要であると理解しています。fuyf

私には、キャッシュは、どのデータが頻繁にアクセスされるかを判断し、それらのデータを高速ストレージに保持するという問題のほうが大きいように思えます。

前者は決定論的ですが、後者は確率論的です。

于 2010-09-15T22:46:27.253 に答える
4

関数をメモ化すると、特定の引数セットに対する関数の結果をローカルにキャッシュできると思います。それはほとんどのようです:

function f(a, b, c) {
  if (a==1 && b==2 && !c) {
    return 5;
  } else if (a==1 && b==3 && !c) {
    return 17.2;
  } /* ... etc ... */

  // some horribly long/complex/expensive calculation
  return result;
}

ただし、最初の巨大な「if」ブロックは自動的に処理され、はるかに効率的であり、関数が異なる引数で呼び出されると追加されます。

メモ化できるのは、決定論的で副作用のない関数のみであることに注意してください。これは、関数の結果がその入力にのみ依存し、実行時に何も変更できないことを意味します。

要するに、メモ化は非常に特殊な状況での関数ローカル キャッシングであり、通常のキャッシングの特殊化です。

于 2010-09-15T22:43:34.957 に答える
1

私の理解では、はい、メモ化はキャッシングであり、数列 (フィボナッチ数列など) を計算するプログラムなど、時間が重要なプログラムを高速化するために使用されます。

于 2010-09-15T22:36:10.220 に答える
1

この用語は大まかに同じ意味で使用できるため、議論の余地があります。

私にとって、「メモ化」の唯一の意味は次のとおりです。「キャッシング」は、事前計算されたテーブルではなく、以前の入力のものです。つまり、メモ化は、関数が独自の戻り値を記憶するプロセスです。

于 2010-09-15T22:47:10.027 に答える