阅读 · 推演 · 自测 · 理解
GREEDY · PROOF METHODS

贪心算法的两种证明方法

Greedy stays ahead 与 Exchange argument:例子、每一步的理由、一般证明与可套用模板

2026 T3 · Module 2: Greedy AlgorithmsPDF p13、p16–26、p33–48自写数值与补充推导另行标明
来源: 2026 T3 · Module 2: Greedy Algorithms, PDF p13、p16–26、p33–48, 自写数值与补充推导另行标明
Module

1. 先分清:一直领先,还是逐步交换

算法 / 主题:综合方法
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

课件回查:PDF p13

贪心算法每次做一个当前看起来最好的选择。证明的任务是说明:这些局部选择连在一起,为什么得到整体最优解。先确认输出合法,再证明没有合法方案能在题目的目标上更好。

方法你在比较什么核心动作最后必须补的一步
Greedy stays ahead · 贪心始终领先做完相同步数后,贪心与任意合法方案的某个关键状态用归纳证明贪心每一步都不落后把状态的领先,连接到题目要求的最优性
Exchange argument · 交换论证修改一个合法方案前后的目标值把不符合贪心规则的部分换掉,且不变差说明修改保持合法、会结束,并到达贪心或等价的规范解

课件原文 · PDF p13:Greedy stays ahead: prove that at every stage, no other sequence of choices could do better than our proposed algorithm.

中文:证明在每个阶段,其他选择序列在所比较的指标上都不能优于贪心。

课件原文 · PDF p13:Exchange argument: consider any alternative solution, and gradually transform it to the solution found by our proposed algorithm without making it any worse.

中文:考虑一个替代方案,逐步把它改成贪心方案,并保证每次修改不使它变差。可以从任意合法方案出发,也可以从一个最优方案出发。

Module

2. 始终领先例子:用最少基站覆盖房屋

算法 / 主题:基站覆盖
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

课件回查:PDF p33PDF p34PDF p35

课件 Problem 原文 · PDF p33:Along the long, straight road from Balladonia (in the West) to Caiguna (in the East), houses are scattered quite sparsely, sometimes with long gaps between two consecutive houses. Telstra must provide mobile phone service to people who live alongside the road, and the range of Telstra’s cell tower is 5km. Task: Design an algorithm for placing the smallest number of cell towers alongside the road, that is sufficient to cover all houses.

中文:在从西边 Balladonia 到东边 Caiguna 的直路上,房屋可能相隔很远。每座基站的覆盖半径为 5 km。安排尽量少的基站,覆盖所有房屋。

对象含义
房屋位置 h从西向东递增的坐标
覆盖半径 d本例 d = 5 km;塔在位置 t 时覆盖 [t−d, t+d]
贪心选择 gₖ贪心从西往东放的第 k 座塔的位置
替代选择 aₖ任意完整合法方案中,从西往东第 k 座塔的位置
  1. 把房屋从西向东排序。原因:这样可以确定‘最左边尚未覆盖的房屋’。
  2. 找到最左未覆盖房屋 h,把塔放在 h+d。原因:塔再往东就盖不到 h;在仍覆盖 h 的位置里,h+d 能把覆盖范围推得最远。
  3. 这座塔的最右覆盖点是 h+2d。把范围内的后续房屋一并跳过。原因:它们已经被同一座塔覆盖,不需要另外建塔。
  4. 重复,直到所有房屋被覆盖。若房屋已排好序,扫描 O(n);否则排序与扫描合计 O(n log n)。这是实现代价,不是最优性的证明。

自写数值例子:房屋位置为 [1, 4, 9, 12, 16, 21, 24] km。假设这些位置离道路东端足够远,符合课件暂时采用的边界条件。

第几步最左未覆盖房屋塔放哪里覆盖范围与本步覆盖为什么选这里
11g₁ = 1+5 = 6[1,11]:覆盖 1、4、9仍能覆盖房屋 1 的最东位置
212g₂ = 12+5 = 17[12,22]:覆盖 12、16、21房屋 12 不能再靠上一座塔,新的塔尽量向东
324g₃ = 24+5 = 29[24,34]:覆盖 24上一座塔只能到 22,必须覆盖新的最左缺口

对照一个完整合法方案 A = [4,13,23]:三座塔最终也能覆盖所有房屋。做完相同步数时,6≥4、17≥13、29≥23。比较的是第 k 座塔的位置;两套方案最终都用三座塔,不要求这一组例子的塔数不同。

逐步看:相同步数的覆盖边界

自写数值演示,帮助看清状态;一般正确性由相邻正文的证明给出。

Module

3. 始终领先证明:归纳以后,还要证明塔数最少

