13.07.2015 Aufrufe

INSTITUTFÜRINFORMATIK - Lehrstuhl für Effiziente Algorithmen ...

INSTITUTFÜRINFORMATIK - Lehrstuhl für Effiziente Algorithmen ...

INSTITUTFÜRINFORMATIK - Lehrstuhl für Effiziente Algorithmen ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

10 Kapitel 2. DatenanalyseBeweis: Auch hier unterscheiden wir wieder zwischen erfolglosen und erfolgreichen Versuchenbei den ausgeführten Vergleichen s k = s j−1 in der vierten Zeile.1. Die Anzahl erfolgreicher Vergleiche lässt sich folgendermaßen abschätzen: Bei einemerfolgreichen Vergleich (s k = s j−1 )wirdk in der siebten Zeile erhöht; anschließendaber auch j in der dritten Zeile. Wegen j ∈{2,...,m+1} kann k maximal (m − 1)-mal erhöht werden. Somit sind maximal m − 1 erfolgreiche Vergleiche möglich.2. Bei der Anzahl erfolgloser Vergleiche ergibt sich folgendes: Bei einem erfolglosenVergleich (s k ≠ s j−1 )wirdk um mindestens 1 verringert. Es gilt jedoch in jedemFall k ≥−1. Da außerdem zu Beginn k = 0 galt und k nur um so viel verringertwerden kann, wie vorher zugefügt worden ist, kann k höchstens ((m − 1) + 1)-malverringert werden. Es sind also maximal m erfolglose Vergleiche möglich.Insgesamt ergeben sich also höchstens (m − 1) + m =2m − 1 Vergleiche.Setzen wir die beiden <strong>Algorithmen</strong> aus den Abbildungen 2.2 und 2.3 zusammen, so erhaltenwir den vollständigen Algorithmus von Knuth, Morris und Pratt. Die Laufzeit diesesAlgorithmus lässt sich nun leicht aus den bewiesenen Lemmata gewinnen.Theorem 2.6 Der Algorithmus von Knuth, Morris und Pratt benötigt im schlechtestenFall höchstens 2n + m Vergleiche, um ein Wort der Länge m in einem Wort der Länge nzu suchen (und zu finden).Beweis: Folgt durch Addition unmittelbar aus Lemma 2.4 und Lemma 2.5.Wie finden wir alle Positionen? Unser Algorithmus ist bereits so formuliert, dass er alleVorkommen des Suchwortes in einem Text ausgibt. Wieso ist dies richtig? Dazu überlegenwir uns folgendes: Es seien $ und # Buchstaben, die nicht zum Alphabet Σ gehören. Fürs, t ∈ Σ ∗ mit |s| = m und |t| = n suchen wir nach dem Wort s ′ = s# indemWortt ′ = t$. Wann immer eine Unverträglichkeit durch # verursacht wird, geben wir i aus. DieKorrektheit folgt, da s# nicht in t$ vorkommt und, falls # die Unverträglichkeit (i, m)verursacht, gilt: s 0 ...s m−1 = t i ...t i+m−1 für i ≤ (n +1)− (m +1)=n − m. Setzen wirdie neuen Parameter formal in Satz 2.6 ein, so erhalten wir, dass alle Vorkommen von s int mit höchstens 2(n +1)+(m +1)=2n + m + 3 Vergleichen gefunden werden. Natürlichkönnen wir die gleichen Analyse wie zum Beweis von Satz 2.6 durchführen und erhaltendie gleichen obere Schranke für die Anzahl der Vergleiche.Korollar 2.7 Der Algorithmus von Knuth, Morris und Pratt kann so modifiziert werden,dass O(n + m) Vergleiche benötigt werden, um alle Anfangspositionen eines Wortes derLänge m in einem Wort der Länge n zu finden.Skriptum zu Internet-Algorithmik WS 2006/2007

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!