Folien - TU Ilmenau

Transcrição

Folien - TU Ilmenau
AUTOMATENBASIERTE ALGORITHMEN
UND EXAKTES 2D-PATTERN-MATCHING
Vincent Holluba
Gliederung
Einleitung und Wiederholung
Suchwortbaum (Trie)
Aho-Corasick Automat
1.
2.
3.
i.
ii.
4.
5.
Matching mit Wildcards
2D-Pattern Matching
Matching regulärer Ausdrücke
Zusammenfassung
Motivation




Problem von Standardalgorithmen:
Text wird immer nur nach Auftreten eines Wortes
durchsucht
Wenn m Worte in einem Text mit Länge n gesucht
werden sollen wird eine Laufzeit von O(n*m)
benötigt
Geht es besser?
Endlicher Automat







Ein deterministischer endlicher Automat G=(Σ;Q;init;d;T)
besteht aus:
Σ … Eingabealphabet
Q… Zustandsmenge
init … Startzustand (init ∈ Q)
d … Übergangsfunktion ((q,a) ∈ Q x Σ  q‘∈ Q)
T … Endzustandsmenge (T ∈ Q)
Bei nfa:
zu einem Eingabezeichen verschiedene Möglichkeiten des
Zustandsübergangs
 Zustandsübergänge ohne das Lesen eines Zeichens möglich

Beispiel endlicher Automat





Σ ={0,1}
Q={Z1,Z2}
init=Z1
T = {Z1}
d wird durch die folgende Übergangstabelle
beschrieben:
0
1
Z1
Z2
Z1
Z2
Z1
Z2
Beispiel endlicher Automat

Übergangsfunktion als Graph
1
0
Z1
1
Z2
0
Suchwortbaum

Ein Suchwortbaum (Trie) für eine Menge S von
Wörtern aus Σ + ist ein gewurzelter Baum K mit:
 Jede
Kante von K ist mit einem Zeichen aus Σ markiert
(gelabelt)
 Die von einem Knoten ausgehenden Kanten besitzen
paarweise verschiedene Markierungen
Suchwortbaum
Definition:
 Die Markierung L(v) eines Knoten v wird definiert als
die Verknüpfung der Kantenmarkierungen welche auf
dem Weg von der Wurzel zum Knoten v durchlaufen
werden.
 Für jedes Wort s ∈ S existiert ein Knoten v, so dass
L(v)=s
 Für jedes Blatt ist L(v)=s
Konstruktion eines Suchbaumes

S={s1,…,sn}
(1)
(2)
(3)
(4)
(5)
(6)

Erstelle Wurzelknoten
Für i=1 bis n tue
Starte am Wurzelknoten
Folge dem Weg welcher durch die Buchstaben von si
beschrieben wird
Wenn der Pfad endet und si noch Buchstaben enthält, dann
erstelle neue Knoten und Kanten für die restlichen
Buchstaben von si
Speichere den Identifier i von si im Endknoten des Weges
Laufzeit: O(|s1|+…+|sn|)=O(m)
Beispiel Suchbaum

S={he, she, his, hers}
h
s
e
1
r
s
i
h
e
s
3
1,2
4
Textsuche mit Hilfe eines Suchbaumes




Durchlaufe den Baum anhand der Buchstaben des
Textes
Wenn man einen Knoten mit Identifier i erreicht,
dann hat man das Auftreten des Wortes si gefunden
Wenn der Text endet, bevor man einen Knoten mit
Identifier i erreicht hat, dann enthält der Text keine
Wörter aus S
Wie verhält man sich wenn man in Sackgassen
(Knoten von denen keine Kante mit gesuchter
Beschriftung ausgeht) landet?
Textsuche mit Hilfe eines Suchbaumes

t=hhe
h
s
e
1
r
s
i
h
e
s
3
1,2
4
Textsuche mit Hilfe eines Suchbaumes

Verhalten bei Sackgasse:
 Naiv:
