贪心、分治和动规

本文对比总结了贪心、分治和动态规划三种算法思想,探讨了它们的异同点及适用场景。贪心算法通过局部最优策略寻求全局最优解,适用于最优化问题。分治法将问题分解为不重叠子问题,不关注重叠子问题,适合非最优化问题。动态规划则利用最优子结构和重叠子问题解决最优化问题,包括自顶向下和自底向上的策略。文中列举了各类算法的经典应用题,如贪心的Dijkstra算法、分治的快速排序和动态规划的背包问题等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

贪心、分治和动规是算法的入门思想,初学时容易混淆,故对比总结如下

两个概念

  1. 重叠子问题:如果一个问题可以被分为若干个子问题,且这些子问题会重复出现,那么就称这个问题拥有重叠子问题
  2. 最优子结构:如果一个问题的最优解可以由其子问题的最优解有效地构造出来,那么称这个问题拥有最优子结构

三个思想

  1. 贪心:解决最优化问题,并希望由局部最优策略来推得全局最优结果。贪心算法适用的问题必须满足最优子结构
  2. 分治:将原问题划分成若干个规模较小而结构与原问题相同或相似的子问题,然后分别解决这些子问题,最后合并子问题的解,即可得到原问题的解。分治必须拥有子问题,但不一定是重叠的子问题,且该问题不一定是最优化问题
  3. 动态规划:一个问题必须拥有重叠子问题最优子结构,才能使用动态规划去解决。动规有两个思路:①自顶向下(递归)——考虑重叠子问题-记录解(备忘录)②自底向上(递推)——考虑求解小问题顺序

对比

  1. 分治与动规对比:

同:
分治和动态规划都是将问题分解为子问题,然后合并子问题的解得到原问题的解。
异:
分治——分解出的子问题是不重叠的,因此分治法解决的问题不拥有(或者并不用在意)重叠子问题,且分治解决的不一定是最优化问题。
动态——规划解决的问题拥有重叠子问题,且解决的问题一定是最优化问题。

  1. 贪心与动规对比:

同:
贪心和动规都要求原问题必须拥有最优子结构。
异:
贪心

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值