全称:Boyer-Moore-Horspool算法
实现从text中搜索pattern,返回其最小出现的位置;
算法思想:
1. 搜索文本时,从后到前搜索;
2. 如果碰到不匹配时,移动pattern,重新与text进行匹配;
关键:移动位置的计算shift_table如下图所示。
其中k为Pattern[0 ... m-2]中,使Pattern [ k ] ==Text [ i+m-1 ]的最大值;
如果没有可以匹配的字符,则使Pattern[ 0 ]==Text [ i+m ],即移动m个位置
3. 如果与Pattern完全匹配,返回在Text中对应的位置;
4. 如果搜索完Text仍然找不到完全匹配的位置,则返回-1,即查找失败
计算公式为:
如果在Pattern[0...m-2]中有Text[i+m-1]对应的字符c:shift[ (int)c ]=m-1-max{ 0 =< i < m-1 | p[i]=c }
如果在Pattern[0...m-2]中没有对应的字符c:shift[ (int)c ]&