algorithm - isSubstring(s1, s2) 复杂性(语言无关方法)
问题描述
我刚读过一本概念性的书:
isString(sring s1, string s2)
可以假设为 O(A+B),其中 A 是 s1 的大小,B 是 S2 的大小。
有人可以告诉这个假设来自哪里吗?
我的逻辑:如果我们假设 A > B 那么可以有 AB 窗口搜索。假设我们一找到它就退出。假设最坏的情况是序列中的最后一个字符每次都是假的。(不确定这样的序列是否存在)因此,我们在对单个窗口进行 B-1 比较后退出。综上所述,我们的总操作数应该是 AB*B-1。这是正确的逻辑还是我累了应该去睡觉)))))请告诉我。
解决方案
对于一个固定的字符集,Ukkonen 的算法可以及时计算出Suffix Tree。验证是否是子字符串就是验证它是否是有效的后缀。遍历需要时间。从而导致时间。s1
O(A)
s2
O(B)
O(A + B)
正如您所描述的,天真的算法要慢得多。
推荐阅读
- bash - “不是 git 命令”将 bash 脚本配置为 git 别名
- python - 删除列表列表中“”中的空格
- r - 两个“位置”不同的条形聊天中条形的高度代表什么?
- javascript - 如何从 sequelize findAll 结果修改虚拟字段?
- python - Python - Pandas:如何在呈指数增长的值之间进行插值?
- python - Python 如何等待 5 秒?
- python - 如何*旋转* Seaborn PairGrid 中的标签?
- azure - 可以在 azure pipeline 中找到下载文件
- c - C scanf() 函数,如何在 EOF/EOT 上终止?
- visual-studio - .NET 5 在 Visual Studio 2019 中不可用