我有一个由n个字符集{"a", "abc", "abcde", "bcd", "de"}(从k = 5个不同字母的字母表中取出)组成的列表。我需要一种方法来观察整个列表可以通过字符集{"a", "bc", "d", "e"}的析取构建。也就是说,"b"和"c"是线性相关的,每对其他字母都是独立的。
在位操作版本中,上述字符集表示为{10000、11100、11111、01110、00011},我需要一种方法来观察它们都可以通过OR运算从较小的集合{10000、01100、00010、00001}的位串构建而来。
换句话说,我认为我正在寻找{0,1}k中n个不同位向量的“离散基础”。这篇论文声称一般问题是NP完全的……但幸运的是,我只需要解决小规模的情况(k <32)。
我可以想到一些非常愚蠢的算法来生成基础。例如:对于k2个字母对中的每一个,尝试通过O(n)搜索证明它们是相关的。但我真的觉得有一种高效的位操作算法,只是我还没有偶然发现它。有人知道吗?
编辑:最终我并不真正需要解决这个问题。但我仍然想知道是否有一个简单的位操作解决方案。
main []
中使用0
不仅仅是为了减少混淆:如果所有main []
值都是0
,那么它们将保持为0
直到结束。最后,更清晰的说法应该是“main [i] + =前一次迭代中的主要最大值”。 - j_random_hacker