Horspool算法是Boyer-Moore算法的一个简化版,全名叫做Boyer-Moore-Horspool算法。
Horspool算法的基本思想是将文本串text中匹配窗口的最后一个字符跟模式串pattern中的最后一个字符比较。如果相等,继续从后向前对主串和模式串进行比较,直到完全相等或者在某个字符处不匹配为止 。如果不匹配,则根据文本串匹配窗口中的最后一个字符β在模式串中的下一个出现位置将窗口向右移动;若字符β没有在模式串中出现,则直接将整个模式串滑过这一位。
同样的举个例子来说明一下。假定文本串text为:”HERE IS A SIMPLE EXAMPLE”,长度为n;模式串pattern为:”EXAMPLE”,长度为m;现在要在text中搜索看看是否包含pattern。
1).
HERE IS A SIMPLE EXAMPLE
EXAMPLE
‘S’与’E’匹配失败,并且’S’没有在pattern中出现,所以直接将pattern滑过’S’这一位。
2).
HERE IS A SIMPLE EXAMPLE
EXAMPLE
这时’P’与’E’匹配失败,但是’P’在模式串pattern中出现了,所以把pattern向右移,使得text中的’P’与pattern中的’P’对齐。
3).
HERE IS A SIMPLE EXAMPLE
EXAMPLE
然后重复执行之前的操作。
用C语言实现如下。
1 |
|