贪心与动态规划的区别与联系

本文通过一个图示例子对比了贪心算法和动态规划解决最短路径问题的不同策略。贪心算法每次选择眼前最优解,得出31的路径,而动态规划记录到达每个位置的最优值,最终得到全局最优解18。文章强调贪心不一定能得到全局最优解,而动态规划确保全局最优。此外,还探讨了动态规划在矩阵连乘积问题中的应用,指出在特定情况下局部最优可推出全局最优。

先来看一个例子:

如图,各结 点代表城市, 两结点间连 线上数字表 示城市间的 距离。试找出从结点A到 结点E的最短距离  

              

贪心:

    首先,这题如果用贪心来看的话,则为A->B2,B2->C4,  C4->D2,  D2->E,  这应该没有争议吧(如果硬要挑毛病的话那么就假设是有向图,只能往右走),这样得出来的结果是31,这是贪心的结果,即每次考虑眼前的最优解。

动态规划:
    如果从动归的角度来看的话,那么它的选择就不是线性的了,而是在到达B、C、D、E这四个阶段时从前面记录的所有相邻节点所记录的最短路径中选择下一条最短路径(总结得过于繁琐),怎么理解呢?我们一步步来看。

    我们从A开始,在贪心和动归眼里都是两条路,但不同的是贪心选择了A->B2这条最短路径,就遗忘了还有A->B1这个选择,那么它的下一步就只能从B2这个节点开始选择下一步的最短路径;而对于动态规划来说,它需要记录的不是从A开始的下一条最短路径,它要记录的是到从A开始的到B1所走过的最短距离和到B2所走过的最短距离,即B1=6,B2=2;然后下一步,进入到第二阶段,即从B开始,它首先从B1开始,走向C1,然后记录到C1的最短距离,即C1=8,然后是C3=17,C4=13;然后从B2开始走,C2=10,然后到C3的时候发现以前的值(即从B1到C3)比现在的大,

动态规划贪心算法都是常用的优化算法,它们的联系和区别如下: 联系: 1. 都是基于数学归纳法的思想,都是将问分解成子问,通过求解子问的解来求解原问的解。 2. 都需要定义状态转移方程,动态规划通常需要记录子问的解,以便后续使用,而贪心算法则不需要。 3. 两种算法都可以用来求解最优化问区别: 1. 动态规划算法通常用于求解具有最优子结构的问,即问的最优解可以由子问的最优解推导出来。而贪心算法则是一种贪心的思想,每一步都选择当前最优的解,以期达到全局最优解。 2. 动态规划算法通常需要考虑所有可能的状态转移路径,而贪心算法则只需要考虑当前状态下的最优解,不考虑将来可能出现的情况。 3. 动态规划算法的时间复杂度通常较高,但可以处理较为复杂的问,比如最长公共子序列、最短路径等问。而贪心算法的时间复杂度通常较低,但是不一定能够得到最优解。 因此,动态规划贪心算法都是优化问的常用算法,它们的联系在于都是基于数学归纳法的思想,需要定义状态转移方程,而区别在于它们的思想和应用场景不同。动态规划更适用于求解具有最优子结构的问,可以处理较为复杂的问,但计算复杂度较高;而贪心算法更适用于求解一些特定问,计算复杂度较低,但不一定能够得到最优解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值