将布尔值矩阵转换成行,其中所有条目都不是另一个的超集

时间:2019-06-27 19:23:23

标签: algorithm

我有一个布尔值矩阵,其中列是唯一的动作,行都是可能的解决方案,因此每一行都使用1表示此解决方案是否需要关联的唯一动作。我想消除集合中任何其他行的超集的所有行,并返回一个矩阵,其中所有行都不是任何其他行的超集。

有什么方法可以在不到n ^ 2的时间内有效地做到这一点?

尝试图算法(失败)和常规设置操作,但效率不够。

1 个答案:

答案 0 :(得分:1)

如果您根据1的数量对行进行排序,那么我现在想到的一个解决方案将起作用。

  1. 以1s的升序环绕行

  2. 对于每个1,存储以下行的行索引:

    • 同一列中有1
    • 位于当前行的下方(即具有更多的1)
  3. 当您完成对当前行中所有行的读取后,请与行索引列表相交并删除,然后再开始第二步以进行下一次迭代。

这样,复杂度将为O(N ^ 2)。