【问题标题】:Finding minimum subset of objects with attributes.查找具有属性的对象的最小子集。
【发布时间】:2010-09-21 17:50:46
【问题描述】:

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

我有物品。每个对象都具有相同的特征。如下表所示:

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

【问题讨论】:

    标签: algorithm language-agnostic subset


    【解决方案1】:

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

    但是有一些多项式时间逼近算法。有关详细信息,请参阅维基百科页面。 “最好的”是贪心算法,它的运行方式如下:

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

    【讨论】:

    • 贪心算法很好,但是这样我只能找到一个子集(一般可能不止一个子集)
    • 你的答案是贪心算法的一个子集。只需丢弃所有大小大于最小值的子集,您就会得到答案。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      • 2014-05-07
      • 2011-03-22
      相关资源
      最近更新 更多