在动态编程问题中从前面的v / s开始是否有区别?

时间:2015-02-01 22:36:24

标签: algorithm dynamic-programming

在动态编程问题中,无论从正面还是背面开始都无关紧要吗?

现在,我不这么认为,因为即使在优化问题中,fun(n) = some penalty + fun(n-1)fun(n-1)n也与fun(n-1)的价值无关。这意味着,我们很可能从头开始计算{{1}},然后加上惩罚。

你能给我一个例子。

2 个答案:

答案 0 :(得分:2)

据我所知,在动态编程的背景下,"从后面开始"只是递归而不实际使用动态编程。如果重叠子问题的结果存储在缓存中,这称为" memoization",它获得与动态编程相同的运行时复杂性,但不被认为是最严格意义上的动态编程" ;一些人。总的来说,"从前面开始"没有辅助数据结构来执行记忆肯定是通过共识进行动态编程。

答案 1 :(得分:0)

我不认为反转输入的属性与动态编程有关,在您的示例中,它与添加的交换属性有关。您无法撤消输入并获得相同结果的问题是http://en.wikipedia.org/wiki/Longest_increasing_subsequence。它通过动态编程解决。