如果允许滑动,如何比较两个二进制代码?

时间:2018-03-08 19:10:14

标签: algorithm string-matching

我正在编写一个程序来比较两个1023位代码,并检测一个代码是否与另一个代码相同;如果没有,可以通过滑动位(通过执行左或右旋转)使它们相同。

所以我关心的是检查代码的位是否在同一个顺序中,并且可以通过滑动任一代码中的位来使其相等。

例如:
代码1:110101011
代码2:101111010

算法必须使代码相等,因为我可以通过将代码1的位向右滑动5来从代码1中获取代码2。有没有更好的方法来执行此操作,而不是执行AND操作来检查相等性,然后是滑动的按位移位?

1 个答案:

答案 0 :(得分:1)

你必须构建它并对其进行基准测试以了解它的速度有多快,但你可以通过将代码2的两个副本连接在一起来构建代码3,从代码3构造Generalized Suffix Tree,然后再看看是否包含代码1的副本。

这将是O(n)算法,其中n是代码的长度。