Wenn ein Suchlauf, welcher mit dem i-ten
Buchstaben des Textes begann in einer Sackgasse
endet, dann beginne Suchlauf mit i+1-ten Buchstaben
 Es
geht natürlich besser: Dazu wird der Suchbaum zu
einem Automaten erweitert
Aho-Corasick Automat



Zustandsmenge Q besteht aus den Knoten des
Suchbaumes
init=Wurzelknoten
Besitzt ein Knoten im Suchbaum einen Identifier I,
dann existiert für den Zustand im AC-Automat eine
Ausgabefunktion Ausgabe(q) welche den Identifier
ausgibt
Aho-Corasick Automat
Übergangsfunktion:
 Wenn im Suchbaum die Kante (q,v) mit a beschriftet
ist, dann ist d(q,a)=v=q‘



d(init,a)=init für jeden Buchstaben der keine aus der
Wurzel ausgehende Kante beschriftet
d(q,a)= fail(q) sonst
fail(q) wird Fehler-Link (Failure-Link) oder auch
Fehlerfunktion genannt
Aho-Corasick Automat



Die Fehlerfunktion verweist auf einen Zustand q‘
Für q‘ gilt: L(q‘) entspricht dem längsten Suffix des
bereits erkannten Teilwortes
Die Fehlerfunktion führt die Übergangsfunktion des
Zustandes q‘ aus. (d(q,a)=fail(q)= d(q‘,a))
Aho-Corasick Automat
≠ {h,s}
h
s
e
1
r
s
i
h
e
s
3
1,2
4
Aho-Corasick Automat

AC Automat Suche:
 Starte
im Zustand init
 Solange wie Buchstaben im Text t tue
 Nimm
vordersten Buchstaben a aus t
 Führe d(q,a) aus
 Führe ggf. Ausgabe(q) aus
Aho-Corasick Automat

Beispiel: hhehhishe
h
≠
{h,s}
s
e
s
i
h

Ausgabe:1,3,1,2
1
r
e
s
3
1,2
4
Aho-Corasick Automat

Kontruktion:

Die Konstruktion eines AC-Automat kann in 2 Phasen
unterteilt werden:
Phase 1:
 Konstruiere den Suchbaum für S
 Bestimme die Zustandsmenge Q, die Übergangsfunktion d(q,a)
und die Ausgabefunktion Ausgabe(q) anhand des Suchbaumes
 d(init,a)=init für jeden Buchstaben der keine aus der Wurzel
ausgehende Kante beschriftet
 Setze d(q,a)= fail(q) für jeden Buchstaben der keine aus v
ausgehende Kante beschriftet


benötigte Laufzeit: O(|s1|+…+|sn|)=O(m)
Aho-Corasick Automat
h
≠
{h,s}
s
e
1
r
s
i
h
e
s
3
1,2
4
Aho-Corasick Automat

Kontruktion:


1.
2.
3.
4.
5.
6.
Phase 2:
Rekursiver Algorithmus zur Bestimmung der Failure Links
Für alle v∈V (im Suchbaum) //Durchlaufe Levelweise
KMarkierung=Markierung(Kante(Vater(v),v));
w=Fail(Vater(v));
Solange wie keine Kante(w,x) für alle x∈V mit
Markierung(Kante(w,x))==KMarkierung und w nicht die Wurzel
ist dann setze w=Fail(w);
Wenn eine Kante(w,x) mit
Markierung(Kante(w,x))==KMarkierung existiert, dann setze
Fail(v)=x
Sonst setze Fail(v)=init
Induktion
Aho-Corasick Automat
≠ {h,s}
h
s
e
1
r
s
i
h
e
s
3
2
4
Aho-Corasick Automat







