贪心算法(Greedy algorithm)
贪心算法(Greedy Algorithm)是一种基于贪心策略的算法,它的基本思路是每次在问题的可行解空间中选择当前最优解,从而希望最终得到全局最优解。
贪心算法通常具有以下特点:
针对一个优化问题,每次选择的决策仅仅依赖于当前状态,而不考虑过去或未来的状态。 在每次决策时,贪心算法都会选择当前状态下的最优解,即局部最优解,而这个选择并不一定是全局最优解。 贪心算法的适用范围相对有限,适用于某些问题的局部最优解就是全局最优解的情况,而对于有些问题,贪心算法可能无法得到正确的结果。因此,贪心算法通常被作为解决问题的一种启发式算法,可以用来辅助其他算法或优化问题的时间复杂度。
常见应用:
任务调度问题:在有限的时间内完成尽可能多的任务。 钱币找零问题:找到一组面额最少的钞票或硬币,使得它们的总和等于给定的金额。 背包问题:在有限的背包容量内,选择一些物品使得它们的价值最大化。 贪心算法的实现方式通常有两种:
基于贪心策略的直接实现,通常需要对问题进行适当抽象,确定贪心策略和贪心选择。 基于动态规划的贪心算法,将问题划分为子问题,通过求解子问题的最优解来构建全局最优解。
- Dijkstras算法 : Dijkstra算法(也叫单源最短路径算法)
- Ford-Fulkerson
- Huffman-Coding
- Kruskals
- Prims