动态规划基础

来源:互联网 发布:sql是结构化语言吗 编辑:程序博客网 时间:2024/06/03 18:22

动态规划:

要用动态规划算法来处理问题需要有2个重要的性质

一、最优子结构:

我们要求解某一问题时,求解该问题也包含求解该问题的最优子问题,这样,我们自底向上的先求子问题,原问题就能够容易求解了。

二、子问题重复:

可能有多个子问题被重复求解,这样算法的时间将会达到O(2^N),而我们用一个表格来存储求解过的子问题,这样在求解问题时,先查找是否子问题被求解过,如果求解过,

我们就用线性时间查找到子问题的解,这样就不会重复求解子问题了,从而使时间达到O(n^2);


备忘录算法:

备忘录算法是动态规划的变形,与动态规划类似的,它是建立一个表格(备忘录),用来存储已经求解过的子问题,在需要时查找就行了,也是避免重复求解子问题,与动态规划不同的是,备忘录算法是自顶向下求解的,而且它并不是对每一个子问题都求解,它仅仅是对求解原问题需要利用的子问题求解。反之,动态规划需要对全部的子问题进行求解。这样,备忘录算法的需要的时间要比动态规划少,但是在需要对几乎所有子问题求解中 ,动态规划比备忘录好。
0 0