五大基本算法——动态规划算法

作者: 无问o | 来源:发表于2019-12-10 17:02 被阅读0次

一、基本要素

1、最优子结构性质

大问题的最优解包含了小问题的最优解,小问题的最优解又可以合并成大问题的最优解。


最优子结构性质

2、重叠子问题性质

含有多个子问题,并且算法过程中会多次使用,这时动态规划法提供了查动态规划表的方法来简化流程,使重叠的子问题不会重复计算。

二、基本步骤

1、找出最优解的性质(分析其结构特征)

2、递归地定义最优值(写递归表达式)

3、自底向上计算最优值(填充动态规划表)

4、构造最优解(由表中信息)

三、动态规划法与分治法的区别

1、动态规划法经分解得到的子问题往往不是互相独立的,而分治法必须要求子问题独立。
2、分治法可能会多次计算同一子问题,而动态规划法利用查动态规划表,保存已经计算过的子问题解,避免了重复计算。

四、动态规划法与贪心算法的区别

贪心算法性质:每一步选择都采取当前状态下最优的选择,而不着眼于全局最优。

动态规划法(最优子结构+重叠子问题)——>自底向上
每一步的最优解由上一步的局部最优解进行选择得出,因此需要保存之前求解的所有子问题的最优解备查。

贪心算法(最优子结构+贪心选择性质)——>自顶向下
每一步的最优解由上一步的最优解推导而得,当前最优解包含上一步的最优解,但之前的最优解不做保留。因此,在贪心算法中,做出的每一步决策都无法改变

相同点:两者都具有最优子结构性质(每一步的选择都将当前问题简化为一个规模更小的与原问题相同形式的子问题)

不同点:动态规划算法每步往往依赖于相关子问题的解,因而只有在解出相关子问题的解后才能做出选择。而贪心算法只着眼于当前状态的最优解,即局部最优选择,然后再去解出这个选择后的状态的相应的子问题。(自底向上与自顶向下)

区别两者的经典例子:0/1背包问题与背包问题


0/1背包问题与背包问题

0/1背包问题需采用动态规划算法达到最优解。
背包问题采用贪心算法可求解。

对于0/1背包问题,不能用贪心算法求解,为什么?

因为对该问题用贪心选择策略求解无法保证最后背包被装满,闲置的背包空间会影响每公斤背包的价值,进而影响整体求解的最大价值。

0/1背包问题应比较:选择与不选择两种方案的哪种更优,然后再进行下一步选择,这样会形成多个重叠子问题,须用动态规划中的动态规划表进行存储。

相关文章

  • 算法与数据结构

    五大常用算法之一:分治算法 五大常用算法之二:动态规划算法 五大常用算法之三:贪心算法 五大常用算法之四:回溯法 ...

  • 五大常用算法

    引言 据说有人归纳了计算机的五大常用算法,它们是贪婪算法,动态规划算法,分治算法,回溯算法以及分支限界算法。虽然不...

  • 五大基本算法——动态规划算法

    一、基本要素 1、最优子结构性质 大问题的最优解包含了小问题的最优解,小问题的最优解又可以合并成大问题的最优解。 ...

  • 【JS算法】动态规划 - 斐波那契数列

    动态规划算法 动态规划算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法。其基本思想也...

  • 最短路径解决方法

    Floyd算法;Dijkstra算法;Bellman-Ford算法;动态规划算法

  • 基本算法——动态规划算法

    动态规划(Dynamicprogramming)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相...

  • 维特比算法

    维特比(Viterbi)算法是一种动态规划算法,在处理隐马尔可夫(HMM)最优路径问题时经常被使用. 动态规划算法...

  • 动态规划算法

    动态规划算法 最长上升子序列

  • 动态规划算法(01背包问题)

    一. 动态规划算法介绍: 动态规划算法和分治算法类似,也是将待求解问题分成若干个小问题一步步求解,不同的是,每一个...

  • 算法相关文章索引(2)

    基本常识 kmp算法百度百科 动态规划几个经典例子总结 五大常用算法之四:回溯法 五大常用算法之五:分支限界法 P...

网友评论

    本文标题:五大基本算法——动态规划算法

    本文链接:https://www.haomeiwen.com/subject/pgbfgctx.html