博客
关于我
贪心算法介绍
阅读量:813 次
发布时间:2019-03-26

本文共 1047 字,大约阅读时间需要 3 分钟。

贪心算法在计算机科学中是一种解决问题的策略,其核心思想是通过局部最优来实现整体最优。这种算法在面对复杂问题时,能够快速做出决策,避免因过于关注整体最优而陷入分析 paralysis。要实现高效的贪心算法,关键是贪心策略的选择必须具备无后效性,也就是说,某个状态之前的决策不会影响以后的状态,只与当前状态有关。

贪心算法的典型步骤

败心算法通常包括以下几个步骤:

  • 建立数学模型:将要解决的实际问题转化为数学模型,通常涉及变量、目标和约束条件的定义。
  • 分解问题:将复杂的问题分解为若干个子问题,每个子问题的解决方式相对独立。
  • 求解子问题:针对每个子问题,找到其局部最优解。这种局部最优解在整体问题中可能并非最优,但它能为整体问题提供一个可行的基础。
  • 合成整体解:将各个子问题的局部最优解组合起来,形成整个问题的最优解决方案。
  • 贪心算法的应用场景

    贪心算法在在很多领域都有广泛应用,比如:

    • 找零问题:通过尽可能多地使用高面额纸币来完成支付,这是钱币找零问题的经典解决方法。
    • 任务调度:例如带有时间限制的作业调度问题,可以采用贪心算法选择优先执行时间最早的作业。
    • 资源分配:在有限资源下合理分配资源,以最大化系统性能。
    • 组合优化:处理背包问题、旅行商问题等,通过局部最优迭代得到整体最优解。

    贪心算法的挑战

    贪心算法虽然简单有效,但并非所有问题都适合。贪心算法的缺点在于它可能导致局部最优而非全局最优。因此,在选择贪心策略时,必须确保该策略具有无后效性,也就是说,每一步的决策不会影响之后的决策。

    贪心算法与实例

    以下是一个典型的贪心算法实例:找零问题

    问题背景:假设我们有不同面值的纸币(如1元、2元、5元、10元、20元、50元、100元),每种纸币的张数已知,支付K元,我们需要找零并使用最少张数的纸币。

    贪心策略:每一步都使用面额最大的纸币来完成支付。

    算法步骤

  • 初始化纸币数组,按面额从大到小排序。
  • 反复遍历纸币数组,尝试用当前纸币的面额减少 Remaining金额。
  • 使用完某张纸币后,计数器加一。
  • 直到 Remaining金额为零,结束算法并返回计数器值。
  • 优化思路:这样做不仅保证了使用纸币数量最少,还符合人类在日常支付中的惯常行为,因此在实际应用中被广泛采用。

    结论

    贪心算法作为一种通用解决问题的策略,具有广泛的应用场景但需谨慎选择策略。通过合理分解问题、局部最优迭代,贪心算法能够为复杂问题提供高效的解决方案。在实际应用中,关键在于确保贪心策略具备无后效性,以确保整体最优解。

    转载地址:http://wahyk.baihongyu.com/

    你可能感兴趣的文章
    mysql 的GROUP_CONCAT函数的使用(group_by 如何显示分组之前的数据)
    查看>>
    MySQL 的instr函数
    查看>>
    MySQL 的mysql_secure_installation安全脚本执行过程介绍
    查看>>
    MySQL 的Rename Table语句
    查看>>
    MySQL 的全局锁、表锁和行锁
    查看>>
    mysql 的存储引擎介绍
    查看>>
    MySQL 的存储引擎有哪些?为什么常用InnoDB?
    查看>>
    Mysql 知识回顾总结-索引
    查看>>
    Mysql 笔记
    查看>>
    MySQL 精选 60 道面试题(含答案)
    查看>>
    mysql 索引
    查看>>
    MySQL 索引失效的 15 种场景!
    查看>>
    MySQL 索引深入解析及优化策略
    查看>>
    MySQL 索引的面试题总结
    查看>>
    mysql 索引类型以及创建
    查看>>
    MySQL 索引连环问题,你能答对几个?
    查看>>
    Mysql 索引问题集锦
    查看>>
    Mysql 纵表转换为横表
    查看>>
    mysql 编译安装 window篇
    查看>>
    mysql 网络目录_联机目录数据库
    查看>>