一组序列 - 找到一起是给定序列的子集

时间:2013-03-16 15:34:27

标签: algorithm

我有很多长度为10的序列,由0和1组成。例如:

1010100000 
1011000001
1011100010
1100000100
0011111011

等。

我想找到每列共有0的序列。例如,算法应该返回这两个:

1100000100
0011111011

以及这三个:

1100110000
0011111111
1111001111

有算法吗?

1 个答案:

答案 0 :(得分:2)

您所描述的问题是exact cover problem的限制性案例,您希望找到所有解决方案。这个问题的一般版本是NP难的,所以对于这个更大的问题,没有已知的有效通用算法。

要查找所有可能的解决方案,您可以尝试列出位向量的所有子集,并测试每列中是否只有一个0。您还可以考虑实现回溯搜索算法以尝试选择所有子集,但是停止搜索不可能工作的路径(例如,在同一列中包含两个具有0的位向量的路径)。如果你愿意,你可以尝试实现dancing links algorithm,它专门用于列出这个一般问题的所有解决方案。

希望这有帮助!