企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 贪婪算法 > 原文: [https://www.programiz.com/dsa/greedy-algorithm](https://www.programiz.com/dsa/greedy-algorithm) #### 在本教程中,您将学习什么是贪婪算法。 此外,您还会找到一个贪婪方法的示例。 贪心算法是一种通过选择当前可用的最佳选项来解决问题的方法,而无需担心将来会带来什么结果。 换句话说,本地最佳选择旨在产生全局最佳结果。 对于所有问题,该算法可能都不是最佳选择。 在某些情况下,它可能会产生错误的结果。 该算法永远不会返回来扭转所做出的决定。 该算法以自顶向下的方式工作。 该算法的主要优点是: 1. **该算法更容易描述**。 2. 与其他算法相比,该算法的**性能更好**(但并非在所有情况下)。 * * * ## 可行的解决方案 一种可行的解决方案是为问题提供最佳解决方案的解决方案。 * * * ## 贪婪算法 1. 首先,解决方案集(包含答案)为空。 2. 在每个步骤中,将一个项目添加到解决方案集中。 3. 如果解决方案集可行,则保留当前项目。 4. 否则,该项目将被拒绝,不再考虑。 * * * ## 贪婪方法示例 ``` Problem: You have to make a change of an amount using the smallest possible number of coins. Amount: $28 Available coins: $5 coin $2 coin $1 coin ``` **解决方案**: 1. 创建一个空的`solution-set = {}`。 2. `coins = {5, 2, 1}` 3. `sum = 0` 4. 当`sum≠38`时,请执行以下操作。 5. 从`coins`中选择一个硬币`C`,使得`sum + C < 28`。 6. 如果`C + > 28`之和,则不返回任何解。 7. 否则,`sum = sum + C`。 8. 将`C`添加到`solutionSet`中。 在前 5 次迭代之前,解决方案集包含 5 个 5 美元个硬币。 之后,我们得到 1 个 2 美元硬币,最后得到 1 个 1 美元硬币。 * * * ## 贪婪算法应用 * [选择排序](/dsa/selection-sort) * [背包问题](https://en.wikipedia.org/wiki/Knapsack_problem) * [最小生成树](/dsa/spanning-tree-and-minimum-spanning-tree) * [单源最短路径问题](https://en.wikipedia.org/wiki/Shortest_path_problem) * 作业调度问题 * [Prim 的最小生成树算法](/dsa/prim-algorithm) * [Kruskal 的最小生成树算法](/dsa/kruskal-algorithm) * [Dijkstra 的最小生成树算法](/dsa/dijkstra-algorithm) * [霍夫曼编码](/dsa/huffman-coding) * [Ford-Fulkerson 算法](/dsa/ford-fulkerson-algorithm)