当前位置: 首页 > news >正文

贪心算法和动态规划

贪心算法和动态规划是两种常见的算法思想,通过生活化的例子对比它们的核心区别:


一、贪心算法:活在当下,只选眼前最优

特点:每一步都选择当前看起来最好的选项,不回头、不反悔。

例子:自助餐策略

假设你去吃自助餐,想吃到总价值最高的食物:

  • 贪心策略:每次都拿当前最贵的食物(比如先拿龙虾,再拿牛排...)

  • 优点:简单快速,无需复杂计算

  • 风险:可能吃撑后错过后续更好的组合(比如拿了龙虾但错过限量甜品)

经典问题适用场景
  1. 找零钱问题(硬币面额合理时)

  2. 活动安排问题(选最多不冲突活动)

  3. 最小生成树(Prim/Kruskal算法)


二、动态规划:谋定后动,全局最优

特点:将大问题分解为小问题,记录中间结果,通过递推找到全局最优解。

例子:旅行路线规划

假设从北京到上海有多条路径,每段路程有不同时间成本:

  • 动态规划做法

    1. 记录到每个中间城市的最短时间

    2. 计算到下一城市时,对比所有可能路线的"历史最优+当前路段"

    3. 最终得到全局最优路径

  • 优势:保证找到最佳方案

  • 代价:需要存储大量中间结果

经典问题适用场景
  1. 背包问题(物品不可拆分)

  2. 最短路径问题(Floyd-Warshall算法)

  3. 编辑距离计算


三、关键区别对比

贪心算法动态规划
决策方式永远选择当前最优综合历史数据推导最优
计算复杂度通常低(O(n)或O(n log n))通常高(O(n²)或更高)
结果可靠性可能不是全局最优保证全局最优
存储需求无需存储历史状态需要存储子问题结果

四、如何选择算法?

  • 选贪心如果:

    • 问题具有"贪心选择性质"(局部最优能推导全局最优)

    • 需要快速得到近似解

  • 选动态规划如果:

    • 问题有重叠子问题

    • 需要绝对精确的最优解

    • 能接受更高的计算成本

典型案例对比

  • 分数背包问题(物品可拆分):贪心最优

  • 0-1背包问题(物品不可拆分):必须用动态规划

理解这两个算法的最好方式是多对比它们的典型应用场景,就像明白"快速决策"和"周密计划"在不同生活场景中的适用性一样。

贪心算法以局部最优为导向,追求高效简洁;动态规划以记忆和递推为核心,确保全局最优。

相关文章:

  • 服务器异地备份,服务器异地备份有哪些方法?
  • 如何识别DDoS攻击类型及有效防护?一篇简明指南
  • OA 系统如何做好 DDoS 防护?从架构设计到实战防御的完整方案
  • 【HPC存储性能测试】01-OpenMPI部署
  • 树状数组单点操作+前缀K差分->区间K操作 -#131-#132
  • npm、pnpm 和 yarn 包管理工具
  • SpringBoot常用注解解析汇总
  • 吴恩达深度学习作业之风格转移Neural Style Transfer (pytorch)
  • Python生活手册-元组:保险柜与瑞士军刀
  • 深度学习新趋势:利用MLP取代卷积层——S2-MLPv2模型解析
  • DBeaver连接人大金仓数据库
  • 2025年度规划八步法:日事清目标管理+使命愿景模型驱动组织架构优化与业务流程升级
  • 虚拟列表+无限滚动的实现
  • Java自定义注解详解
  • RT Thread Studio创建USB虚拟串口工程
  • 设计一个食品种类表
  • 黑马点评redis改 part 6
  • Spring AOP思想与应用详解
  • 0804标星_复制_删除-网络ajax请求2-react-仿低代码平台项目
  • 量子力学:量子通信
  • 网警侦破特大“刷量引流”网络水军案:涉案金额达2亿余元
  • 全球前瞻|王毅赴巴西出席金砖外长会,加拿大迎来“几十年来最重要大选”
  • 杭州打造商业航天全产业链,请看《浪尖周报》第22期
  • 内蒙古纪检干部刘占波履新呼和浩特,曾参与涉煤腐败倒查20年工作
  • 国家市场监管总局:组织销毁侵权假冒服装、食药等3300吨
  • 安徽铁塔再通报“会议室不雅行为”事件:涉事员工停职检查