我正在阅读动态规划笔记,并遇到了以下评论。
如果子问题不是独立的,即子问题共享子子问题,则分治算法会重复解决公共的子子问题。因此,它做了比必要更多的工作。
这是什么意思?你能给我举些例子来说明上述观点吗?
如果子问题不是独立的,即子问题共享子子问题,则分治算法会重复解决公共的子子问题。因此,它做了比必要更多的工作。
这是什么意思?你能给我举些例子来说明上述观点吗?
作者指的是许多分治算法具有彼此重叠的子问题。 例如,考虑这个非常简单的斐波那契实现:
int Fibonacci(int n) {
if (n <= 1) return n;
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
如果跟踪计算 Fibonacci(4) 的调用,我们得到: