28.07.2013 Views

Overview of string matching algorithms O(nm) O(n + m) O(n + ?m) O ...

Overview of string matching algorithms O(nm) O(n + m) O(n + ?m) O ...

Overview of string matching algorithms O(nm) O(n + m) O(n + ?m) O ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Overview</strong> <strong>of</strong> <strong>string</strong> <strong>matching</strong> <strong>algorithms</strong><br />

Algorithm Worst case Average case Comp. Note<br />

Trivial O(<strong>nm</strong>) O(n+m) Y simple<br />

DFA O(n+σm) O(n+σm) N real-time<br />

(K)MP O(n+m) O(n+m) Y<br />

Boyer Moore O(<strong>nm</strong>),O(n+m) O( n<br />

σ<br />

+m) N<br />

Rabin-Karp O(<strong>nm</strong>) O(n+mk) N randomized<br />

Shift-and O(n+m+σ) O(n+m+σ) N m-bit register<br />

BNDM O(<strong>nm</strong>+σ) O(n log σ m<br />

m<br />

Multiple patterns: Aho CorasickO((n+m) logσ+k)<br />

2D patterns: Baker BirdO((n+m) logσ)<br />

1<br />

+m+σ) N m-bit register


Fastest algorithm for variousmandσ<br />

Navarro, Raffinot (2002) Flexible Pattern Matching in Strings.<br />

Random texts, 32-bit numbers<br />

2


Nepovinná domáca úloha<br />

V Boyer-Moorovom algoritme s použitím iba slabého pravidla dobrého<br />

sufixu nájdite príkladyPaT , ktoré vyžadujú kvadratický počet porovnaní,<br />

aj ked’ saP vT nenachádza.<br />

3


Boyerov-Moorov algoritmus 1977<br />

1 i =0;<br />

2 while ( i =0 && P [ j ]==T [ i + j ] ) {<br />

5 j−−;<br />

6 }<br />

7 i f ( j


LZW compression (Lempel–Ziv–Welch 1984)<br />

Used in GIF, popular UNIX compression in the past, formerly patent issues<br />

0<br />

1 2<br />

a b<br />

a<br />

a<br />

4 5 7 6<br />

8 10 9 12<br />

3<br />

11<br />

b c a c<br />

Original text: aabbaabbabcccccc<br />

b<br />

b<br />

Compressed: 1, 1, 2, 2, 4, 6, 5, 3, 11, 12<br />

c<br />

c<br />

5

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!