数据结构与算法----贪心

## 贪心算法

1. 核心思想

贪心算法通过每一步的局部最优选择,逐步推导出全局最优解。它的特点是不回溯,即一旦做出选择,就不再修改。


2. 适用条件

贪心算法适用于满足以下两个条件的问题:

  1. 贪心选择性质:每一步的局部最优选择能够导致全局最优解。

  2. 最优子结构:问题的最优解包含子问题的最优解。


3. 贪心算法的证明方法

贪心算法的正确性通常需要通过以下方法证明:

  1. 归纳法:证明每一步的贪心选择都能导致全局最优。

  2. 交换论证:假设存在一个更优的解,通过交换元素证明贪心解不会更差。

  3. 反证法:假设贪心解不是最优,导出矛盾。


4. 典型应用场景

(1) 分数背包问题
  • 问题描述:给定一组物品,每个物品有价值和重量,背包有容量限制。可以选择物品的一部分,目标是最大化背包中的总价值。

  • 贪心策略:按单位价值(价值/重量)从高到低排序,优先选择单位价值最高的物品。

  • 时间复杂度:(O(n \log n))(排序)。

(2) 活动选择问题
  • 问题描述:给定一组活动的开始和结束时间,选择最多的互不重叠活动。

  • 贪心策略

你可能感兴趣的:(算法,算法,数据结构,C++,贪心算法)