Boyer-Moore algorithm
Text:W H I C H - F | I N A L L Y - | H L A T | S - A T - | T H A T
Pattern:A T - T H A T | | | |
A T - T H A T | | |
A T - T H A T | |
A T - T H A T |
A T - T H A T
d1[f]=7
d2[-]=4
d2[5]=7 d1[-]=4
BMsearch
i:=M; j:=M;
repeat
if a[i]=p[j] then
i:=i-1; j:=j-1;
else if j=M then
i:=i+d1[a[i]];
else
i:=i+d2[j]; j:=M;
until j<1 or i>N
----- ----
i+1 Not Found
How to compute d1,d2?
i 1 2 3 4 5 6 7 8 d1[S]=0
=============================== d1[E]=1
p[i] A S S E S S E S d1[A]=7
d2[i] 15 14 13 7 11 10 3 others=8
d1[C]=M-max P[j]=C
? ? ? X S S E S ? ? ? ?
-------
A S S E S S E S ? ? ? ? ? ? ? ? E ? ? ?
A S S E S S E S A S S E S S E S
=> d2[4]=7