1、Commentz-Walter算法是BM算法的自然扩展,它的速度并不快。
2、用TRIE表示P模式串集的所有模式串的反转,在文本串的pos位置从后向前识别文本的最长后缀u,使得u是某个模式串的后缀。找到一个出现,就报告一个成功匹配,然后根据在多模式串集合上的d1,d2,d3来移动。
3、使用三个扩展的BM的d1,d2和d3,将当前位置向移动。对于TRIE的每个状态,都需要计算前两个函数d1和d2,当识别了最长后缀u并抵达状态q时,根据这两个函数进行移动:
1)d1(q)是使得u=L(q)与某个模式串的子串对齐的最小移动距离。
2)d2(q)是使得u=L(q)的一个后缀与某个模式串的前缀相匹配的最小距离
3)对于字母表中的每个字符σ和每个位置0<=k<=Lmax,d3[a,k]是使得位置pos-k处的字符与模式串中的某个字符相匹配的最小移动距离。
3、假设从文本位置pos从后向前读入了k个字符,并且在自动机中抵达状态q,那么移动距离S[q,pos,k]由下面的公式计算:
S[q,pos,k]=min(max(d1[q],d3[T(pos-k),k]),d2[q])