查找具有属性的最小对象子集。

时间:2010-09-21 17:50:46

标签: algorithm language-agnostic subset

我有算法问题。我不知道如何解决它。也许有人可以帮助我?

我有物件。每个对象具有相同的功能。它可以在表格中说明:

                 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}。 我无法生成所有可能的子集,因为它可能需要花费太多时间。

2 个答案:

答案 0 :(得分:8)

这正是set cover problem。问题是NP难,所以如果你需要精确最小值,那么生成所有可能的子集不会比其他解决方案更糟糕。

但是有一些多项式时间近似算法。有关详细信息,请参阅Wikipedia页面。 “最好的”是贪婪的算法,运行方式如下:

  1. 将未实现的功能初始化为{Feature1,Feature2,Feature3,...}
  2. 选择实现大多数未实现功能的对象。
  3. 重复2直到所有功能都已实现。

答案 1 :(得分:4)

您可以通过必要时包含作为给定特征(或特征)的唯一拥有者的所有对象来减少问题。 Object1是唯一拥有Feature1的人,因此您知道在解决方案中需要这一个。