【问题标题】:Algorithm for an extended version of string matching字符串匹配的扩展版本的算法
【发布时间】:2013-10-17 09:20:28
【问题描述】:

我最近研究了字符串匹配,并受到启发想到了一个类似的问题。令 pm 个字符的字符串,tn 个字符的文本。现在的问题是找出 p 是否出现在 t 中,方法如下:在 [0, 范围内存在一个 i >n-1] 这样:

p[ j ] = t [ i + j ] j = 0, 1, ... ,m - 1,

其中 i + jn 为模计算。举个例子,在正常的字符串匹配中,CDEFAB中不会出现ABCD,但是你可以看到在上面定义的问题中,CDEFAB中会出现ABCD,在这种情况下i = 4。

是否有任何线性时间算法来确定模式 p 是否出现在 t 中?以前有没有处理过这个问题?

提前致谢

【问题讨论】:

    标签: algorithm string-matching


    【解决方案1】:

    我认为您仍然可以应用线性时间KMP algorithm 来解决它。只需将 m-1 个字符 t[0], t1,...,t[m-2] 添加到文本 t 的末尾。当然,只有在文本 t 结束后您的表中仍有候选子字符串时,您才需要这样做。

    如果测试字符串是 BCDEA
    AXYZBCDE 将变为 AXYZBCDEAXYZ

    【讨论】:

      【解决方案2】:

      只需将 t 翻倍,然后对 p 进行普通查找?

      所以你会在 CDEFABCDEFAB 中查找 ABCD 并得到正确的 i。这可以在线性时间内完成。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-16
        • 2019-11-05
        相关资源
        最近更新 更多