“记忆化搜索”通常指的是在动态规划或递归算法中使用的一种优化技术。通过在计算过程中将已经计算过的子问题的结果存储起来,避免重复计算,从而加快算法的执行速度。这种技术在处理涉及重叠子问题的大规模问题时特别有效。
记忆化搜索的示例(以斐波那契数列为例):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <iostream> #include <vector> using namespace std; vector<int> memo; // 记忆化搜索计算斐波那契数 int fib(int n) { if (n <= 1) return n; // 如果已经计算过,直接返回结果 if (memo[n] != -1) return memo[n]; // 否则,计算并保存结果 memo[n] = fib(n - 1) + fib(n - 2); return memo[n]; } int main() { int n = 10; memo.assign(n + 1, -1); // 初始化存储结构 cout << "Fibonacci(" << n << ") = " << fib(n) << endl; return 0; } |