贪心算法的基本思想

简介: 贪心算法是一种简单且常用的算法,每一步选择当前最优解,追求局部最优。文章通过纸币拼凑实例说明其原理,并指出贪心算法并不总能得到全局最优解,最后介绍了其在部分背包问题和经典算法中的应用。

在《算法是什么》一节讲到,算法规定了解决问题的具体步骤,即先做什么、再做什么、最后做什么。贪心算法是所有算法中最简单,最易实现的算法,该算法之所以“贪心”,是因为算法中的每一步都追求最优的解决方案。


举个例子,假设有 1、2、5、10 这 4 种面值的纸币,要求在不限制各种纸币使用数量的情况下,用尽可能少的纸币拼凑出的总面值为 18。贪心算法的解决方案如下:

  • 率先选择一张面值为 10 的纸币,可以最大程度上减少需要拼凑的数额(剩余 8);
  • 选择一张面值为 5 的纸币,需要拼凑的数额降为 3;
  • 选择一张面值为 2 的纸币,需要拼凑的数额降为 1;
  • 选择一张面值为 1 的纸币,完成拼凑。


可以看到,每一步都力求最大限度地解决问题,每一步都选择的是当前最优的解决方案,这种解决问题的算法就是贪心算法。


注意,虽然贪心算法每一步都是最优的解决方案,但整个算法并不一定是最优的。仍以选纸币为例,假设有 1、7、10 这 3 种面值的纸币,每种纸币使用的数量不限,要求用尽可能少的纸币拼凑出的总面值为 15,贪心算法的解决方案为:

  • 选择一张面值为 10 的纸币,需要拼凑的数额降为 5;
  • 选择一张面值为 1 的纸币,需要拼凑的数额降为 4;
  • 选择一张面值为 1 的纸币,需要拼凑的数额降为 3;
  • 选择一张面值为 1 的纸币,需要拼凑的数额降为 2;
  • 选择一张面值为 1 的纸币,需要拼凑的数额降为 1;
  • 选择一张面值为 1 的纸币,完成拼凑。


最终贪心算法给出的解决方案是 10+1+1+1+1+1 共 6 张纸币,但是通过思考,最优的解决方案应该是只需要用 3 张纸币(7+7+1)。


总的来讲,贪心算法注重的是每一步选择最优的解决方案(又称“局部最优解”),并不关心整个解决方案是否最优。

贪心算法的实际应用

部分背包问题是使用贪心算法解决的典型案例之一,此外它还经常和其它算法混合使用,例如克鲁斯卡尔算法迪杰斯特拉算法等,我们会在后续章节一一进行讲解。

相关文章
|
1月前
|
算法 Java C语言
弗洛伊德算法求最短路径
弗洛伊德算法用于寻找加权图中各顶点间的最短路径,适用于无向图和有向图。算法基于动态规划思想,通过枚举中间顶点来更新路径,确保最终得到最短路径。该算法要求路径权值非负,否则可能出错。
105 0
|
1月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
本文内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
246 15
|
1月前
|
算法
回溯算法的基本思想
本节介绍回溯算法,通过图1中从A到K的路径查找示例,说明其与穷举法的异同。回溯算法通过“回退”机制高效试探各种路径,适用于决策、优化和枚举问题。
43 0
|
1月前
|
算法 搜索推荐
分治算法的基本思想
分治算法通过将复杂问题拆分成多个独立的小问题,逐一解决后再合并结果。适合处理大规模数据,常见应用包括排序、查找最大值/最小值及汉诺塔等问题。
53 0
|
1月前
|
存储 算法 Java
组合问题
组合问题是从给定的N个数中找出任意K个数的所有组合。由于组合内元素无顺序,因此[1,2]和[2,1]视为同一组合。解决组合问题常用的方法包括嵌套循环和回溯算法。嵌套循环适用于K值较小的情况,而回溯算法更适合K值较大的情况,能有效避免多层循环带来的代码复杂性和低效率问题。回溯算法通过递归实现,能动态选择元素并逐步构建组合,最终输出所有符合条件的组合结果。
78 0
|
1月前
|
算法 Java 定位技术
迷宫问题
迷宫问题是指在给定区域内寻找从起点到终点的可行路径。可以使用回溯算法解决,通过不断尝试四个方向(上下左右)移动,若无法前进则回退,直到找到终点或遍历所有可能路径。文中还给出了C语言、Java和Python的实现代码,并展示了运行结果。
74 0
|
1月前
|
存储 算法
最小生成树的概念与思想
数据结构中的图存储结构包含顶点和边,分为连通图与非连通图。生成树是包含所有顶点、任意两点间仅有一条通路的极小连通图。最小生成树则是权值总和最小的生成树,常用于解决道路建设等实际问题,常用算法有普里姆算法和克鲁斯卡尔算法。
43 0
|
2月前
|
存储 NoSQL 关系型数据库
1-MongoDB相关概念
MongoDB 是一种高性能、无模式的文档型数据库,适合需要灵活数据模型、高扩展性和大规模数据存储的应用场景。适用于新项目快速开发、高并发读写、海量数据存储及地理文本查询等需求,且支持类似 JSON 的 BSON 数据格式,灵活易扩展。
50 0
|
2月前
|
存储 NoSQL 关系型数据库
1-MongoDB相关概念
传统关系型数据库(如MySQL)难以应对高并发读写、海量数据存储及高扩展性需求。MongoDB适用于社交、游戏、物流等场景,支持大数据量、高频读写及低事务要求的数据存储与高效访问。
48 0
|
9天前
|
虚拟化 数据安全/隐私保护
VMware Workstation Pro - 最新版
VMware是一款强大的虚拟机软件,可在单台计算机上模拟完整硬件系统,实现多系统运行。2024年5月推出最新版Workstation Pro 17.5.2,个人用户可免费使用。用户可通过官网下载并注册账户,按指引完成安装,适用于开发、测试及部署应用,具备高效灵活的虚拟化技术。
239 0