C Memoization理解
作者:互联网
我试图理解mem中的memoization是如何工作的,所以我看了一下Fib中使用的memoization的例子.序列.
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),已经存储并添加它们?
解决方法:
代码确实将每个fib_val保存到fibHash映射中.调用fibHash的find方法搜索地图以查看该值是否先前已计算过.如果是这样,find返回此值的迭代器,函数返回它(return * fibIter).
fibHash [n] = fib_val;在地图中添加新值.
标签:c,arrays,recursion,map,memoization 来源: https://codeday.me/bug/20191003/1846983.html