形式陈述 ​
算法 ​
给集合宇宙
最小的集合,加入解并从
收费证明 ​
选择
把每个元素归给一个覆盖它的最优集合求和,得 ALG
直觉
每轮选择只为尚未覆盖的元素创造价值,因此分母必须随覆盖状态缩小。把集合成本平均收给本轮新覆盖元素后,任意最优集合中第
例子与边界
真实选择图像 ​
布置监测站覆盖一组区域时,一个站虽覆盖面大但成本也高;加权规则比较“每新增覆盖一个尚未监测区域的成本”,已覆盖区域不再贡献分母。无权规则若直接用于成本差异大的站点,会偏离证明。
边界与相邻问题 ​
推论与应用
算法每步选择单位成本覆盖新元素最多的集合,是贪心算法;调和数近似保证来自把每个新覆盖元素按当步单位代价收费,并与最优解中某个集合尚未覆盖的元素数比较。
实现与 tie-breaking ​
直接每轮重算所有集合新增覆盖成本可能为
平局任取都保留近似证明,因为只用“单位成本不大于任何候选”。但输出若要求可重复,仍应以集合 ID 固定 tie-break。预处理还要确认每个元素至少属于一个集合,否则实例不可覆盖。
加权实例的选择轨迹 ​
设未覆盖元素为 6 个,集合
实现可用懒堆保存上次计算的比例:弹出候选后按当前未覆盖集重算,只有仍不劣于堆顶才真正选择,否则以新键放回。这个技巧减少实际重算,却不改变最坏近似证明;tie-breaking 影响具体解,不影响
若某元素不属于任何集合,实例本身不可行,算法应在
参考资料
- 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.