C++ でメモ化がどのように機能するかを理解しようとしていたので、Fib で使用されているメモ化の例を調べました。順序。
std::map<int, int> fibHash;
int memoized_fib (int n)
{
std::map<int, int>::iterator fibIter = fibHash.find(n);
if( fibIter != fibHash.end() ) return *fibIter;
int fib_val;
if( n <=1 ) fib_val = 1;
else fib_val = memoized_fib ( n-1 ) + memoized_fib ( n-2 );
fibHash[ n ] = fib_val;
return fib_val;
}
fibHash[n] の仕組みに少し混乱しました。各 fib(#) の個々の値を保持するだけですか? また、イテレータはインデックスをトラバースしてテーブル内の正しい値を探し、それを返しますか? たとえば、fib(6) = 既に保存されている fib(5) と fib(4) を見つけて、それらを追加するだけですか?