这是针对我用 C++ 编写的 diff 实用程序。
我有一个n字符集列表 {"a", "abc", "abcde", "bcd", "de"} (取自k =5 个不同字母的字母表)。我需要一种方法来观察整个列表可以通过字符集{“a”、“bc”、“d”、“e”}的析取来构造。也就是说,“b”和“c”是线性相关的,并且每隔一对字母都是独立的。
在 bit-twiddling 版本中,上面的字符集表示为 {10000, 11100, 11111, 01110, 00011},我需要一种方法来观察它们都可以通过将较小集合 {10000 , 01100, 00010, 00001}。
换句话说,我相信我正在寻找{0,1} k中一组n不同位向量的“离散基” 。本文声称一般问题是 NP 完全的……但幸运的是,我只是在寻找解决小案例(k < 32)的方法。
我可以想到非常愚蠢的算法来生成基础。例如:对于 k 2对字母中的每一对,尝试(通过 O( n ) 搜索)证明它们是依赖的。但我真的觉得有一个我还没有偶然发现的有效的位旋转算法。有人知道吗?
编辑:毕竟我最终并不需要解决这个问题。但我仍然想知道是否有一个简单的解决方案。