算法 / 主题:证明方法
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

课件回查:PDF p36PDF p37PDF p38

课件 Claim 原文 · PDF p36–37:For all k≥1, the kth tower in the greedy selection is at least as far east as the kth tower in any other valid selection.

中文:第 k 座贪心塔至少和任意合法方案的第 k 座塔一样靠东。下面把索引范围写准确:G 有 r 座,A 有 m 座;只在两者都存在第 k 座时比较,即 1≤k≤min(r,m)。塔按位置从西到东排列。

要证明的阶段性质:对任意完整合法方案 A,aₖ ≤ gₖ。
不是先假设贪心最优,而是先证明这个位置关系。
证明步骤这一刻做什么为什么能这样做
① 固定比较对象固定任意一个覆盖全部房屋的方案 A不能只比较上一个数值例子;A 任意,结论才能覆盖所有合法方案
② 基础情况 k=1第一间房在 h₁,g₁=h₁+d。假设 a₁>g₁则 a₁−d>h₁,第一座替代塔盖不到 h₁;其余塔更靠东,也盖不到。与 A 合法矛盾,所以 a₁≤g₁
③ 归纳假设假设 aₖ₋₁≤gₖ₋₁只借用前一步已经证明的位置关系;不能把第 k 步也放进假设
④ 找见证房屋 hₖ第 k 座贪心塔由最左未覆盖房屋触发:gₖ=hₖ+d,且 hₖ>gₖ₋₁+dhₖ 正是上一座贪心塔右端之外的第一个房屋
⑤ 尝试让 A 跑得更远为反证,假设 aₖ>gₖ要说明 A 的第 k 座塔不可能越过贪心的位置
⑥ 找到漏掉的房屋hₖ 在 A 的第 k−1 座塔右端之后,又在第 k 座塔左端之前前面的替代塔更靠西,后面的更靠东,因此不是只漏了两座塔,而是 A 中没有任何塔覆盖 hₖ
⑦ 完成归纳aₖ>gₖ 不可能,因此 aₖ≤gₖ基础情况与归纳步骤一起给出全部共同索引上的不落后性质

第 ⑥ 步的完整不等式链是课件 p37 的关键。每个符号都对应一个覆盖端点:

aₖ₋₁ + d ≤ gₖ₋₁ + d < hₖ = gₖ − d < aₖ − d
    ↑归纳假设        ↑触发新塔     ↑gₖ=hₖ+d   ↑反设 aₖ>gₖ

左边说明 hₖ 在 A 前 k−1 座塔的覆盖范围之外;右边说明 A 从第 k 座起都来得太晚。房屋 hₖ 在覆盖缺口里,A 就不是完整合法方案。

91213 前塔最右到 9后塔最左从 13 开始 房屋 12 没有被任何塔覆盖
自写反设图:a₁=4、a₂=18、d=5;中间缺口是证明的见证。
阶段关系:aₘ ≤ gₘ
未覆盖见证:hₘ₊₁ > gₘ+d ≥ aₘ+d
结论:不存在 m<r 的合法方案,因此 r=min{|A| : A 覆盖全部房屋}。

空输入不需要任何塔。上面的非空收尾将课件 p38 的 r−1 座反设推广为任意 m<r,属于补充推导;没有使用不存在的第 m+1 座替代塔。

Module

4. 交换例子:磁带上为什么短文件先放

算法 / 主题:综合方法
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

课件 Problem 原文 · PDF p41:A list of n files of lengths Lᵢ which have to be stored on a tape. Each file is equally likely to be needed. To retrieve a file, one must start from the beginning of the tape and scan it until the file is found and read. Task: Order the files on the tape so that the average (expected) retrieval time is minimised.

中文:把 n 个文件安排在磁带上,每个文件被需要的概率相同。读取某个文件时,要从磁带开头扫描到该文件末尾。选择一个顺序,使平均读取代价最小。以扫描长度计代价;固定读取速度只会乘一个常数,不改变最佳顺序。

符号含义
Lᵢ当前排列中第 i 个文件的长度;i 从 1 开始
Cᵢ = L₁+⋯+Lᵢ读取该文件要扫描到的结束位置,即前缀总长度
E平均读取代价;每个文件的概率都是 1/n
T = nE把 E 乘以正的常数 n,便于去掉分母;最小化 T 与最小化 E 等价
E = (C₁+C₂+⋯+Cₙ)/n
T = C₁+C₂+⋯+Cₙ
  = nL₁+(n−1)L₂+⋯+2Lₙ₋₁+Lₙ

