加权集覆盖问题的最优算法?

时间:2013-07-23 14:25:51

标签: python algorithm set cover

对标题感到抱歉,SO不允许使用“问题”这个词。我有以下问题:

我有我要卖的东西包,每个包都有价格。当有人请求XYZ时,我想查看所有包,其中一些包含多个项目,并为用户提供将包含多个包的组合覆盖他们的东西,并有最低的价格。

例如,我可能会建议[(X, Y), (Z, Q)] 10美元,因为[(X), (Y), (Z)]需要11美元。由于这些是价格,我不能使用贪婪加权集合覆盖算法,因为两个人为不同的价格得到同样的东西会很糟糕。

然而,我无法找到详细说明加权集覆盖问题的最佳算法的论文(或任何内容)。有人可以帮助实现(我正在使用Python),论文,甚至是它的工作原理的高级描述吗?

我拥有的软件包数以百计,而事情是5-6,因此运行时间不是问题。

谢谢!

2 个答案:

答案 0 :(得分:2)

如果你想要一个指数算法,只需尝试一组包的每个子集,并选择包含你需要的所有东西的最便宜的包。

答案 1 :(得分:2)

如果您正在寻找参考文献,请尝试使用本文

针对最小集合覆盖问题的贪婪近似算法”, Refael Hassin和Asaf Levin , 2005年2月3日 [link]