40得票1回答
何时使用Rabin-Karp或KMP算法?

我使用以下字母表生成了一个字符串:{A,C,G,T}。我的字符串包含超过10000个字符。我正在其中搜索以下模式: ATGGA TGGAC CCGT 我被要求使用一个具有O(m+n)运行时间的字符串匹配算法。 m = pattern length n = text length ...

34得票2回答
为什么String.indexOf()方法没有使用KMP算法?

我阅读了 java.lang.String 的源代码,惊讶地发现 String.indexof() 没有使用 Knuth-Morris-Pratt算法?我们知道,KMP更加有效率。那么为什么不在 String.indexOf()中使用它? 身边的一些人告诉我,对于短字符串,KMP足够好用,但...

27得票2回答
什么情况下会选择使用KMP算法而不是Boyer-Moore算法?

我目前正在学习模式匹配算法,并遇到了这两个算法。我有以下一般想法: KMP 从左到右比较文本 使用失败数组进行智能移位 需要 O(m) 的时间(m 为模式的长度)来计算失败数组 需要 O(m) 的空间 需要 O(n) 的时间来搜索一个字符串 BM 从最后一个字符开始比较模式 使用...

19得票2回答
KMP模式匹配算法的原理是什么?

KMP模式匹配算法的理论基础是什么? 我知道这个算法本身,但是不明白Knuth、Morris和Pratt是如何发明这个算法的。 是否有数学证明? 请问您能给一个链接吗?

15得票3回答
Rabin-Karp算法何时比KMP或Boyer-Moore算法更有效?

我正在学习字符串搜索算法,并了解它们的工作原理,但还没有找到足够好的答案来说明在哪些情况下Rabin-Karp算法比KMP或Boyer-Moore算法更有效。我看到它更容易实现,不需要同样的开销,但除此之外,我一无所知。 那么,在什么情况下使用Rabin-Karp比其他算法更好呢?

13得票1回答
在Knuth-Morris-Pratt算法中的DFA构建

我指的是Sedgewick的书《算法》(第4版)中Knuth-Morris-Pratt(KMP)子字符串搜索算法的概述。KMP算法使用确定性有限状态自动机(DFA)在子字符串搜索中进行备份。我理解DFA如何进入算法,但我不理解如何构造DFA,这是由以下代码片段完成的:dfa[pat.charA...

13得票4回答
当目标是查找特定字符串的所有出现时,KMP算法的最坏时间复杂度是多少?

我还想知道所有查找一个字符串在另一个字符串中的出现位置中,哪个算法具有最坏情况下的复杂度。似乎Boyer-Moore算法具有线性时间复杂度。

11得票1回答
在Haskell中的Knuth-Morris-Pratt算法

我对Haskell中的Knuth-Morris-Pratt算法实现有些困惑。 http://twanvl.nl/blog/haskell/Knuth-Morris-Pratt-in-Haskell 我特别不理解自动机的构造。我知道它使用了"绕过循环"的方法来构建,但我并不清楚它的原理,也不...

10得票3回答
为什么KMP算法的失配函数可以在O(n)时间内计算?

维基百科声称,失配函数表可以在O(n)时间内计算出来。 让我们看看它的“规范”实现(用C++实现):vector<int> prefix_function (string s) { int n = (int) s.length(); vector<int&g...

8得票4回答
使用一次或零次不匹配的字符串模式匹配

给定一个字符串和一个待匹配的模式,如何高效地找到零个或一个不匹配的匹配项。 e.g) S = abbbaaabbbabab P = abab Matches are abbb(index 0),aaab(index 4),abbb(index 6),abab(index 10) 我尝...