本文主要是介绍Set Cover的贪心算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Set Cover的贪心算法
什么是Set Cover问题
SetCover问题即集合覆盖问题,给定一组集合,每个集合都有cost值,找到能够覆盖其中所有元素的一组集合,要求cost值总和最小。
具体思路
图源北航算法课件
目前关于集合覆盖问题,仍然找不到一个有效的OPT算法,我们这里提出的是一种基于贪心策略的近似性算法。
注意图中花写S和S的区别
我们每次选取的都是 c o s t ( S ) S ∖ C \frac {cost(S)}{S\setminus C} S∖Ccost(S)最小的集合S,即每次新添的集合S的新增覆盖率相对于cost值都是最大的,从而实现局部最优。
性能分析
在贪心算法的每次迭代过程中,对于剩余元素OPT算法的 c o s t cost cost不可能大于原问题OPT算法的 c o s t cost cost,所以剩余集合的平均 c o s t cost cost不大于 c o s t o p t ( S ) ∣ U ∖ C ∣ \frac {cost_{opt}(S)}{|U\setminus C|} ∣U∖C∣costopt(S)。
当 e k e_k ek被覆盖的时候, ∣ C ∣ ≤ k |C|\le k ∣C∣≤k,那么 ∣ U ∖ C ∣ ≥ n − k + 1 |U\setminus C|\ge n-k+1 ∣
这篇关于Set Cover的贪心算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!