Unit SS, Part B: String Matching, Boyer-Moore and Variants


Standard B-M


Simplified Boyer-Moore


Boyer-Moore-Horspool


Example of BM Searching for Pattern in Text

BOYER-MOORE
ababaxabracabracadabratcadabrax
abracadabra
          ^(no-match, k=11 +=max(d[c]=6,dd[a]=1) = 17)
            skip 6 to line up c in text with c in pattern
ababaxabracabracadabratcadabrax
      abracadabra
                ^(match)
ababaxabracabracadabratcadabrax
      abracadabra
               ^(no-match, k=16 +=max(d[c]=6,dd[r]=4) = 22)
                 skip 6 to line up c in text with c in pattern
ababaxabracabracadabratcadabrax
           abracadabra
                     ^(match)
ababaxabracabracadabratcadabrax
           abracadabra
                    ^(match)
ababaxabracabracadabratcadabrax
           abracadabra
                   ^(match)
ababaxabracabracadabratcadabrax
           abracadabra
                   ^(match)
ababaxabracabracadabratcadabrax
           abracadabra
                  ^(match)
ababaxabracabracadabratcadabrax
           abracadabra
                 ^(match)
ababaxabracabracadabratcadabrax
           abracadabra
                ^(match)
ababaxabracabracadabratcadabrax
           abracadabra
               ^(match)
ababaxabracabracadabratcadabrax
           abracadabra
              ^(match)
ababaxabracabracadabratcadabrax
           abracadabra
             ^(match)
ababaxabracabracadabratcadabrax
           abracadabra
            ^(match)
ababaxabracabracadabratcadabrax
           abracadabra
           ^(match,full-match, skip so line up what matched before)
ababaxabracabracadabratcadabrax
                  abracadabra
                            ^(no-match, k+=max(d[r]=1,dd[a]=1)=1)
ababaxabracabracadabratcadabrax
                   abracadabra
                            ^(match)
ababaxabracabracadabratcadabrax
                   abracadabra
                            ^(match)
ababaxabracabracadabratcadabrax
                   abracadabra
                           ^(match)
ababaxabracabracadabratcadabrax
                   abracadabra
                          ^(match)
ababaxabracabracadabratcadabrax
                   abracadabra
                         ^(match)
ababaxabracabracadabratcadabrax
                   abracadabra
                        ^(match)
ababaxabracabracadabratcadabrax
                   abracadabra
                       ^(match)
ababaxabracabracadabratcadabrax
                   abracadabra
                      ^(no-match, k+=max(d[t]=11,dd[a]=14)=14)
ababaxabracabracadabratcadabrax
                          abracadabra
                           (past text-end so quit)