www.wikidata.de-de.nina.az
Der Baeza Yates Gonnet Algorithmus bzw Shift or Algorithmus der auch unter den Namen Shift and oder Bitap bekannt ist lost das String Matching Problem indem er einen nichtdeterministischen Automaten simuliert Unter anderem wird eine Abwandlung dieses Algorithmus bei dem Unix Tool grep benutzt Da die Implementierung auf Bit Operationen zuruckgefuhrt werden kann ist der Algorithmus alleine von der Ausfuhrung her bereits sehr effizient Kombiniert man dies mit dem zu Grunde liegenden System im Preprocessing einmal Schleife uber das Muster wahrend der Suche einmal Schleife uber den Text ergibt sich ein extrem effizienter Algorithmus Inhaltsverzeichnis 1 Grundlage 2 Ablauf exaktes Matching 3 Beispiel exaktes Matching 4 Erweiterung approximatives Matching 4 1 Einfugen eines Zeichens in das Suchmuster 4 2 Loschen eines Zeichens aus dem Suchmuster 4 3 Ersetzen eines Zeichens im Muster 5 Literatur 6 WeblinksGrundlage BearbeitenGrundlage des Algorithmus bildet eine Menge von Vektoren R j displaystyle R j nbsp mit folgender Definition R j 1 i 1 falls i 0 1 falls R j i 1 1 und M u s t e r z e i c h e n i E i n g a b e z e i c h e n j 1 0 sonst displaystyle R j 1 i begin cases 1 amp mbox falls i 0 1 amp text falls R j i 1 1 text und mathrm Musterzeichen i mathrm Eingabezeichen j 1 0 amp text sonst end cases nbsp Anschaulich bedeutet dies dass R j i displaystyle R j i nbsp genau dann 1 displaystyle 1 nbsp ist wenn nach der Verarbeitung von j displaystyle j nbsp Zeichen des Textes die letzten i displaystyle i nbsp Zeichen mit den ersten i displaystyle i nbsp Zeichen des Suchmusters ubereinstimmen Ein Treffer fur ein Suchmuster mit Lange m displaystyle m nbsp ist demnach gefunden falls R j m 1 displaystyle R j m 1 nbsp Weiterhin werden die charakteristischen Vektoren fur alle moglicherweise im Text vorkommenden Zeichen benotigt s a i 1 falls im Suchmuster an Stelle i das Zeichen a steht 0 sonst displaystyle s a i begin cases 1 amp text falls im Suchmuster an Stelle i text das Zeichen a text steht 0 amp text sonst end cases nbsp Beispiel Suchmuster a b c a c displaystyle abcac nbsp Lange m 5 displaystyle m 5 nbsp Charakteristische Vektoren s a s b s c s d a 1 0 0 0 b 0 1 0 0 c 0 0 1 0 a 1 0 0 0 c 0 0 1 0 displaystyle begin matrix amp s a amp s b amp s c amp s d amp a amp 1 amp 0 amp 0 amp 0 amp b amp 0 amp 1 amp 0 amp 0 amp c amp 0 amp 0 amp 1 amp 0 amp a amp 1 amp 0 amp 0 amp 0 amp c amp 0 amp 0 amp 1 amp 0 amp end matrix nbsp Ablauf exaktes Matching BearbeitenUm den Ablauf zu vereinfachen wird zunachst eine spezielle Bit Operation Bitshift bzw displaystyle gg nbsp fur den Vektor R displaystyle R nbsp eingefuhrt R 0 0 0 0 0 B i t s h i f t 1 0 0 0 0 B i t s h i f t 1 1 0 0 0 B i t s h i f t 1 1 1 0 0 displaystyle R begin matrix 0 0 0 0 0 end matrix quad stackrel mathrm Bitshift longrightarrow quad begin matrix 1 0 0 0 0 end matrix quad stackrel mathrm Bitshift longrightarrow quad begin matrix 1 1 0 0 0 end matrix quad stackrel mathrm Bitshift longrightarrow quad begin matrix 1 1 1 0 0 end matrix nbsp Der Algorithmus fur exakte Ubereinstimmungen lasst sich nun auf wenige einfache Schritte reduzieren Initialisiere den R displaystyle R nbsp Vektor mit 0 fur alle Positionen und beginne mit dem ersten Zeichen des zu durchsuchenden Textes Verschiebe alle Bits in R displaystyle R nbsp mittels Bitshift um eine Position nach rechts Fuhre eine U N D displaystyle UND nbsp Verknupfung von R displaystyle R nbsp und dem charakteristischen Vektor des aktuellen Textzeichens durch Gehe zum nachsten Textzeichen Falls Ende erreicht breche ab sonst gehe zu 2 Die Schritte 2 und 3 fuhren bei genauer Betrachtung genau die Berechnungsvorschrift fur R displaystyle R nbsp aus Durch das Shiften wird aus dem alten R displaystyle R nbsp das Zeichen an Stelle i displaystyle i nbsp an die Stelle i 1 displaystyle i 1 nbsp angelegt entspricht in Kombination mit U N D displaystyle UND nbsp der Bedingung R j i 1 displaystyle R j i 1 nbsp Der charakteristische Vektor des aktuellen Textzeichens enthalt an der Stelle i 1 displaystyle i 1 nbsp genau dann eine 1 displaystyle 1 nbsp falls Muster und Text hier ubereinstimmen Durch das U N D displaystyle UND nbsp werden beide Bedingungen verknupft Beispiel exaktes Matching BearbeitenMuster a b c a c displaystyle abcac nbsp m 5 displaystyle m 5 nbsp Text a b c a b c a c displaystyle abcabcac nbsp i R 0 s a R 1 1 0 1 1 1 2 0 0 0 0 3 0 0 0 0 4 0 0 1 0 5 0 0 0 0 s b R 2 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 s c R 3 1 0 0 0 0 0 1 1 1 0 0 0 0 1 0 s a R 4 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 s b R 5 1 0 0 1 1 1 0 0 0 0 0 0 1 0 0 s c R 6 1 0 0 0 0 0 1 1 1 0 0 0 0 1 0 s a R 7 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 s c R 8 1 0 0 1 0 0 0 1 0 0 0 0 1 1 1 displaystyle begin vmatrix i setminus amp R 0 amp gg amp s a amp R 1 1 amp 0 amp 1 amp 1 amp 1 2 amp 0 amp 0 amp 0 amp 0 3 amp 0 amp 0 amp 0 amp 0 4 amp 0 amp 0 amp 1 amp 0 5 amp 0 amp 0 amp 0 amp 0 end vmatrix begin vmatrix gg amp s b amp R 2 1 amp 0 amp 0 1 amp 1 amp 1 0 amp 0 amp 0 0 amp 0 amp 0 0 amp 0 amp 0 end vmatrix begin vmatrix gg amp s c amp R 3 1 amp 0 amp 0 0 amp 0 amp 0 1 amp 1 amp 1 0 amp 0 amp 0 0 amp 1 amp 0 end vmatrix begin vmatrix gg amp s a amp R 4 1 amp 1 amp 1 0 amp 0 amp 0 0 amp 0 amp 0 1 amp 1 amp 1 0 amp 0 amp 0 end vmatrix begin vmatrix gg amp s b amp R 5 1 amp 0 amp 0 1 amp 1 amp 1 0 amp 0 amp 0 0 amp 0 amp 0 1 amp 0 amp 0 end vmatrix begin vmatrix gg amp s c amp R 6 1 amp 0 amp 0 0 amp 0 amp 0 1 amp 1 amp 1 0 amp 0 amp 0 0 amp 1 amp 0 end vmatrix begin vmatrix gg amp s a amp R 7 1 amp 1 amp 1 0 amp 0 amp 0 0 amp 0 amp 0 1 amp 1 amp 1 0 amp 0 amp 0 end vmatrix begin vmatrix gg amp s c amp R 8 1 amp 0 amp 0 1 amp 0 amp 0 0 amp 1 amp 0 0 amp 0 amp 0 1 amp 1 amp 1 end vmatrix nbsp Da R 8 5 1 displaystyle R 8 5 1 nbsp liegt ein Treffer bei 8 5 1 displaystyle 8 5 1 nbsp Position Musterlange Korrektur fur erstes Zeichen vor Erweiterung approximatives Matching BearbeitenDer Algorithmus kann durch leichte Modifikationen eine fehlertolerante Suche durchfuhren Hierfur wird der Vektor R displaystyle R nbsp aufgeteilt R j 0 i displaystyle R j 0 i nbsp entspricht dem vorherigen R j i displaystyle R j i nbsp Der Index 0 displaystyle 0 nbsp steht fur die Anzahl der aufgetretenen Fehler R j 1 i displaystyle R j 1 i nbsp Bezeichnet einen R displaystyle R nbsp Vektor der auf Treffer mit maximal einem Fehler ausgerichtet ist R j k i displaystyle R j k i nbsp Bezeichnet einen R displaystyle R nbsp Vektor der auf Treffer mit maximal k displaystyle k nbsp Fehlern ausgerichtet ist Achtung Bei den fehlerbehafteten Vektoren ist die obige Interpretation mit nach j Zeichen stimmen die letzten i mit den ersten i des Musters uberein schwierig und nicht mehr unbedingt einleuchtend Die Berechnungsvorschrift fur R j 0 i displaystyle R j 0 i nbsp bleibt unverandert Fur Fehlervektoren R j 1 k displaystyle R j 1 k nbsp wird nach der verursachenden Aktion unterschieden Einfugen eines Zeichens in das Suchmuster Bearbeiten R j 1 k B i t s h i f t R j k s x R j k 1 displaystyle R j 1 k mathit Bitshift R j k wedge s x quad vee R j k 1 nbsp Erlauterung Der erste Teil des Ausdrucks beschreibt den Fall dass bereits k displaystyle k nbsp Fehler vorhanden sind aber das aktuelle Zeichen von Text und Muster ubereinstimmen Der zweite Teil beschreibt den Fehlerfall Bisher in j displaystyle j nbsp lagen nur k 1 displaystyle k 1 nbsp Fehler vor das aktuelle Zeichen kann also in das Muster eingefugt werden Interpretation R j k i 1 displaystyle R j k i 1 nbsp falls nach j displaystyle j nbsp Zeichen der Eingabe von den letzten i k displaystyle i k nbsp Zeichen mindestens i displaystyle i nbsp Zeichen mit dem Suchmuster ubereinstimmen und der Rest durch Einfugen der fehlenden Zeichen zur Ubereinstimmung gebracht werden kann Loschen eines Zeichens aus dem Suchmuster Bearbeiten R j 1 k B i t s h i f t R j k s x B i t s h i f t R j 1 k 1 displaystyle R j 1 k mathit Bitshift R j k wedge s x quad vee mathit Bitshift R j 1 k 1 nbsp Erlauterung Der erste Teil des Ausdrucks beschreibt den Fall dass bereits k displaystyle k nbsp Fehler vorhanden sind aber das aktuelle Zeichen von Text und Muster ubereinstimmen Der zweite Teil beschreibt den Fehlerfall Schaut man sich bei j 1 displaystyle j 1 nbsp Zeichen des Textes nicht die ersten i displaystyle i nbsp Zeichen an sondern nur die ersten i 1 displaystyle i 1 nbsp im Vektor die Position daruber so stimmt das Muster bis auf k 1 displaystyle k 1 nbsp Fehler uberein Das i displaystyle i nbsp Zeichen des Musters wird daraufhin einfach geloscht Ersetzen eines Zeichens im Muster Bearbeiten R j 1 k B i t s h i f t R j k s x B i t s h i f t R j k 1 displaystyle R j 1 k mathit Bitshift R j k wedge s x quad vee mathit Bitshift R j k 1 nbsp Erlauterung Der erste Teil des Ausdrucks beschreibt den Fall dass bereits k displaystyle k nbsp Fehler vorhanden sind aber das aktuelle Zeichen von Text und Muster ubereinstimmen Der zweite Teil beschreibt den Fehlerfall Nach j displaystyle j nbsp Zeichen stimmten die letzten i 1 displaystyle i 1 nbsp Zeichen uberein Ersetzt man nun also das i displaystyle i nbsp Zeichen im Muster durch das j 1 displaystyle j 1 nbsp Zeichen des Textes stimmen auch nach j 1 displaystyle j 1 nbsp Zeichen die letzten i displaystyle i nbsp Zeichen mit den ersten i displaystyle i nbsp Zeichen des neuen Musters uberein Die Varianten konnen mittels bitweisem oder beliebig verknupft werden Literatur BearbeitenRicardo A Baeza Yates Gaston H Gonnet A New Approach to Text Searching In Communications of the ACM Band 35 Nr 10 Oktober 1992 ISSN 0001 0782 S 74 82 doi 10 1145 135239 135243 Weblinks BearbeitenStringSearch high performance pattern matching algorithms in Java Implementierungen des Shift Or Algorithmus in Java englisch BNDM Algorithmus PDF 289 kB Abgerufen von https de wikipedia org w index php title Baeza Yates Gonnet Algorithmus amp oldid 214456308