有人能为我提供回溯算法来解决“集合覆盖”问题,以找到覆盖宇宙中所有元素的最小数量的集合吗?
贪婪的方法几乎总是选择比最佳套数更多的集合。
答案 0 :(得分:2)
这个paper使用线性规划松弛来解决覆盖问题。
基本上,LP弛豫产生良好的界限,并且可用于识别在许多情况下最佳的解决方案。顺便说一下,当我上次查看开源LP求解器(〜2003)时,我没有留下深刻的印象(有些人给出了不正确的结果),但现在似乎有一些不错的开源LP求解器。
答案 1 :(得分:1)
你的问题需要更多的澄清 - 似乎给你一组子集$$ S_1,\ ldots,集合A的S_n $$,这样子集的并集等于A,你想要一个联合仍为A的最小子集数。
基本方法是使用一些启发式方法进行分支和绑定。例如,如果A的特定元素只在一个子集$$ S_i $$中,则必须选择$$ S_i $$。同样,如果$$ S_k $$是$$ S_j $$的子集,则没有理由考虑$$ S_k $$;如果元素$$ a_i $$在$$ a_j $$所在的每个子集中,那么你不能考虑$$ a_i $$。
对于分支和绑定,您需要良好的边界启发式。下限可以来自独立集(如果在A中有k个元素$$ i_1,\ ldots,i_L $$,则每个如果$$ i_p $$包含在$$ A_p $$和$$ i_q $$中在$$ A_q $$中,$$ A_p $$和$$ A_q $$是不相交的。更好的下界来自上述LP放松。
伯克利的Espresso逻辑最小化系统具有非常高质量的设置,涵盖引擎。