我有算法问题。我不知道如何解决它。也许有人可以帮助我?
我有物件。每个对象具有相同的功能。它可以在表格中说明:
Feature1 Feature2 Feature3 Feature4
Object1 1 0 1 1
Object2 0 0 0 1
Object3 0 1 1 1
Object4 0 1 0 0
现在我想找到所有对象的最小子集。对于每个特征,每个子集应至少具有一个值“1”。对于上表,结果是两个子集:{Object1,Object3}和{Object1,Object4}。 我无法生成所有可能的子集,因为它可能需要花费太多时间。
答案 0 :(得分:8)
这正是set cover problem。问题是NP难,所以如果你需要精确最小值,那么生成所有可能的子集不会比其他解决方案更糟糕。
但是有一些多项式时间近似算法。有关详细信息,请参阅Wikipedia页面。 “最好的”是贪婪的算法,运行方式如下:
答案 1 :(得分:4)
您可以通过必要时包含作为给定特征(或特征)的唯一拥有者的所有对象来减少问题。 Object1
是唯一拥有Feature1
的人,因此您知道在解决方案中需要这一个。