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