Laufzeit der Fehler-Link Berechnung
Behauptung: Die Laufzeit der Fehler-Link Berechnung beträgt O(m)
O(|s1|+…+|sn|)=O(m)
Um dies zu zeigen betrachten wir ein Suchwort s∈S
Wir zeigen: Für die Berechnung der Fehler-Links im Pfad von s
werden O(|s|) Vergleiche benötigt
Klar: Für jeder Knoten kann es nur einen erfolgreichen Vergleich
geben
Erfolglose Vergleiche verweisen immer auf Knoten mit niedrigerer
Tiefe Da wir nur bei einem erfolgreichen Vergleich ein Level
höher gehen können und das Level nie negativ ist, kann es maximal
|s| erfolglose Vergleiche geben
Deshalb ist die Laufzeit für ein Suchwort s∈S mit O(|s|) beschränkt
und damit die Gesamtlaufzeit mit O(|s1|+…+|sn|)=O(m)
Aho-Corasick Automat






Laufzeit AC Suche:
Behauptung: Einen Text mit dem Aho-Corasick Automaten zu
durchsuchen benötigt O(n+m) Zeit (n=|t|, m=|S|)
Beweis: Für jeden Buchstaben führt der Automat 0 oder
mehr erfolglose und genau einen erfolgreichen Vergleich
aus.
Jeder erfolgreiche Vergleich erhöht die Tiefe von q um
1Die Tiefe von q wird ≤ n mal erhöht
Jeder erfolglose Vergleich verringert die Tiefe von q um
mind. 1 Die maximale Anzahl von erfolglosen Vergleichen
ist ≤ n  Suche O(n)
Das Auftreten eines gefundenen Wortes kann in O(1)
Ausgegeben werdenm*O(1)=O(m)
Matching mit Wildcards



Anwendung: Suchen von Worten welche
nicht genau bekannt sind
Wir nennen φ∉ Σ, das jedes
Zeichen a∈ Σ matcht Wildcard (Joker)
Aufgabe: Exaktes finden von einem Suchwort s mit
Wildcards in einen Text t ohne Wildcards
Matching mit Wildcards
Unser Wort besitzt die Form:
s = φ…s1…φ…s2…φ…sk…φ
 In s1…sk befindet sich keine Wildcard
 Definiere Multimenge S={s1,…,sk}
 Bestimme Vektor v, welcher die Anfangspositionen
der si∈ S beinhaltet v=(v1,…,vk)

Matching mit Wildcards





Zusätzlich wird ein Kontrollarray K der Länge |t|
angelegt
Führe den AC Algorithmus auf dem Text t mit den
Suchwörtern S={s1,…,sk} aus
In K wird bei einem Matching eines Teilwortes si an der
Position j im Text t an der Stelle K(j-vj+1) der Wert des
Feldes um 1 inkrementiert
Bei jedem Auftreten eines Teilwortes si wird die Stelle in
K erhöht an welcher s beginnen könnte
Ist der gesamte Text durchlaufen und in K besitzt mind.
ein Feld den Wert k, dann haben wir eine/mehrere
Anfangspositionen für s gefunden
Zweidimensionales Matching
Where is Waldo?
Zweidimensionales Matching




2D-Matching – Beziehung zur Bildverarbeitung
Große Datenmengen in Form von Pixeldaten
Das Erkennen eines 2D-Musters ist wie folgt
definiert: Finde ein mxm‘ Muster PAT in einem nxn‘
(text) Feld T
Die Position des Auftretens vom Muster ist durch ein
Tupel (i,j) definiert.
i
j
PAT
Zweidimensionales Matching




Lösungsansatz: Übersetzen des Problems in ein
String-matching Problem
Sei S die Menge von allen unterschiedlichen Spalten
des Musters (Wörter)
Baue AC Automat für Spaltenwörter und führe
Berechnung durch
Schreibe dabei in ein 2D-Array die Ausgabe(q), ist
die Ausgabe(q) nicht definiert schreibe 0
Zweidimensionales Matching

In
Beispiel: Suche Muster
a
a
a
b
b
a
a
a
b
a
b
a
b
a
b
b
a
a
a
a
b
b
b
b
b
b
a
a
a
b
a
a
a
b
b
a
a
b
b
a
a
a
b
b
a
a
b
a
a
a
a
Zweidimensionales Matching

