了解贪心算法

本文介绍了贪心算法的基本概念,通过一个找零问题的示例展示了其工作原理。贪心算法采取局部最优解策略,可能不适用于所有问题。常见应用包括选择排序、背包问题、最小生成树等。尽管它可能在某些情况下性能优秀,但并不总是能得出全局最优解。
摘要由CSDN通过智能技术生成

    在本教程中,您将学习什么是贪心算法。此外,您还会找到一个贪心算法的示例。
    贪心算法是一种通过选择当前可用的最佳选项来解决问题的方法,而不必考虑它未来会带来的结果。换句话说,通过局部最佳选择,旨在达到全局最佳选择。
    这种算法可能不是所有问题的最佳选择。在某些情况下可能会产生错误的结果。
    该算法采用自顶向下的方法。
    该算法的主要优点是:

  1. 该算法更易于描述。
  2. 该算法的性能可能优于其他算法(但并非在所有情况下都如此)。
可行解

    可行解为解决问题提供了最优解。

贪心算法
  1. 首先,包含答案的解决方案集为空。
  2. 在每个步骤中,都会向解决方案集中添加一个项。
  3. 如果解决方案集是可行的,则保留当前项。
  4. 否则,该项将被拒绝,不再考虑。
示例
问题:您必须使用最少数量的硬币进行零钱找零。
金额:28美元

可用硬币:
  5美元硬币
  2美元硬币
  1美元硬币

    解决方法:

  1. 创造一个空的解决方案集 solution-set = { }。
  2. coins = {5, 2, 1}
  3. sum = 0
  4. 当 sum ≠ 28,执行以下操作。
  5. 从 coins 中选择一个硬币 C,使得 sum + C < 28。
  6. 如果 C + sum > 28,返回无解决方案。
  7. 否则,sum = sum + C。
  8. 将 C 加入solution-set。

    5次迭代之后,解决方案集包含5个5美元的硬币。之后得到1个2美元的硬币,最后得到1个1美元的硬币。

贪心算法的应用
  • 选择排序
  • 背包问题
  • 最小生成树
  • 单源最短路径问题
  • 作业调度问题
  • Prim的最小生成树算法
  • Kruskal的最小生成树算法
  • Dijkstra的最小生成树算法
  • 霍夫曼编码
  • 福特-富克森算法
参考文档

[1]Parewa Labs Pvt. Ltd.Greedy Algorithm[EB/OL].https://www.programiz.com/dsa/greedy-algorithm,2020-01-01.
[2]Baidu.贪心算法[EB/OL].https://baike.baidu.com/item/贪心算法/5411800,2021-02-22.
[3]大饼.经典算法思想5——贪心(greedy algorithm)[EB/OL].https://zhuanlan.zhihu.com/p/72734416,2020-11-05.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值