next up previous
Next: Up: Previous:

Boyer-Moore-Matcher

Boyer-Moore-Matcher(T, P, $\Sigma$)
$\;\;\;\;\;$n = length(T)
$\;\;\;\;\;$m = length(P)
$\;\;\;\;\;$$\lambda$ = Compute-Last-Occurrence(P, m, $\Sigma$) $\;\;\;\;\;$; O( \(\mid \Sigma \mid\) + m)
$\;\;\;\;\;$$\gamma$ = Compute-Good-Suffix(P, m) $\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$; O(m)
$\;\;\;\;\;$s = 0
$\;\;\;\;\;$while s $\leq$ n-m $\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$; O(n-m+1)
$\;\;\;\;\;$ $\;\;\;\;\;$j = m
$\;\;\;\;\;$ $\;\;\;\;\;$while j > 0 and P[j] = T[s+j] $\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$; O(m)
$\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$j = j - 1
$\;\;\;\;\;$ $\;\;\;\;\;$if j = 0
$\;\;\;\;\;$ $\;\;\;\;\;$then print ``Pattern occurs with shift'' s
$\;\;\;\;\;$ $\;\;\;\;\;$ $\;\;\;\;\;$s = s + $\gamma$[0]
$\;\;\;\;\;$ $\;\;\;\;\;$else s = s + max($\gamma$[j], j - $\lambda$[T[s+j]])



Close to naive

O((n-m+1)m + \(\mid \Sigma \mid\))

Boyer-Moore-Matcher is actually best in practice


next up previous
Next: Up: Previous: