Knuth-Morris-Pratt(KMP)和后缀树之间的区别使用Ukkonen的时间复杂度算法。

时间:2016-09-05 11:22:25

标签: string algorithm time-complexity suffix-array knuth-morris-pratt

是否有可能使用Ukkonen的算法找到KMP和后缀树的最长公共子串,最长回文子串,最长重复子串,搜索所有模式和子串检查?如果是,那么我应该使用哪一个,因为两种算法都具有线性时间复杂度?

1 个答案:

答案 0 :(得分:0)

为了找到最长的公共子串,我会使用具有线性复杂度的Kadane算法。对于最长的Palindromic子串,选择Manacher的算法也具有线性复杂性。对于重复的字符串和搜索所有模式,是的,选择将在KMP和Boyer-Moore之间归结。 至于哪一个,Boyer-Moore匹配模式的最后一个字符而不是第一个字符,假设如果最后不匹配则不需要在开头尝试匹配。 KMP通过采用当发生不匹配时的观察来搜索主文本串S内的单词W的出现,从而绕过先前匹配的字符的重新检查。 这使得KMP稍微针对像ACTGT这样的小型集合进行了优化。