String 对各种位字符串的模式搜索

String 对各种位字符串的模式搜索,string,algorithm,pattern-matching,String,Algorithm,Pattern Matching,我有以下问题: 给定每个1024位的15位字符串,在同一位置的不同字符串中查找模式的最佳方法是什么?模式看起来如何对我来说并不重要(当然长度>1),我只想找到至少两个字符串匹配的部分(尽可能长)。 例如: 10010 00011 00101 这里我想从前两个字符串中得到001(位置2到4,频率2也很好…),从第二个和第三个字符串中得到00(位置1到2) 我希望,问题现在清楚了。。。有人有主意吗? 谢谢 我会尝试用两步法解决你的问题。因为您只有15个位字符串,所以比较所有对的位字符串就足够了(

我有以下问题: 给定每个1024位的15位字符串,在同一位置的不同字符串中查找模式的最佳方法是什么?模式看起来如何对我来说并不重要(当然长度>1),我只想找到至少两个字符串匹配的部分(尽可能长)。 例如:

  • 10010
  • 00011
  • 00101
这里我想从前两个字符串中得到001(位置2到4,频率2也很好…),从第二个和第三个字符串中得到00(位置1到2)

我希望,问题现在清楚了。。。有人有主意吗?
谢谢

我会尝试用两步法解决你的问题。因为您只有15个位字符串,所以比较所有对的位字符串就足够了(105个比较和16个QWORDS应该是可行的)

现在,我还将考虑长度为1的模式,稍后我们将看看如何去掉这一点。既然您没有提到编程语言,我将尽量保持它的通用性,并使用C语法进行位操作。设
a
b
为两个位字符串

  • 识别可能的模式:当且仅当
    a[i]==b[i]
    时,
    i
    第位是模式的一部分。我们可以通过计算按位异或(对应于
    !=
    )并求反:
    模式=~(a^b)
  • 识别最长模式:计算上述转换后,
    a
    b
    之间的公共模式是
    模式中连续的1。例如,可以通过反复换档和和操作来解决查找如此长的模式的问题,有关详细信息,请参阅。如果您希望得到很长的序列,我会尝试使用一些专用的指令来查找非模式位,如果需要,我将扩展答案

  • 如果这是真正的高通量代码,您可以尝试同时进行多个比较,即使用SIMD指令,但这是另一个问题的主题。

    您好,欢迎来到Stack Overflow,请花点时间浏览一下以了解您在这方面的做法(以及赢得您的第一个徽章),阅读如何创建和检查,以增加获得反馈和有用答案的机会。如果将它们视为字符串并尝试查找常见的最长子字符串,会怎么样?这方面有很多算法。如果长度不是太长,你也可以使用蛮力,但我想找到两个字符串中位于相同位置的所有公共子字符串。我不明白你的方法是如何解决这个问题的……请再澄清一点。让我们在您的示例中再添加两个字符串:10011,10000。然后,对于位置2的模式001,您希望它转储出{10010010010011,00011},但不转储较小的子集,如{10010010010011,00011}或{00011,10011}?还是你也要后者?您是否还希望它输出与位置2处的00匹配的{00011,10000},还是因为位置2处的图案长度小于001图案,所以不感兴趣?或者它不感兴趣,因为这里只有两个匹配字符串,而另一个有3个?你说的“最佳”是什么意思?最快的?您需要的只是一个编程语言中立的算法,还是您心中有一种特定的语言?我可以想出几个解决这个问题的办法,但你需要缩小你的问题的范围。输入是否具有特殊属性,还是完全随机?