Algoritmer og Datastrukturer 2 Gerth Stølting Brodal Mønstergenkendelse [CLRS, kapitel 32.1-32.2, 32.4]
Mønster genkendelse forekomst på position 4 1 2 3 4 5 6 7 8 9 10 11 12 13 skift på 3 1 2 3 4 Input: Tekst T af længde n og mønster P af længde m Output: Alle positioner i T hvor P forekommer
Naive Algoritme O(n∙m) For tilfædig streng eller pattern, forventet tid O(n) Worst-case O(n*m) Eksempel: P = ababc T = babababcab O(n∙m)
Rabin-Karp : Eksempel P = 31415 T hash værdier 2 3
p = P[1]dm-1 +P[2]dm-2 + ∙∙∙ +P[m-1]d1+P[m]d0 mod q 1981 Rabin-Karp O(n∙m) p = P[1]dm-1 +P[2]dm-2 + ∙∙∙ +P[m-1]d1+P[m]d0 mod q
π (q) = max { i | i<q og P[1..i] er et suffix af P[1..q] } Knuth-Morris-Pratt 1977 π(0) = 0 π (q) = max { i | i<q og P[1..i] er et suffix af P[1..q] } Π(q) = max { i | i<q og P[1..i] er et suffix af P[1..q] } i T y P x π(q) z q P O(n)
Knuth-Morris-Pratt: Eksempel π(0) = 0 π (q) = max { i | i<q og P[1..i] er et suffix af P[1..q] }
Knuth-Morris-Pratt: Beregning af prefix funktionen q P = y P x O(m) k
Knuth-Morris-Pratt: Beregning af prefix funktionen
Worst-case tider [CLRS] 32.1 32.2 (32.3) 32.4 Mere info: Se Bill Smyth’s bog (Kapitel 8) og Handbook of Exact String-Matching Algorithms (Charras og Lecroq, http://www-igm.univ-mlv.fr/~lecroq/string/) 32.4