• Keine Ergebnisse gefunden

D2. Suche in Strings 1

N/A
N/A
Protected

Academic year: 2022

Aktie "D2. Suche in Strings 1"

Copied!
9
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Algorithmen und Datenstrukturen

D2. Suche in Strings 1

Marcel L¨ uthi

Universit¨ at Basel

22. Mai 2019

1Folien angelehnt an Vorlesungsfolien von Sedgewick & Wayne https://algs4.cs.princeton.edu/lectures/52Tries-2x2.pdf

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 1 / 36

Algorithmen und Datenstrukturen

22. Mai 2019 — D2. Suche in Strings

a

aFolien angelehnt an Vorlesungsfolien von Sedgewick & Wayne https://algs4.cs.princeton.edu/lectures/52Tries-2x2.pdf

D2.1 Einf¨ uhrung D2.2 Tries

D2.3 Zeichenbasierte Operationen

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 2 / 36

D2. Suche in Strings2 Einf¨uhrung

D2.1 Einf¨ uhrung

D2. Suche in Strings3 Einf¨uhrung

Erinnerung: Symboltabellen

Abstraktion f¨ ur Schl¨ ussel/Werte Paar Grundlegende Operationen

I Speichere Schl¨ ussel mit dazugeh¨ orendem Wert.

I Suche zu Schl¨ ussel geh¨ orenden Wert.

I Schl¨ ussel und Wert l¨ oschen.

Typische Beispiele

I DNS - Suche IP-Adresse zu Domainnamen

I Telefonbuch - Suche Telefonnummer zu Person / Adresse

I W¨ orterbuch - Suche ¨ Ubersetzungen f¨ ur Wort

(2)

Ubersicht ¨

Worst-case Average-case Implementation suchen einf¨ ugen suchen (hit) einf¨ ugen Rot-Schwarz B¨ aume 2 log

2

(N) 2 log

2

(N) 1 log

2

(N) 1 log

2

(N)

Hashtabellen N N 1 1

I Frage: Geht es noch schneller?

I Antwort: Ja, wenn wir nicht ganzen String vergleichen m¨ ussen.

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 5 / 36

Symboltabelle f¨ ur Strings

c l a s s S t r i n g S T [ V a l u e ]:

def S t r i n g S T ()

def put ( key : String , v a l u e : V a l u e ) - > N o n e def get ( key : S t r i n g ) - > V a l u e

def d e l e t e ( key : S t r i n g ) - > N o n e def k e y s () - > I t e r a t o r [ S t r i n g ]

Normale Symboltabellen Operationen, aber mit fixem Typ String als Schl¨ ussel

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 6 / 36

D2. Suche in Strings6 Einf¨uhrung

Symboltabelle f¨ ur Strings

c l a s s S t r i n g S T [ V a l u e ]:

def S t r i n g S T ()

def put ( key : String , v a l u e : V a l u e ) - > N o n e def get ( key : S t r i n g ) - > V a l u e

def d e l e t e ( key : S t r i n g ) - > N o n e def k e y s () - > I t e r a t o r [ S t r i n g ]

def k e y s W i t h P r e f i x ( s : S t r i n g ) - > I t e r a t o r [ S t r i n g ] def k e y s T h a t M a t c h ( s : S t r i n g ) - > I t e r a t o r [ S t r i n g ] def l o n g e s t P r e f i x O f ( s : S t r i n g ) - > S t r i n g

Mittels Tries lassen sich viele n¨ utzliche, zeichenbasierte Suchoperationen definieren.

D2. Suche in Strings7 Tries

D2.2 Tries

(3)

D2. Suche in Strings8 Tries

Tries

Trie Von Retrieval.

I Ausgesprochen wie try

I Zeichen (nicht Schl¨ ussel werden in Knoten gespeichert)

I Jeder Knoten hat R Knoten (also einen pro m¨ oglichem Zeichen)

Quelle: Sedgewick & Wayne, Algorithmen, Abbildung 5.19

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 9 / 36

D2. Suche in Strings9 Tries

Erinnerung: Alphabet

Abstraktion Alphabet macht Code unabh¨ angig von Alphabet.

c l a s s A l p h a b e t :

def _ _ i n i t _ _ ( s : L i s t [ c h a r ]) def t o C h a r ( i n d e x : Int ) - > c h a r def t o I n d e x ( c : C h a r ) - > int def c o n t a i n s ( c : C h a r ) - > b o o l e a n def R () - > int # R a d i x

Name Radix (R) Bits (log

2

(R)) Zeichen

