“集合覆盖贪心法逐轮比较单位新增覆盖成本,并给出确定性的调和数保证;本页算法先求 LP,再独立抽样和补选,以期望成本给保证。两种方法都必须处理不可覆盖实例,却使用不同的收费证明。”
形式陈述
算法
给有限集合宇宙
最小的集合,加入解并从
收费证明
选择
把每个元素归给一个覆盖它的最优集合求和,得 ALG
直觉
每轮选择只为尚未覆盖的元素创造价值,因此分母必须随覆盖状态缩小。把集合成本平均收给本轮新覆盖元素后,任意最优集合中第
图中的
例子与边界
真实选择图像
布置监测站覆盖一组区域时,一个站虽覆盖面大但成本也高;加权规则比较“每新增覆盖一个尚未监测区域的成本”,已覆盖区域不再贡献分母。无权规则若直接用于成本差异大的站点,会偏离证明。
边界与相邻问题
推论与应用
算法每步选择单位成本覆盖新元素最多的集合,是贪心算法;调和数近似保证来自把每个新覆盖元素按当步单位代价收费,并与最优解中某个集合尚未覆盖的元素数比较。
实现与 tie-breaking
每轮需要按当前未覆盖集重新评估候选,求交集的访问成本也须计入。无权版可维护按当前 uncovered count 的桶或懒优先队列;选出候选后重新计算其真实新增量,过期键就更新再弹。若成本以有理数给出,可交叉相乘精确比较加权比率,并计入整数位长;对任意实数成本,则须明确采用精确算术与比较 oracle。
平局任取都保留近似证明,因为只用“单位成本不大于任何候选”。但输出若要求可重复,仍应以集合 ID 固定 tie-break。预处理还要确认每个元素至少属于一个集合,否则实例不可覆盖。
加权实例的选择轨迹
取
实现可用懒堆保存上次计算的比例:弹出候选后按当前未覆盖集重算,只有仍不劣于堆顶才真正选择,否则以新键放回。这个技巧减少实际重算,却不改变最坏近似证明;tie-breaking 影响具体解,不影响
若使用元素关联表,总关联数为
独立舍入加最便宜集合补选提供另一条覆盖路线:先解LP,再抽样并修复所有遗漏,每次输出都可行,而成本相对于LP的保证在期望意义下成立。本页贪心的调和数界则对每条实际选择轨迹成立,两者不能混称为相同的逐次保证。
参考资料
-
Václav Chvátal, A Greedy Heuristic for the Set-Covering Problem, Mathematics of Operations Research, 1979.
-
David Johnson, Approximation Algorithms for Combinatorial Problems, JCSS, 1974.
-
David P. Williamson、David B. Shmoys,The Design of Approximation Algorithms,2011,§1.6,Algorithm 1.2 与 Theorem 1.11:加权贪心和调和数分析。