Erstellter AC-Automat für Wörter („aba“,“aab“)
0
0
a
b
1
a
0
b
0
a
2
a
a
a
b
b
a
a
a
b
Zweidimensionales Matching
a
b
a
b
a
b
b
a
a
a
a
b
b
b
b
b
b
a
a
a
b
a
a
a
b
b
a
a
b
b
a
a
a
b
b
a
a
b
a
a
a
a
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
1
0
2
0
0
2
2
2
1
0
0
0
0
0
0
2
2
1
0
2
2
1
0
0
2
2
Zweidimensionales Matching


Das nun erstelle 2D-Array wird Zeile für Zeile nach
dem Auftreten des Strings welcher das auftreten
des Musters darstellt durchsucht (Beispiel „221“) z.B.
mit AC Automat oder KMP
Jedes Auftreten des Strings stellt nun ein Auftreten
des Musters im Ausgangsbild dar
Zweidimensionales Matching

Durchsuche Text nach Auftreten von Wort „221“
0
0
0
0
0
0
0
a
b
a
b
a
b
b
0
0
0
0
0
0
0
a
a
a
a
b
b
b
1
0
1
0
2
0
0
b
b
b
a
a
a
b
2
2
2
1
0
0
0
a
a
a
b
b
a
a
0
0
0
2
2
1
0
b
b
a
a
a
b
b
2
2
1
0
0
2
2
a
a
b
a
a
a
a
Intermezzo:
Google:“String Matching Automat“
Matching von regulären Ausdrücken



Gegeben ein Text t und ein regulärer Ausdruck R
Gibt es ein Teilwort w in t mit w∈R?
Einsetzbarkeit:
 Wortfilter
 Compilterbau
…
Matching von regulären Ausdrücken

Induktive Definition:
1.
2.
3.
∅ und ∈ sind reguläre Ausdrücke, für jedes a∈ Σ ist a
ein regulärer Ausdruck
Sind α und β reguläre Ausdrücke, dann sind auch die
Vereinigung/Alternative (α+β), die
Konkatenation/Verkettung (αβ) und der KleeneAbschluss (α)* reguläre Ausdrücke
Nichts sonst ist ein regulärer Ausdruck
Matching von regulären Ausdrücken


Zu jedem regulären Ausdruck lässt sich ein
nichtdeterministischer endlicher Automat (nea, nfa)
konstruieren, welcher den regulären Ausdruck
akzeptiert (Beweis: siehe alte Vorlesungen)
Jeder Zustandsübergang besitzt ein Label a ∈ Σ∪∈
Matching von regulären Ausdrücken


Konstruktionsbeschreibung des nfa
1. R=a
q
a
f
Matching von regulären Ausdrücken


Konstruktionsbeschreibung des nfa
R=(α+β) (Vereinigung/Alternative)
∈
q1
a
α
f1
∈
q
f
∈
q2
β
f2
∈
Matching von regulären Ausdrücken


Konstruktionsbeschreibung des nfa
R=(αβ) (Konkatenation/Verkettung)
q1
α
f1=q2
β
f2
Matching von regulären Ausdrücken


Konstruktionsbeschreibung des nfa
R= (α)* (Kleene-Abschluss)
∈
q
q1
∈
a
α
∈
f1
∈
f
Matching von regulären Ausdrücken

Beispiel:R=(z+w)((e+t)(m+l+i))*((e+s)(r+t))*
∈
q
w
z
1
∈
t
i
e
l
2
m
3
s
e
4
t
r
f
Matching von regulären Ausdrücken

Der konstruierte Automat hat folgende
Eigenschaften:
 Da
in jedem Schritt höchtens 2 Zustände in den Automat
eingefügt werden besitzt der Automat höchstens 2*|R|
Zustände
 Die Anwendung jeder Regel benötigt konstante Zeit

