Suhe in Texten Niver Algorithmus Knuth-Morris-Prtt-Algorithmus Krp-Rin-Algorithmus M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-1
Suhe in Texten Niver Algorithmus Knuth-Morris-Prtt-Algorithmus Krp-Rin-Algorithmus M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-2
Textsuhprolem (1) Definitionen: Ein Alphet ist eine endlihe, nihtleere Menge von Zeihen. Sei A ein Alphet. Ein Wort üer A ist eine endlihe Folge w = w 0... w n-1 mit w i A, n 0. Hierei ist w = n die Länge des Wortes w. Ds Wort der Länge 0 ist ds leere Wort, es wird mit ezeihnet. Der Begriff "Wort" nh dieser Definition ezeihnet lso jede elieige endlihe Folge von Zeihen; die Bedeutung der Zeihen spielt keine Rolle. Textsuhprolem (engl.: string mthing prolem): Gegeen ist ein Wort t, der Text, und ein kürzeres Wort p, der Suhegriff oder ds Muster. Gesuht sind lle Positionen i, n denen ds Muster p im Text t vorkommt. M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-3
Textsuhprolem (2) Definitionen: Sei A ein Alphet und seien t = t 0... t n-1 und p = p 0... p m-1 Wörter der Länge n zw. m üer A. Ein Textfenster w i ist ein Teilwort von t der Länge m, die n Position i eginnt: w i = t i... t i+m-1. Ein Textfenster w i, ds mit dem Muster p üereinstimmt, heißt Vorkommen des Musters n Position i: w i ist Vorkommen von p p = w i Ein Mismth in einem Textfenster w i ist eine Position j, n der ds Muster mit dem Textfenster niht üereinstimmt: j ist Mismth in w i p j (w i ) j. Textsuhprolem Einge: Text t = t 0... t n-1 und Muster p = p 0... p m-1 mit m n Ausge: Alle Positionen von Vorkommen von p in t, d.h. i p = w i M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-4
M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-5 Niver Algorithmus Idee: Üerprüfung des Textes n llen Positionen i uf Vorkommen des Musters, d.h. von Position i = 0 (linksündig) is i = n - m (rehtsündig). An jeder Position wird ds Muster zeihenweise von links nh rehts verglihen, ei Mismth oder vollständiger Üereinstimmung wird Position um 1 nh rehts vershoen. Beispiel:... 8 7 6 5 4 3 2 1 0...
Niver Algorithmus - Anlyse void niveserh() int i = 0; while (i <= n-m) int j = 0; while (j<m && p[j] == t[i+j]) j++; if (j == m) report(i); i++; Äußere Shleife wird n - m + 1 ml durhlufen Die innere Shleife wird höhstens m ml durhlufen Die Mximlzhl n Vergleihen ist dmit (n - m +1) * m, somit gilt im shlehtesten Fll T(n, m) = O(m*n) Der shlehteste Fll tritt z.b. für t =... und p = ein. Verhlten im Durhshnitt: Sei h die Häufigkeit des häufigsten Zeihens in t. Dnn ist die Anzhl der Vergleihe pro Position eshränkt durh v 1 + h + h 2 +... + h m-1 1/(1 - h) (geometrishe Reihe) Dmit ergit sih durhshnittlih T(n) = (n + m +1) / (1 - h) O(n). z.b. ist e im Deutshen m häufigsten (h = 0.13), => durhshnittlih 1/(1-0.13) = 1.15 Vergleihe pro Textzeihen. M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-6
Veresserung durh Berüksihtigung der Häufigkeit Idee: Beim niven Algorithmus ist es niht notwendig, die Zeihen des Musters p in ufsteigender Reihenfolge p 0,..., p m+1 mit dem Text zu vergleihen, die Reihenfolge ist elieig. Am esten ist es, zuerst ds seltenste Zeihen zu vergleihen, d so ein Mismth m whrsheinlihsten wird und dmit die innere Shleife möglihst shnell gerohen wird. erfordert Kenntnis der Häufigkeitsverteilung der Zeihen im Text. Beispiel: ist seltener ls 0 1 2 3 4 5 6 7 8...... M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-7
Veresserter Algorithmus void notsoniveserh() int i = 0; while (i <= n-m) int j = 0; while (j<m && p[ g[j] ] == t[ i+ g[j] ]) j++; if (j == m) report(i); i++; Die geänderte Vergleihsreihenfolge ist eine Permuttion der Indizes von p: Dem Zeihen No. k in p wird ein Pltz g[k] 1..m-1 zugewiesen. Beim niven Algorithmus ist g[k] = k. g[k] muß im Vorfeld durh ein Sortierverfhren us den Häufigkeiten erehnet werden (O(m log m)) Anlyse: Sei h j die Häufigkeit des Zeihens n der Auswerteposition g[j]. Pro Textposition ergeen sih v = 1 + h 0 + h 0 h 1 +... + h 0 h 1... h m-2 Vergleihe. Sind lle Zeihen gleih häufig, so ergit sih kein Vorteil gegenüer dem niven Algorithmus. Ist ein Zeihen in p sehr selten, erhält mn eine signifiknte Einsprung. M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-8
Suhe in Texten Niver Algorithmus Knuth-Morris-Prtt-Algorithmus Krp-Rin-Algorithmus M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-9
Knuth-Morris-Prtt-Algorithmus 0 1 2 3 4 5 6 7 8... Prolem des niven Algorithmus: Vorherige Vergleihe werden vergessen.... Sinnloser Vergleih Idee: z.b. könnte mn Suhfenster gleih um 2 weitershieen und n Pos. 4 weitervergleihen, d mn ereits weiß, ds Pos. 2 und 3 in t und Pos. 0 und 1 in p die Folge enthält. In einer Vorlufphse wird ds Suhmuster nlysiert und Informtion üer seine Struktur gespeihert. Aus der Art und Position des Mismthes wird üer die Strukturinformtion erehnet, wie weit mn springen drf, evor weiterverglihen werden muß. M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-10
Präfix, Suffix und Rnd von Zeihenketten Definitionen: Sei A ein Alphet und x = x 0... x k-1 ein Wort der Länge k üer A. Ein Präfix von x ist ein Teilwort u mit u = x 0... x -1 woei 0,..., k, lso ein Anfngswort der Länge von x. Ein Suffix von x ist ein Teilwort u mit u = x k-... x k-1 woei 0,..., k, lso ein Endwort der Länge von x. Ein Präfix u von x zw. Suffix heißt eht, wenn u x ist, d.h. wenn die Länge < k ist. Ein Rnd von x ist ein Teilwort r mit r = x 0... x -1 und r = x k-... x k-1 woei 0,..., k-1. Ein Rnd ist lso ein Wort, ds gleihzeitig ein ehtes Präfix und ein ehtes Suffix von x ist. Die Länge ist die Breite des Rndes r. Beispiel: x = Ehte Präfixe:,,,,, Ehte Suffixe:,,,,, Ränder:, mit Breite 0 zw. 2 M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-11
Shieedistnz us dem Rnd des Präfix Beispiel: 0 1 2 3 4 5 6 7 8 9... d Muster knn is Pos. 3 geshoen werden d Vergleih wird Pos. 5 fortgesetzt d Sowohl Shieedistnz ls uh Fortsetzungspunkt können erehnet werden, ohne nohmls den Text nzushuen. Üereinstimmendes Präfix: (Länge j = 5) Breitester Rnd: (Breite = 2) Shieedistnz: j - = 5-2 = 3 Grundprinzip: Shieedistnz rihtet sih nh dem reitesten Rnd des mit dem Text üereinstimmenden Präfixes des Musters In einem Vorluf werden für jedes Präfix des Musters die Breite seines reitesten Rndes estimmt. M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-12
Ränder von Rändern... Stz: Seien r und s Ränder eines Wortes x, woei die Breite von r kleiner ls die Breite von s ist. Dnn ist r ein Rnd von s. r r r r s s s x Beweis: Als Rnd von x ist r ein Präfix von x und dmit uh ein ehtes Präfix von s, weil r shmler ls s ist. Aer r ist uh Suffix von x und dmit ein ehtes Suffix von s. Also ist r ein Rnd von s. Ist s der reiteste Rnd von x, so ergit sih der nähstshmlere Rnd r von x ls reitester Rnd von s usw. M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-13
Vorluflgorithmus (1) Definition: Sei x ein Wort und ein Zeihen ein Rnd r von x läßt sih durh fortsetzen, wenn r ein Rnd von x ist. r x r Ein Rnd r von x der Breite j läßt sih durh fortsetzen, wenn x j = ist. [i] In der Vorlufphse wird ein Arry der Länge m + 1 erehnet, ei dem der Eintrg [i] die Breite des reitesten Rndes des Präfix der Länge i enthält. Ds Präfix der Länge i = 0 ht keinen Rnd, dher wird [0] = -1 gesetzt. Sind [0],..., [i] ereits eknnt, wird geprüft, o sih ein Rnd des Präfixes der Länge i durh p i fortsetzen läßt, d.h. p [i] = p i. Die zu prüfenden Ränder ergeen sih nh oigem Stz in steigender Breite us [i], [[i]],... M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-14 i
Vorluflgorithmus (2) void kmppreproess() int i = 0, j = -1; [0] = -1; while (i < m) while (j>=0 && p[i]!= p[j]) j = [j]; i++; j++ [i] = j; Üerprüfung, o Rnd sih fortsetzen läßt. Flls niht, gehe zum nähstshmleren Rnd Shleife endet, wenn es keinen fortsetzren Rnd mehr git, d.h. j = -1 Beispiel: Rndreiten für ds Muster p =, z.b. ist [5] = 3, weil ds Präfix der Länge 5 einen Rnd der Breite 3 ht. j: p[j]: 0 1 2 3 4 5 6 [j]: -1 0 0 1 2 3 1 M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-15
Knuth-Morris-Prtt-Suhlgorithmus (1) void kmpserh() int i = 0, j = 0; while (i < n) while (j>=0 && t[i]!= p[j]) j = [j]; i++; j++ if (j == m) report(i - j); j = [ij; In der inneren Shleife wird ei einem Mismth n Position j der reiteste Rnd mit Breite [j] des üereinstimmende Präfixes etrhtet Fortsetzung des Vergleihs n Pos. [j] Aruh wenn kein Rnd mehr vorhnden ist (j = -1), d.h. keine Sprünge mehr gemht werden können, Üergng zur nähsten Pos. i in t. Üereinstimmung gefunden, springe so weit, wie es der reiteste Rnd zuläßt. [Lng, 2006] M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-16
M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-17 Knuth-Morris-Prtt-Suhlgorithmus (2)... 8 7 6 5 4 3 2 1 0... Beispiel: Anlyse: Anshulih: die durhgeführten Vergleihe (rote und grüne Felder) ilden eine Treppe. Jede Stufe knn höhsten so hoh sein, wie sie reit ist, somit werden mximl 2n Vergleihe durhgeführt => Suhe ist O(n). Der Vorluflgorithmus ist O(m) (s. Lng, 2006), es gilt m < n, dher ht der gesmte Algorithmus Lufzeit O(n). Der Gewinn gegenüer dem niven Algorithmus liegt in der Nutzung ereits vorher durhgeführter Vergleihe.
Suhe in Texten Niver Algorithmus Knuth-Morris-Prtt-Algorithmus Krp-Rin-Algorithmus M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-18
Algorithmus von Krp-Rin Idee: Grundufu ähnlih wie eim niven Algorithmus: ds Muster wird mit jedem Textfenster verglihen. Aer sttt n jeder Position zeihenweise zu vergleihen, wird nur ein einziger Vergleih durhgeführt, und zwr zwishen 2 Signturen (eindeutige numerishe Merkmle) von Textfenster und Muster. Beispiel: Alphet A = 0,..., 9, Muster p = 1 3 0 8 Signturfunktion: Quersumme Quersumme von p ist 12 0 1 2 3 4 5 6 7 8... 7 6 2 1 3 0 8 7 2 5 0 8 16 12 6 12 18 17 22 weiter zum zeihenweisen Vergleih 14... M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-19
Signturfunktion Definitionen: Sei A ein Alphet und M eine Menge. Eine Signturfunktion ist eine Aildung s: A* M, die jedem Wort x A* einen Wert s(x) M zuordnet. Der Wert s(x) ist die Signtur von x. Sei eine Signturfunktion. Eine Kollision ist ein Pr von Wörtern (x, x ) mit x x, er s(x) = s(x ). Anforderungen n Signturfunktion (vgl. Hshfunktion): Kollisionen sollten möglihst usgeshlossen sein Signtur muß in konstnter Zeit erehenr sein. Beispiel: Quersumme ht häufig Kollisionen, ist er sehr effektiv erehenr: die Zhl, die ds Textfenster verläßt, wird sutrhiert, die neu hinzukommende Zhl ddiert. M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-20
Signturfunktion des Krp-Rin-Algorithmus Grundidee: Bildung einer Dezimlzhl us den Ziffern der Zeihenreihe, z.b. 1308 us der Folge 1 3 0 8 (ei A = 0,..,9 sind Kollisionen so usgeshlossen). Für shnelle Berehenrkeit sollten die resultierenden Zhlen in ein Mshinenwort pssen: Zhlen mit höhstens 32 Bit in Binärdrstellung pssen in ein Mshinenwort, ei mehr ls 32 Bit werden nur die letzten 32 Bit erüksihtigt (=> Gefhr von Kollisionen). Eenso erhöht sih die Kollisionswhrsheinlihkeit durh die Verwendung des Binärsystems sttt eines Systems mit Bsis 10 oder 26. Signturfunktion (Krp, Rin): Die Signtur s eines neuen Fensters t i-m+1... t i wird us der Signtur s des vorhergehenden Fensters t i-m... t i-1 wie folgt erehnet: s = (2 (s - 2 m-1 t i-m ) + t i ) mod 2 32 Im shlimmsten Fll (100% Kollisionen z.b. ei p =... und t =...) ist die Lufzeit O(nm), im Durhshnitt er O(n). s(x 0 x 1...x m 1 ) = 2 j x m j 1 mod 2 32 j= 0,...,m 1 M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-21
Krp-Rin-Algorithmus void krpreproess() int i = 0; sp = p[0]; sp, p, t seien innerhl des zugehörigen Ojekts deklriert Vorluf: Berehnung der Signtur des Musters for (i = 1; i < m; i++) sp = (sp << 1) + p[i]; mod 2 32 wird implizit durh die 32-Bit- Zhlendrstellung ewirkt. void krserh() int i = 0, st = 0; Initilisierung der Signtur mit erstem Suhfenster for (i = 1; i < m; i++) st = (st << 1) + t[i]; for (i = m; i < n; i++) if ( sp == st && mthesat(i-m) ) report(i-m); st = ( (st - (t[i-m] << m-1)) << 1) + t[i]; if ( sp == st && mthesat(n-m) ) report(n-m); Funktion mthesat üerprüft zeihenweise, o Fenster und Muster üereinstimmen. Ahtung: für m-1 > 32 muß die Multipliktion mit 2 m-1 mod 2 32 evtl. nders relisiert werden. M.O.Frnz; Jnur 2008 Algorithmen und Dtenstrukturen - Textsuhe 2-22