DP与贪心

     拜读《算法导论》至DP和贪心算法处,觉得有必要理一下思路。

     书上对DP介绍了几经典的案例,LCS,矩阵连乘与最优二叉搜索都是很经典的应用。DP是一种从下至上的优化算法,其实对于寻优,至上而下的寻优算法从理论上也是可行的,然后之下而上效率比至上而下大大提高,原因是,当我们采用至上而下的递归式时,实际上做了许多重复的运算,递归树对重复问题的运算结果其实只需运算一次,再次用到时只需读取。本人对DP的理解还不够深刻,但是已经能够体会到DP的精髓在于寻找最优子问题,即将当前问题分解成几个子问题合并的结果,并且能够证明:为了取得当前问题的最优解,其子问题也必须是最优的。贪心算法是一种特殊的DP,理论上DP能够解决贪心能解决的所有问题,但是贪心算法能够确定存在一个选择,做此选择后的结果并不会比做其他选择差,以此保证最优。

    关于DP和贪心的一个比较经典的案例是部分背包问题与0-1背包问题。

    很显然,部分背包问题没有空间浪费的问题,每一次取的物品能够保证(价值/空间)比最大,直到背包填满,理由很简单,因为能够保证选择当前(价值/空间)比最高的物品至少不会比选择(价值/空间)比小的物品更差。0-1背包问题的子问题则不能保证某一个选择比其他更优,只能从其子问题中寻找最优解。所以贪心实质上并不是一种之下而上的算法,只是说他也能够通过DP得到解决。

posted @ 2011-11-11 15:56  Orig  阅读(314)  评论(0编辑  收藏  举报