1. 框架
Algorithm Greedy(Problem):
Input: 问题实例 Problem
Output: 解集合 Solution
// 1. 预处理阶段(通常需要排序)
SortedItems ← Sort(Problem.items) // 按贪心策略排序
// 2. 初始化解集合
Solution ← ∅
// 3. 主循环:逐步构建解
for each item in SortedItems do:
// 3.1 可行性检查
if IsFeasible(Solution ∪ {item}) then:
Solution ← Solution ∪ {item}
// 3.2 提前终止条件(可选)
if IsComplete(Solution) then:
break
// 4. 返回最终解
return Solution
2. 解决哪些问题
贪心算法适用于特定类型的优化问题,其核心是通过局部最优选择逐步逼近全局最优解。适用的问题需满足贪心选择性质(局部最优能导向全局最优)和最优子结构性质(子问题的最优解可组合为全局解)。主要解决以下问题:
🔧 一、经典问题类型
活动调度问题
- 从互斥活动中选择最大兼容子集(如按结束时间排序后贪心选择)。
- 典型场景:会议室安排、课程排期。
最小生成树问题
- 在带权图中生成连接所有顶点的最小权重树。
- 算法:Kruskal(按边权升序选择)和Prim(从点扩展最小边)。
最短路径问题
- 求单源点到其他顶点的最短路径。
- 算法:Dijkstra(优先队列选择当前最短路径节点。
背包问题(分数背包)
- 物品可拆分时,按单位价值降序装入背包,使总价值最大。</