为什么第一个长度被乘 n?读取任何一个文件都必须先经过它,所以它在 n 个前缀里都出现。第二个只在后 n−1 个前缀里出现。越靠前,长度被重复计入的次数越多。

贪心规则:按文件长度从小到大排列。自写例子先从合法排列 [4,1,3] 出发,逐次换掉相邻逆序:

状态文件顺序三个文件的读取代价TE这一步的理由
原排列[4,1,3]4、5、81717/3顺序合法,但长度 4 排在较短的 1 前面
交换 4 与 1[1,4,3]1、5、81414/3第一个文件的读取代价减 3,后两个结束位置不变
交换 4 与 3[1,3,4]1、4、81313/3第二个文件的读取代价减 1,其他结束位置不变

逐步看:每次交换,哪些代价发生变化

自写数值演示,帮助看清状态;一般正确性由相邻正文的证明给出。

Module

5. 交换证明:合法、差值、进展、收尾

算法 / 主题:贪心方法
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

课件回查:PDF p43PDF p44PDF p45

课件 Claim 原文 · PDF p44:The scaled retrieval time nL₁+(n−1)L₂+(n−2)L₃+...+2Lₙ₋₁+Lₙ is minimised if L₁≤L₂≤...≤Lₙ.

中文:当文件长度按非递减顺序排列时,上面的缩放读取代价 T 最小。下面先用直接变换讲明白,再对应课件的反证版本。

证明步骤要做什么为什么需要这一步
① 从任意合法排列 A 出发固定一个含全部文件、每个恰好一次的排列最后要比较所有合法排列,不能只证明 [4,1,3] 这一个例子
② 找相邻逆序若未排好序,就存在一对相邻长度 x>y若所有相邻项都满足前≤后,传递性便得到全序列非递减;因此未排序一定有相邻逆序
③ 定义交换后的 A′只把相邻的 [x,y] 改成 [y,x],其他位置不动对象集合、每个文件出现的次数都不变,A′ 仍合法
④ 确定影响范围前面的文件不动;后面的前缀仍增加 x+y后续文件的读取结束位置不变,目标值差只来自这两个文件
⑤ 算差值统一用 Δ=T_after−T_before,计算得 Δ=y−x<0这是不会变差的依据,不能只说‘小的放前面显然更好’
⑥ 保证变换结束每次交换相邻逆序,逆序数减少 1逆序数是非负整数,最多 n(n−1)/2;不能无限交换
⑦ 联系贪心没有逆序就得到长度非递减排列,与贪心顺序等价即使等长文件的身份顺序不同,长度序列相同,T 相同

第 ⑤ 步先用读取过程推导。设这两个文件之前已有扫描长度 P;P 是同一段前缀,在交换前后都不变:

量交换前 x→y交换后 y→x为什么
先读的文件代价P+xP+y从磁带开头读到第一项末尾
后读的文件代价P+x+yP+y+x二者总长度都是 x+y
二者对 T 的贡献2P+2x+y2P+x+2yT 是所有文件读取代价的和
Δ = T_after − T_before
  = (2P+x+2y) − (2P+2x+y)
  = y−x
若 x>y,则 Δ<0,因此 T_after<T_before;E_after−E_before=(y−x)/n<0。

同一差值也可以直接从课件的带权长度式算。i 是这两个文件中第一个的位置,K 是所有不受交换影响的贡献:

T_before = K+(n−i+1)x+(n−i)y
T_after  = K+(n−i+1)y+(n−i)x
T_after−T_before = y−x。

第 ⑥ 步的进展量:I(A) 是满足 p<q 且 Lₚ>Lq 的位置对数量,即逆序数。交换相邻的 x>y 后,其他文件仍在两者共同的左侧或右侧,涉及它们的逆序总数不变;只有 x 与 y 这一对消失。因此 I(A′)=I(A)−1。这是对课件 p45 的补充说明。

A₀=A → A₁ → ⋯ → Aₜ(长度非递减)
T(A₀) ≥ T(A₁) ≥ ⋯ ≥ T(Aₜ)=T(G)
A 任意,因此 T(G) ≤ T(A) 对所有合法 A 成立。
G 自身合法,所以它达到最小代价。

反证版本对应课件 p44:假设一个最优排列尚有相邻逆序 x>y;交换后仍合法且 T 严格更小,与‘已最优’矛盾。因此最优排列不能有逆序。等长的相邻文件交换差值为 0,不要求最优解唯一。

Module

6. 同一题,也可以用两种方法证明

算法 / 主题:证明方法
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

两种证明不是两类互斥的算法标签。以课件的活动选择为例:每次选当前兼容活动中结束最早的活动,目标是最大化选中的活动数量。课件 p20–26 用交换论证;下面的始终领先写法是补充推导。

