- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图了解记忆化在 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),已经存储并添加它们?
最佳答案
你说的基本上是正确的。
"Does it [fibHash] just hold the individual values of each fib(#)?"
是的,没错。这些值在计算时填入(使用 fibHash[ n ] = fib_val;
)。较低的 fib 值用于计算较高的值。
fibHash
映射将 X 映射到 fib(X),简单明了。
这样做的好处是,如果您计算 fib(20),然后计算 fib(21) 和 fib(23),然后可能是 fib(15),您只需计算一次中间值。
此加速的成本是将值存储在 fibHash
中的内存。
关于C++ 记忆化理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12753979/
为什么 Silverlight 中有这么多内存? 数据: 我有时在用户界面上有很多复选框和其他复选框。当然,我正在从视觉对象中删除复选框和其他控件,但 Silverlight 的内存使用量总是增加;它
我调用一个返回给定特定链式方法的数组的对象: Songs::duration('>', 2)->artist('Unknown')->genre('Metal')->stars(5)->getAllA
为了解释标题.. Selenium RC keeps insisting that A system shutdown has already been scheduled 并因此拒绝进行自动化测试。
我是一名优秀的程序员,十分优秀!