BINARY 2 1 0 1

DNA 4 2 A C G T

ASCII 128 7 ASCII Characters

EXTENDED ASCII 256 8 EXTENDED ASCII

UNICODE 1’114’112 21 UNICODE

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 10 / 36

D2. Suche in Strings10 Tries

Repr¨ asentation der Knoten

Quelle: Sedgewick & Wayne, Algorithmen, Abbildung 5.21

c l a s s N o d e : v a l u e = N o n e

c h i l d r e n = [ N o n e ] * R # R : R a d i x v o n A l p h a b e t

D2. Suche in Strings11 Tries

Suche in Trie

Dem Zeichen entsprechenden Link folgen

I Erfolgreiche Suche:

Endet an Knoten mit definiertem Wert I Erfolglose Suche:

Endet an Knoten mit undefiniertem Wert (null)

Quelle: Sedgewick & Wayne, Algorithmen, Abbildung 5.20

(4)

Suche in Tries

def get ( node , key , d ):

if ( n o d e == N o n e ):

r e t u r n N o n e if d == len( key ):

r e t u r n n o d e

c = a l p h a b e t . t o I n d e x ( key [ d ])

r e t u r n get ( n o d e . c h i l d r e n [ c ] , key , d + 1)

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 13 / 36

Einf¨ ugen in Trie

Dem Zeichen entsprechenden Link folgen

I Erfolgreiche Suche:

Wert neu setzten I Erfolglose Suche:

Neuen Knoten erzeugen.

Quelle: Sedgewick & Wayne, Algorithmen, Abbildung 5.22

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 14 / 36

D2. Suche in Strings14 Tries

Einf¨ ugen in Trie

def put ( node , key , value , d ):

if n o d e == N o n e :

n o d e = N o d e ( a l p h a b e t . r a d i x ()) if d == len( key ):

n o d e . v a l u e = v a l u e r e t u r n n o d e

c = a l p h a b e t . t o I n d e x ( key [ d ])

n o d e . c h i l d r e n [ c ] = put ( n o d e . c h i l d r e n [ c ] , key , value , d + 1) r e t u r n n o d e

D2. Suche in Strings15 Tries

L¨ oschen von Schl¨ usseln

I Schl¨ ussel finden und Knoten l¨ oschen.

I Rekursiv alle Knoten mit nur null-Werten und null-links l¨ oschen

Quelle: Sedgewick & Wayne, Algorithmen, Abbildung 5.26

(5)

D2. Suche in Strings16 Tries

L¨ oschen von Schl¨ usseln

def d e l e t e ( node , key , d ):

if n o d e == N o n e : r e t u r n N o n e if d == len( key ):

n o d e . v a l u e = N o n e e l s e:

c = a l p h a b e t . t o I n d e x ( key [ d ])

n o d e . c h i l d r e n [ c ] = d e l e t e ( n o d e . c h i l d r e n [ c ] , key , d + 1) if n o d e . v a l u e != N o n e :

r e t u r n n o d e

n o n N u l l C h i l d r e n = [ c for c in n o d e . c h i l d r e n if c != N o n e ] if len ( n o n N u l l C h i l d r e n ) > 0:

r e t u r n n o d e e l s e:

r e t u r n N o n e

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 17 / 36

D2. Suche in Strings17 Tries

Implementation und Beispielanwendung

Jupyter Notebook: Tries.ipynb

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 18 / 36

D2. Suche in Strings18 Tries

Analyse: Form des Tries

Theorem

Die verkettete Struktur (Form) eines Trie ist nicht abh¨ angig von der Schl¨ usselreihenfolge beim L¨ oschen/Einf¨ ugen: F¨ ur jede gegebene Menge von Schl¨ usseln gibt es einen eindeutigen Trie.

D2. Suche in Strings19 Tries

Analyse: Einf¨ ugen

Theorem

Die Anzahl der Arrayzugriffe beim Suchen in einem Trie oder beim Einf¨ ugen eines Schl¨ ussels in einen Trie ist h¨ ochstens 1 plus der L¨ ange des Schl¨ ussels.

Theorem

Die durchschnittliche Anzahl der untersuchten Knoten bei einer

erfolglosen Suche in einem Trie, der aus N Zufallsschl¨ usseln ¨ uber

einem Alphabet der Gr¨ osse R erstellt wird, betr¨ agt ∼ log R (N ).

(6)

Take-Home Message

Auch in riesigen Datenmengen k¨ onnen wir mit wenigen Vergleichen jeden Wert finden.

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 21 / 36

