之前我的文章中,介绍了KMP,BM,AC,WM等几个经典的模式匹配算法,本文我将对常用的模式匹配算法做一小结。
模式匹配算法的关系图如下所示:
这里有几个我的文章中暂时没有涵盖的算法,这里做一简要说明。
Rabin-Karp算法,这是一个基于散列值的模式匹配算法,根据散列算法,将长度为m的模式串计算一个散列值,然后对于目标串中各长度为m的子串分别计算散列值,与模式串的散列结果相比较,只有散列值相同的,才会再执行与模式串的逐一字符比较。这个算法的适应性很强,如果选择比较优秀的散列算法,可以在近似O(n)的时间复杂度内完成匹配操作。但是美中不足的是,虽然散列计算的运算开销不是很大,但是对于字符串匹配这种每秒钟可能需要执行数万次的基本运算来说,散列计算可能就是比较大的负担了,其在实际应用中使用的不多,但是散列思想也是解决模式匹配的重要手段,WM算法就受到了该算法的启发。