其他分享
首页 > 其他分享> > C Memoization理解

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