【问题标题】:Are there multiple KMP algorithmic approaches with different space complexities? What is the difference?是否存在具有不同空间复杂度的多种 KMP 算法方法?有什么区别?
【发布时间】:2020-12-02 14:57:03
【问题描述】:

我正在阅读有关KMP substring search 算法的信息,我在网上找到的示例使用一维表来构建前缀信息表。
我还阅读了 Sedgewick 的解释,他使用二维数组来构建表格并明确指出 KMP 的空间复杂度为 O(RM) 其中R 是字母大小,M 是模式大小,而其他任何地方都是声明空间复杂度只是O(M + N) 即要处理的文本和图案大小本身。
所以我对差异感到困惑。是否有多种 KMP 算法方法?它们有不同的范围吗?或者我错过了什么?
一维也能解决子串问题,为什么还要二维呢?

【问题讨论】:

    标签: string algorithm substring space-complexity knuth-morris-pratt


    【解决方案1】:

    我猜 Sedgewick 想演示 KMP 的一个变体,它在该术语的标准意义上构造一个确定性有限自动机。这是一个奇怪的选择,(正如您所观察到的)会使运行时间膨胀,但也许有一个我不欣赏的令人信服的教学原因(然后我的博士学位又是关于算法的,所以......)。我会找到另一个更接近原文的描述。

    【讨论】:

    • 是的,他确实使用了 DFA 的模拟,并且描述非常复杂。有时我失去了他的观点,并且不确定包含字母表中的所有字符是否是解决问题的某种通用解决方案(因为他实际上说有一个使用 NFA 的 KMP 更节省空间的版本!)。因此,在非学术设置中,仅在模式上使用一维数组的“简单”方法可以正常工作吗?
    • 他提到的 NFA 方法不是我在其他示例中看到的一维方法,对吧?
    • @Jim 我记得的规范版本是您通过在模式中搜索模式来构建一维表,因此给定模式的任何前缀,您可以找到最大后缀是模式的前缀。然后在搜索的每一步,您要么成功地扩展匹配,要么将模式滑过。我相信你可以眯着眼睛把它看作 NFA,但我只是不同意这是一个有效的观点,除了观察 KMP 如何能够从模式匹配文献中的现有结果中推导出他们的算法。
    • 如果您也可以在这里看看,您会不会好心一点? stackoverflow.com/questions/63448730/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    相关资源
    最近更新 更多