火龙信奥
  • 首页
  • 课程
  • 题库
  • 打卡
    • 代码对战
    • 快速对战
  • 题单
  • 团队
  • 荣誉墙
  • 商城
  • 登录 / 注册

贪心证明-邻项交换法

作者: 作者的头像   姚保富 , 时间:2026-07-08 19:41:56 , 所有人可见, 阅读  69

交换论证法

交换论证法(Exchange Argument),在算法竞赛和数学证明中也常被称为邻项交换法,是证明贪心算法正确性以及推导贪心策略(排序不等式)的常用方法。

以下是关于该方法的详细整理和推导过程。


一、 基本思想与步骤

交换论证法的核心在于:通过局部调整(交换相邻两个元素)来分析对全局最优解的影响。

1. 验证猜想的正确性

  1. 假设按照某种规则排序后的序列 $ A = [\dots, a_i, a_j, \dots] $ 是最优解。
  2. 交换序列中相邻的两个元素 $ a_i $ 和 $ a_j $(其中 $ a_i $ 原本在 $ a_j $ 前面),得到新序列 $ B = [\dots, a_j, a_i, \dots] $。
  3. 对比两个序列的答案。如果对于任意相邻元素,交换后得到的答案都没有变得更优(即原序列不劣于交换后的序列),则说明该排序规则能够保证最优性。

2. 直接推导贪心策略(无需预先猜想)

如果不确定排序规则,可以主动比较两种局部顺序的优劣:

  1. 设当前处理到相邻的两个元素 $ a_i $ 和 $ a_j $。
  2. 计算“先 $ a_i $ 后 $ a_j $”对应的局部代价/收益 $ F(i, j) $。
  3. 计算“先 $ a_j $ 后 $ a_i $”对应的局部代价/收益 $ F(j, i) $。
  4. 若要使整体更优,需满足关系式 $ F(i, j) \le F(j, i) $(以求极小值为例)。
  5. 对该不等式进行化简,分离变量 $ i $ 和 $ j $,即可得到用于排序的比较器(Comparator)。

注意:利用此方法推导出的比较关系必须满足传递性(若 $ a \le b $ 且 $ b \le c $,则 $ a \le c $)和反对称性,这样才能使用快速排序等算法对全局进行排序。


二、 经典实例:带权完成时间最小化

为了更好地理解该方法,我们来看一个经典的调度问题。

问题描述

有 $ n $ 个任务,每个任务 $ i $ 需要消耗时间 $ t_i $,其权重(重要程度)为 $ w_i $。若任务在时刻 $ C_i $ 完成,则会产生 $ w_i \cdot C_i $ 的惩罚值。
求一个执行顺序,使得所有任务的总惩罚值最小,即最小化:

$ \sum_{i=1}^{n} w_i \cdot C_i $

推导过程

假设当前有两个相邻的任务 $ a_i $ 和 $ a_j $,它们在整个序列中的起始执行时刻为 $ T $。

  • 方案 A(先 $ i $ 后 $ j $):
    • 任务 $ i $ 的完成时刻:$ C_i = T + t_i $
    • 任务 $ j $ 的完成时刻:$ C_j = T + t_i + t_j $
    • 这两个任务产生的局部惩罚值:

$ Cost_A = w_i(T + t_i) + w_j(T + t_i + t_j) $

  • 方案 B(先 $ j $ 后 $ i $ —— 交换顺序):
    • 任务 $ j $ 的完成时刻:$ C_j' = T + t_j $
    • 任务 $ i $ 的完成时刻:$ C_i' = T + t_j + t_i $
    • 这两个任务产生的局部惩罚值:

$ Cost_B = w_j(T + t_j) + w_i(T + t_j + t_i) $

为了让“先 $ i $ 后 $ j $”比“先 $ j $ 后 $ i $”更优,我们需要满足 $ Cost_A < Cost_B $:

$ w_i(T + t_i) + w_j(T + t_i + t_j) < w_j(T + t_j) + w_i(T + t_j + t_i) $

展开并化简等式两边:

$ w_i T + w_i t_i + w_j T + w_j t_i + w_j t_j < w_j T + w_j t_j + w_i T + w_i t_j + w_i t_i $

消去相同项($ w_i T $、$ w_j T $、$ w_i t_i $、$ w_j t_j $):

$ w_j t_i < w_i t_j $

变形得:

$ \frac{t_i}{w_i} < \frac{t_j}{w_j} $

结论

根据推导结果,我们应当按照 $ \frac{t_i}{w_i} $ 从小到大的顺序对任务进行排序。这样得到的序列即为全局最优解。


三、 适用场景与局限性

  • 适用场景:
    • 问题可以通过对输入数据进行某种特定顺序的排序来解决。
    • 交换相邻元素后,对序列中这两个元素之前和之后的其他元素没有影响。
  • 注意事项:
    • 在化简不等式时,要确保不等号的方向在不同取值下保持一致。

—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com

©2026加盟我们 | 关于我们 | ACM课程 | 常见问题 | 成果墙 | 评测记录 | 浙ICP备2021013995号
在线画图 | OI WIki | 打字练习
火龙信奥
请输入登录信息


请完成安全验证
验证码底图 滑块
向右拖动滑块完成验证
请输入用户名 / 绑定的手机号码



请输入注册信息(手机号验证码注册)





验证码5分钟有效,60秒内不可重复获取,每日最多3次

微信登录

微信登录二维码

正在生成二维码...

账号已过期,请续期。
去续期

绑定手机号

📱

为了更好地保护您的账号安全,享受完整的平台服务

请您尽快绑定手机号码