在动态编程问题中,无论从正面还是背面开始都无关紧要吗?
现在,我不这么认为,因为即使在优化问题中,fun(n) = some penalty + fun(n-1)
,fun(n-1)
,n
也与fun(n-1)
的价值无关。这意味着,我们很可能从头开始计算{{1}},然后加上惩罚。
你能给我一个例子。
答案 0 :(得分:2)
据我所知,在动态编程的背景下,"从后面开始"只是递归而不实际使用动态编程。如果重叠子问题的结果存储在缓存中,这称为" memoization",它获得与动态编程相同的运行时复杂性,但不被认为是最严格意义上的动态编程" ;一些人。总的来说,"从前面开始"没有辅助数据结构来执行记忆肯定是通过共识进行动态编程。
答案 1 :(得分:0)
我不认为反转输入的属性与动态编程有关,在您的示例中,它与添加的交换属性有关。您无法撤消输入并获得相同结果的问题是http://en.wikipedia.org/wiki/Longest_increasing_subsequence。它通过动态编程解决。