对于模式搜索,Z 算法还是 KMP 算法哪种算法更好?

问题描述 投票:0回答:2

两种算法的时间复杂度均为 O(m+n)。

n 和 m 是要搜索的文本和模式的长度。

Z 算法的空间复杂度为 O(m+n),KMP 算法的空间复杂度为 O(n)。

我想知道哪种算法实际上更快以及通常应该使用哪种算法?

pattern-matching string-matching
2个回答
0
投票

实际上,KMP 是一个更好的选择,并且在计算多场比赛时效果也很好。 正如已经提到的,它也节省空间。 并且两者背后的逻辑是相同的,因此速度差异将是最小的。


0
投票

何时使用哪个:

  • 如果您专注于简单的模式匹配,需要最大限度地减少文本中冗余比较的数量,请使用 KMP。这是在文本中高效搜索模式时的首选。

  • 如果您的问题涉及基于前缀的搜索,或者您对后缀数组、最长公共前缀 (LCP) 计算或文本不同位置的多重模式匹配感兴趣,请使用 Z 算法。

简而言之:

  • KMP 更适合单一模式匹配,具有高效的不匹配处理能力。

  • Z 算法更适合基于前缀的问题以及当您需要处理多次出现或最长公共前缀时。

© www.soinside.com 2019 - 2024. All rights reserved.