Speichereffiziente Variante: Tern¨ are Suchtries

Ein Problem mit Tries

I In jedem Knoten wird ein Array der Gr¨ osse R gespeichert I Beispiel Unicode (utf-16): R = 2 16 = 65536.

L¨ osung:

I Speichere Zeichen c sowie Wert im Knoten I Jeder Knoten hat 3 Kinder:

I Kleiner c (linker Teilbaum) I Gleich c (mittlerer Teilbaum) I Gr¨ osser c (rechter Teilbaum)

Bentley, Jon L., and Robert Sedgewick. ”Fast algorithms for sorting and searching strings.”1997.

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 22 / 36

D2. Suche in Strings22 Tries

Speichereffiziente Variante: Tern¨ are Suchtries

Beispiel:

Quelle: Sedgewick & Wayne, Algorithmen, Abbildung 5.28

I Bei ¨ Ubereinstimmung wird Suche mit n¨ achstem Zeichen im mittleren Teilbaum weitergef¨ uhrt.

I Suche ist erfolgreich, wenn Wert in Endknoten der Suche

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 23 / 36

D2. Suche in Strings23 Tries

Tries versus Hashing

Hashing:

I Muss ganzen Schl¨ ussel anschauen

I Etwa gleiche Kosten f¨ ur erfolgreiche und erfolglose Suche I Performance h¨ angt von Hashfuktion ab

I Keine ordnungsbasierten Operationen Tries:

I Nur f¨ ur Strings geeignet

I Macht nur so viele Vergleiche wie gerade ben¨ otigt werden I Erfolglose Suche ben¨ otigt nur ein paar Zeichenvergleichen I Flexible zeichenbasierte Operationen werden unterst¨ utzt

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 24 / 36

(7)

D2. Suche in Strings24 Zeichenbasierte Operationen

D2.3 Zeichenbasierte Operationen

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 25 / 36

D2. Suche in Strings25 Zeichenbasierte Operationen

Zeichenbasierte Operationen

Schl¨ ussel Wert

by 4

sea 6

sells 1

she 0

shells 3

shore 7

the 5

Pr¨ afix matching Pr¨ afix: sh: Schl¨ ussel, she, shells, shore

Wildcard matching .he: Schl¨ ussel, she, the L¨ angstes Pr¨ afix Anfrage: shellsort

Schl¨ ussel: shells

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 26 / 36

D2. Suche in Strings26 Zeichenbasierte Operationen

Pr¨ afix¨ ubereinstimmung

Beispielanwendung: Autocomplete

D2. Suche in Strings27 Zeichenbasierte Operationen

Zeichenbasierte Operationen

c l a s s S t r i n g S T : def S t r i n g S T ()

def put ( key : String , v a l u e : V a l u e ) - > N o n e def get ( key : S t r i n g ) - > V a l u e

def d e l e t e ( key : S t r i n g ) - > N o n e def k e y s () - > I t e r a t o r [ S t r i n g ]

def k e y s W i t h P r e f i x ( s : S t r i n g ) - > I t e r a t o r [ S t r i n g ]

def k e y s T h a t M a t c h ( s : S t r i n g ) - > I t e r a t o r [ S t r i n g ]

def l o n g e s t P r e f i x O f ( s : S t r i n g ) - > S t r i n g

(8)

Warmup: Alle Schl¨ ussel zur¨ uckgeben

I Traversieren des Baumes

I Bei jedem Knoten mit Wert 6= null, Schl¨ ussel merken

Quelle: Sedgewick & Wayne, Algorithmen, Abbildung 5.23

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 29 / 36

Pr¨ afix¨ ubereinstimmung

I Subtrie mit Pr¨ afix finden

I Alle Schl¨ ussel von diesem Subtrie zur¨ uckgeben

Quelle: Sedgewick & Wayne, Algorithmen, Abbildung 5.24

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 30 / 36

D2. Suche in Strings30 Zeichenbasierte Operationen

Pr¨ afix¨ ubereinstimmung

def k e y s ( n o d e ):

r e t u r n k e y s W i t h P r e f i x ( node , " " ) def k e y s W i t h P r e f i x ( node , r e f i x ):

q u e u e = []

c o l l e c t ( get ( node , prefix , 0) , prefix , q u e u e ) r e t u r n q u e u e

def c o l l e c t ( node , prefix , q u e u e ):

if n o d e == N o n e : r e t u r n

if n o d e . v a l u e != N o n e : q u e u e . a p p e n d ( p r e f i x )

