string - 是否存在具有不同空间复杂度的多种 KMP 算法方法?有什么区别?
问题描述
我正在阅读有关KMP 子字符串搜索算法的信息,并且我在网上找到的示例使用一维表来构建前缀信息表。
我还阅读了 Sedgewick 的解释,他使用二维数组来构建表格并明确指出 KMP 的空间复杂度O(RM)
是R
字母大小和M
模式大小,而在其他任何地方都表示空间复杂度只是O(M + N)
即要处理的文本和图案大小本身。
所以我对差异感到困惑。是否有多种 KMP 算法方法?他们有不同的范围吗?或者我错过了什么?
如果一维也能解决子串问题,为什么还需要二维呢?
解决方案
我猜 Sedgewick 想演示 KMP 的一种变体,它在该术语的标准意义上构造一个确定性有限自动机。这是一个奇怪的选择,(正如您所观察到的)会增加运行时间,但也许有一个我不欣赏的令人信服的教学原因(然后我的博士学位又是关于算法的,所以......)。我会找到另一个更接近原文的描述。
推荐阅读
- node.js - 如何在 Typescript for Mongoose 5.11 中向 Mongoose 模型添加静态方法?
- laravel - 如何覆盖 Laravel 8 身份验证功能
- python - Python MapReduce - 计算 csv 列中数字的频率
- java - 无法使用 Spring Boot 服务
- javascript - 如何将下一个/图像组件设置为 100% 高度
- docker - nginx 与 minikube 和 metallb
- powershell - 检查如果 test-path 值为然后运行,否则 Test-path 为其他值并运行
- c# - Naudio 使用 ffmpeg 产生奇怪的噪音
- windows - 使用 MSVAD 失败
- html - 当密钥未知时,如何显示本地存储中的所有项目