Die Konstuktion benötigt O(m) Zeit mit m=|R|
Matching von regulären Ausdrücken

Simulation:
Q
sei die aktuelle Zustandsmenge
 A(Q,a) sei die Menge aller Zustände die von Q aus
über eine mit a markierte Kante erreicht werden
können
 E(Q) sei die Menge aller Zustände die von Q aus über
eine mit ∈ markierte Kante erreicht werden können
 Startzustand q befindet sich immer in Q (Wort kann an
jeder Stelle im Text anfangen)
 f Endzustand
Matching von regulären Ausdrücken

Simulation:
Erstelle nfa
Q=E({q})
Wenn f ∈ Q dann Wort des RA gefunden
For i=1 to n do
1.
2.
3.
4.
1.
2.
5.
Q=E({A(Q,t[i])} ∪{q})
Wenn f ∈ Q dann Wort des RA gefunden
Sonst: Wort nicht gefunden
Matching von regulären Ausdrücken



Laufzeit Simulation: O(n*m) n=|t| m=|R|
Beweisansatz: Die Konstruktion des nfa benötigt
O(m) Schritte. Die For Schleife der Simulation wird n
mal durchlaufen, das Update der Zustandsmenge Q
benötigt in jedem Durchlauf O(m) Schritte
Laufzeitverbesserung durch Umwandeln des nfa in
dfa möglich. Problem: Die Anzahl der Zustände
eines dfa ist exponentiell zur Anzahl der Zustände
eines nfa. In Spezialfällen kann sich eine
Umwandlung lohnen
Zusammenfassung

Aho-Corasick Automat:
 Exaktes
Suchen von mehreren Suchworten
 Exaktes Suchen mit Wildcards
 Exaktes 2D-Pattern Matching
 Laufzeit O(m+n)

Matching von Regulären Ausdrücken mit nfa in
O(m*n)
Abschlussbemerkung

t=„deutschland wird weltmeister“
∈
q
w
z
1
∈
t
i
e
l
2
m
3
s
e
4
t
r
f
Danke für ihre Aufmerksamkeit
52
Quellen

M. Crochemore, W. Rytter: „Jewels of Stringology“

Dan Gusfield: „Algorithms on Strings, Trees and Sequenes“

Peter Weiner: “Linear Pattern Matching Algorithms“



http://www.cs.uni-paderborn.de/fileadmin/Informatik/FG-TI/GA09/GA7Strings.pdf
http://www.cs.uku.fi/~kilpelai/BSA05/lectures/slides04.pdf
http://www14.informatik.tu-muenchen.de/lehre/2009SS/cb/slides/CB1-2009-0428.pd

http://theo.cs.uni-magdeburg.de/lehre06w/textalg/beispiele/beispiel-ac.pdf

http://www.codeproject.com/KB/recipes/ahocorasick.aspx
Aho-Corasick Automat



Induktionsanfang: Für Knoten v mit Abstand 1 setze
den Fehler-Link auf die Wurzel fail(v)=init
Induktionsannahme: Die Fehlerlinks für Knoten mit
Abstand ≤k zur Wurzel init sind bekannt
Induktionsschritt: Sei v ein Knoten mit Abstand k+1
zur Wurzel. Gesucht: fail(v)
Aho-Corasick Automat



Es existiert genau ein Vorgänger von v und eine
Markierung x der Kante (Vater(v),v)
Der Vorgänger von v hat Abstand k von der Wurzel
wir kennen seinen Fehler-Link
L(Fail(v)) muss ein Suffix von L(Fail(Vater(v)))*x sein
Besitzt der Knoten Fail(Vater(v)) eine ausgehende Kante mit
Zeichen x zu einem Knoten w, dann setzen wir Fail(v)=w
 Wenn am Knoten Fail(Vater(v)) keine ausgehende Kante mit
Zeichen x existiert, dann kennen wir Fail(Fail(Vater(v))) …

zurück