l a b e l e d C h i l d r e n = [( a l p h a b e t . t o C h a r ( p ) , c h i l d )

for ( p , c h i l d ) in e n u m e r a t e( n o d e . c h i l d r e n ) if c h i l d != N o n e ]

for ( char , c h i l d ) in l a b e l e d C h i l d r e n : c o l l e c t ( child , p r e f i x + char , q u e u e )

D2. Suche in Strings31 Zeichenbasierte Operationen

L¨ angstes Pr¨ afix

I Beispielanwendung: Routing, LZW-Kompression

”128”

”128.112”

”128.112.055”

”128.112.055.15”

”128.112.136”

”128.112.155.11”

”128.112.155.13”

”128.222”

”128.222.136”

Anfrage:

longestPrefixOf(”128.112.136.11”) = ”128.112.136”

longestPrefixOf(”128.112.100.16”) = ”128.112”

longestPrefixOf(”128.166.123.45”) = ”128”

(9)

D2. Suche in Strings32 Zeichenbasierte Operationen

L¨ angstes Pr¨ afix

I Nach Anfragestring suchen

I L¨ angster Schl¨ ussel auf dem Weg dahin speichern.

Quelle: Sedgewick & Wayne, Algorithmen, Abbildung 5.25

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 33 / 36

D2. Suche in Strings33 Zeichenbasierte Operationen

L¨ angstes Pr¨ afix

def l o n g e s t P r e f i x O f ( node , s ):

l = s e a r c h ( node , s , 0 , 0) r e t u r n s [0: l ]

def s e a r c h ( node , s , d , l e n g t h ):

if n o d e == N o n e : r e t u r n l e n g t h if n o d e . v a l u e != N o n e :

l e n g t h = d if d == len ( s ):

r e t u r n l e n g t h

c = a l p h a b e t . t o I n d e x ( s [ d ])

r e t u r n s e a r c h ( n o d e . c h i l d r e n [ c ] , s , d +1 , l e n g t h )

M. L¨uthi (Universit¨at Basel) Algorithmen und Datenstrukturen 22. Mai 2019 34 / 36

D2. Suche in Strings34 Zeichenbasierte Operationen

Quiz: Wildcard matching

I Wie implementieren wir Wildcard matching?

Quelle: Sedgewick & Wayne, Algorithmen, Abbildung 5.28

D2. Suche in Strings35 Zeichenbasierte Operationen

Zusammenfassung Symboltabellen

Wir haben viele sehr effiziente Implementation zur Auswahl.

Rot-Schwarz B¨ aume

I Garantie: log (N ) Schl¨ usselvergleiche I Ordnungsbasierte Operationen Hashtabellen

I Durchschnittliche Komplexit¨ at Suche, Einf¨ ugen O(1) I Ben¨ otigt gute Hashfunktion

Tries

I Garantie: Komplexit¨ at um String der L¨ ange N zu suchen:

log (N )

I M¨ achtige zeichenbasierte Operationen

Referenzen

ÄHNLICHE DOKUMENTE

Die Anzahl der Arrayzugriffe beim Suchen in einem Trie oder beim Einf¨ ugen eines Schl¨ ussels in einen Trie ist h¨ ochstens 1 plus der L¨ ange des Schl¨

• Komplexit ¨atstheoretische Sicherheit, wenn pseudo-zuf ¨allige Folge nicht von einer echt zuf ¨alligen Folge effizient unterschieden werden kann..

• Integrit ¨at Problem bei Verschl ¨usselung von nicht redundanten Daten (komprimierte Dateien, geheime Schl ¨ussel).. Idee: Geeignete kryptographische Pr

Wie man sieht, traut man seinem eigenen Schl ¨ussel ultimativ (dies sollten auch die einzigen Schl ¨ussel sein, denen man ultimativ traut, da man ihnen selbst nach Ablauf

• Komplexit ¨atstheoretische Sicherheit, wenn pseudo-zuf ¨allige Folge nicht von einer echt zuf ¨alligen Folge effizient unterschieden werden kann.. Aber: Niemals gleichen

Da public-key Verschl ¨usselung gestattet, dem Gespr ¨achspartner verschl ¨usselte Nachrichten zukommen zu lassen, ohne ihn je vorher getroffen zu haben, muß gew ¨ahrleistet sein,

Für das Aufstellen einer Stahlhalle benötigen 5 Metallbauer 16 Tage?. Wie lange würden 4 Metallbauer für die gleiche Arbeit

Damit ist die Erstellung des ¨ offentlichen Schl¨ ussels (n, e) abgeschlossen.. Privater