Boyer-Moore-Horspool

字符串匹配算法之Boyer-Moore-Horspool Algorithm

筅森魡賤 提交于 2019-12-09 23:27:27
Boyer-Moore-Horspool 算法也称Horspool 算法,由Nigel Horspool 设计于1980年,是在BM算法上改进版,因为BM算法里面的 好后缀规则较难理解,同时其效率与正确性的证明当时一直没有得到解决,所以Horspool 算法只用了一个BM里的坏字符规则. 借用“find a needle in a haystack” 典故,意为"大海捞针",引意到我们这里就是 从haystack 字串中查找needle字串(needle 字串等同pattern字串),同时假定haystack字串长度n,needle字串长度为m; 基本原理: Horspool 算法 也是从右向左比较 , 但Horspool算法相对于 Boyer-Moore 算法改进了坏字符规则;从右向左匹配,当遇到 不匹配字符 (mismatch character) 时 : BM 跳转规则 : 当前 不匹配字符 和needle中最右边出现的该字符对齐匹配 ; Horspool 跳转规则: haystack 字串中与 needle 字串尾部字符对应的字符 和 needle 中最右边出现的该字符匹配 ; 坏字符规则跳转表初始化和 BM 中一样,理解了原理, code 理解起来就容易了; 下面是实现代码: #include <stdio.h> #include <string.h> //