课件 Problem 原文 · PDF p16:Instance: A list of n activities, with starting times sᵢ and finishing times fᵢ. Task: Find a largest number of pairwise compatible activities. Two activities are compatible if their intervals do not overlap.

中文:给出 n 个活动的开始与结束时间,选出最多的两两不冲突活动。本页自写例子使用正时长的半开区间 [s,f),首尾相接允许兼容,所以判定为 s_next≥f_previous;若原题要求严格间隔,应相应改为严格不等式。

活动区间备注
A[1,3)最早结束
B[2,5)与 A 冲突
C[5,7)与 A 兼容
D[6,9)与 C 冲突
E[9,11)可在 C 或 D 之后

贪心 G=(A,C,E),对照合法方案 O=(B,D,E),二者都选 3 个活动。定义 s(x)、f(x) 为活动 x 的开始、结束时间;gₖ、oₖ 为两方案按时间排列的第 k 个活动。

同一个例子始终领先:比结束时间交换:改对照方案
第 1 步f(A)=3≤f(B)=5把 (B,D,E) 的 B 换为 A,得到 (A,D,E)
第 2 步f(C)=7≤f(D)=9把 (A,D,E) 的 D 换为 C,得到 (A,C,E)
第 3 步f(E)=11=f(E)=11已经与 G 一致,不必修改
s(oₖ₊₁) ≥ f(oₖ) ≥ f(gₖ)
⇒ oₖ₊₁ 在贪心第 k 步以后仍可选
⇒ 贪心若尚未选第 k+1 个,也不能终止
⇒ f(gₖ₊₁) ≤ f(oₖ₊₁)。

正时长使 oₖ₊₁ 的结束时间严格晚于贪心第 k 步结束时间,因此它也不是已经选择过的旧活动。最后若 O 比 G 多一个,O 的下一个活动仍与 G 兼容,贪心就不应结束,矛盾。所以 |G|≥|O|。这一步把‘结束时间更早’连接到了‘数量更多或相等’。

不断替换,直到 O 用完。G 不能先用完:若后缀仍有与共同前缀兼容的活动,算法还能继续选。于是 G 至少有 |O| 个。用最优 O 出发时,还可说每次替换保持同样的最优数量。

Module

7. 一套可以套用的公式与证明模板

算法 / 主题:证明方法
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

下面是根据课件整理的写作模板,不是一个能自动证明所有贪心算法的万能定理。需要把题目的比较指标、合法性理由、差值和收尾具体填进去。

方法按这个顺序写核心公式最后一句要证明什么
始终领先比较对象 → 相同阶段 → 指标 → 基础情况 → 归纳保持 → 连接最终目标P(Gₖ)≥P(Aₖ),或 P(Gₖ)≤P(Aₖ)说明为何这个状态关系排除了最终更优的合法方案
交换合法比较方案 → 可修改的分歧 → 定义 A′ → 保持合法 → 算目标差 → 有限进展 → 贪心/等价解Δ=F(A′)−F(A);最小化 Δ≤0,最大化 Δ≥0每个合法方案都能改到不差于它的贪心/等价解,因此贪心最优
始终领先模板
1. 固定任意合法方案 A;定义可比的第 k 步状态与指标 P。
2. 证明第 1 步 P(G₁) 不差于 P(A₁)。
3. 假设第 k−1 步关系成立,借此证明第 k 步关系。
4. 假设 A 最终更优,用阶段关系推出它不合法,或贪心不应终止。
5. 所以没有合法方案优于 G,且 G 合法。
交换模板(最小化目标 F)
1. 固定任意 A∈可行解集合。
2. 从 A 构造 A′,并逐项检查 A′ 仍合法。
3. 算 Δ=F(A′)−F(A)≤0。
4. 每次修改让分歧减少或一致前缀变长,并证明有限次结束。
5. 最终到达 G,或某个 B 满足 F(B)=F(G)。
6. F(G)≤F(A) 对所有合法 A 成立,所以 G 最优。

若从最优 O 出发:F(O′)≤F(O)=OPT;O′ 合法又使 F(O′)≥OPT,因此 F(O′)=OPT。每次修改仍最优。最后必须说明它能到达 G 或与 G 目标值相同的规范解。最大化版本反转目标不等号。

本页实例可直接记住的公式含义 / 使用条件
基站覆盖gₖ=hₖ+d;aₖ≤gₖ同半径、从西到东;hₖ 是触发第 k 座贪心塔的最左未覆盖房屋
基站归纳aₖ₋₁+d≤gₖ₋₁+d<hₖ=gₖ−d<aₖ−d最后一项来自反设 aₖ>gₖ;整条链制造覆盖缺口
活动选择f(gₖ)≤f(oₖ);s(oₖ₊₁)≥f(oₖ)≥f(gₖ)固定活动、正时长、按数量最优,首尾相接允许兼容
等概率磁带E=(1/n)ΣᵢΣⱼ₌₁ⁱLⱼ;ΔE=(y−x)/nx>y 的相邻逆序被换成 y 在前;每个文件等概率
交换合法性A′∈可行解集合这不是装饰条件;目标更好却不合法的方案不构成证明
交换进展I(A′)=I(A)−1;0≤I(A)≤n(n−1)/2磁带排序的进展量是逆序数,其他题可用正确前缀长度等指标
可选扩展:文件概率不同,仍然先算差值(课件 p46–48)

令 Lₓ,Lᵧ>0 为两个相邻文件长度,pₓ,pᵧ≥0 为请求概率,全体概率和为 1。仍令 P 为前缀长度。若把 x→y 改为 y→x:

E_before = pₓ(P+Lₓ)+pᵧ(P+Lₓ+Lᵧ)+其他不变项
E_after  = pᵧ(P+Lᵧ)+pₓ(P+Lᵧ+Lₓ)+其他不变项
ΔE = E_after−E_before = Lᵧpₓ−Lₓpᵧ。
若 pₓ/Lₓ < pᵧ/Lᵧ,则 ΔE<0,应该把 y 换到前面。
所以最优顺序按 p/L 非递增排列。

自写两文件例子:x 的长度 4、概率 0.9;y 的长度 1、概率 0.1。先短文件时 E=0.1×1+0.9×5=4.6;先长文件时 E=0.9×4+0.1×5=4.1。因为 0.9/4=0.225>0.1/1=0.1,这次长文件反而先放。目标模型变了,排序键就需要从新的差值重新推出。

Module

8. 怎样选方法,哪里最容易证明漏了

算法 / 主题:证明方法
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

看到的结构先尝试真正需要建立的事实
可以比较做完 k 步后的覆盖边界、结束时间等关键状态始终领先阶段指标的归纳关系,以及该关系如何保证最终目标
可以把一个不同的选择替换掉,并局部计算影响交换修改保持约束、目标不变差、分歧减少且会结束
同一题同时具备两种结构选最容易把理由写完整的那一种方法不互斥;可以像活动选择一样用同一事实写两种证明
常见缺口补在哪里为什么
只说‘当前最好的选择’,没有定义指标明确比较 gₖ 位置、f(gₖ) 时间或目标差值‘最好’需要针对具体目标和状态
只证明第 k 步不落后,就宣称最优写出更少塔的漏房屋,或更多活动与贪心终止的矛盾阶段指标不是题目最终目标本身
从一个例子推出所有输入增加对任意 A 的一般推导数值、图示和有限运行结果不能代替量词范围
交换后数值更好,却没检查合法性检查是否遗漏、重复、冲突或违反约束不合法方案不能和可行最优解比较
说一直交换就行,没有进展量找非负整数下降或有上限的正确前缀增长需要解释为什么一定到达目标形态
认为所有最优解必须和 G 完全同一身份顺序处理等长、等截止期等并列选择最优目标值可以相同,输出方案不一定唯一
把等概率磁带的短文件先放套到任意权重先按真实目标重算 Δ模型改变会改变正确排序键
Module

9. 来源与例子范围

算法 / 主题:综合方法
✎ 我的笔记未填写

输入时自动保存到当前浏览器。

主要材料:本地 2026 T3 COMP3121/COMP9101 Module 2: Greedy Algorithms,Raveen de Silva,2-greedy.pdf。引用使用 PDF 实际页码;课件底部印刷编号比 PDF 页码小 1,例如 PDF p37 底部写 36。

内容PDF 实际页码本页处理
两种证明方法p13保留原文与中文解释
活动选择与交换证明p16、p19–26原问题、规则及证明理由;另补始终领先证明
基站覆盖与始终领先p33–38原问题、边界假设、归纳链及最优性收尾
等概率磁带与相邻交换p41–45原问题、期望与缩放式、差值及有限进展
不同概率磁带p46–48可选扩展,按实际目标推导比例排序键

房屋 [1,4,9,12,16,21,24]、对照塔 [4,13,23]、反设塔 18、文件 [4,1,3]、活动 A–E 和概率例子均为自写教学数值。带‘补充推导’的内容是对课件提纲的展开,不冒充新的课件原文。

这是现有 Week03 笔记旁的独立贪心专题页。导航归类便于回查,不把整套课件或本专题的内容当作官方第三周教学范围。