+ All Categories
Home > Documents > Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur...

Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur...

Date post: 23-Mar-2021
Category:
Upload: others
View: 1 times
Download: 0 times
Share this document with a friend
45
Algorithmen und Datenstrukturen D1. Sortieren und Suchen in Strings Gabi R¨ oger und Marcel L¨ uthi Universit¨ at Basel 20. Mai 2020 M. L¨ uthi (Universit¨ at Basel) Algorithmen und Datenstrukturen 20. Mai 2020 1 / 45
Transcript
Page 1: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

Algorithmen und DatenstrukturenD1. Sortieren und Suchen in Strings

Gabi Roger und Marcel Luthi

Universitat Basel

20. Mai 2020

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 1 / 45

Page 2: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

Algorithmen und Datenstrukturen20. Mai 2020 — D1. Sortieren und Suchen in Strings

D1.1 Strings

D1.2 LSD-Sortierverfahren

D1.3 Quicksort

D1.4 Tries

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 2 / 45

Page 3: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

String algorithmen oder generische Algorithmen?

I Alle Algorithmen zum Sortieren / Suchen wurden uberbeliebige Schlussel definiert.I Konnen direkt auf Strings angewendet werden.

I Preis der Abstraktion / Allgemeinheit: Vorhandene Strukturder Schlussel wird nicht ausgenutzt.

Frage

Konnen wir Eigenschaften von Strings ausnutzen um nocheffizientere Algorithmen zu entwickeln?

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 3 / 45

Page 4: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

Sortieralgorithmen

Algorithmus Laufzeit O(·) Speicherbedarf O(·) stabilbest/avg./worst best/avg./worst

Selectionsort n2 1 neinInsertionsort n/n2/n2 1 jaMergesort n log n n jaQuicksort n log n/n log n/n2 log n/log n/n neinHeapsort n log n 1 nein

O(n log n) ist beweisbar der lower bound fur allgemeine,vergleichsbasierte Sortierverfahren. Geht es besser mit Strings?

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 4 / 45

Page 5: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

Heutiges Programm

I Motivation

I Abstraktion: Alphabet

I LSD Sortierverfahren

I Quicksort fur Strings

I Tries

Repetition und Erweiterung bereits bekannter Konzepte

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 5 / 45

Page 6: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Strings

D1.1 Strings

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 6 / 45

Page 7: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Strings

Strings als fundamentale Abstraktion

Strings / Text ist in vielen Bereichen grundlegende Reprasentationvon Informationen

I Programmcode

I Datenreprasentation im Web (HTML / Json / CSS )

I Kommunikation (E-Mail, Textmessages)

I Gensequenzen

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 7 / 45

Page 8: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Strings

Strings

String

Endliche Folge von Zeichen (Character)

I Strings sind unveranderlich (immutable). Einmal erzeugtkonnen Strings nicht mehr verandert werden.I Ideale Schlussel fur Symboltabellen

I Intern haufig als Array von Zeichen implementiert.

0 1 2 3 4 5 6 7 8 9 10 11

A T T A C K A T D A W N

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 8 / 45

Page 9: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Strings

Characters

Fruher:

I 7 Bit Zeichensatz (ASCII)

I 8 Bit Zeichensatz (extended ASCII)

Heute:

I 8 oder 16 bit Unicode Zeichensatz (UTF-8, UTF-16)

Unterschied Java / Python

I Java Character entspricht 16 bit Unicode Zeichen (UTF-16)

I Python kennt keinen Charactertyp. Ausdruck s[i] ist (UTF-8)String der Lange 1.

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 9 / 45

Page 10: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Strings

Abstraktion: Alphabet

I Unicode umfasst 1’112’064 Zeichen.

I Kleineres Alphabet reicht fur viele Anwendungen aus

Name Radix (R) Bits (log2(R)) ZeichenBINARY 2 1 0 1DNA 4 2 A C G TLOWERCASE 26 5 a - zUPPERCASE 26 5 A-ZASCII 128 7 ASCII CharactersEXTENDED ASCII 256 8 EXTENDED ASCIIUNICODE 1’114’112 21 UNICODE

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 10 / 45

Page 11: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Strings

Alphabet

Abstraktion Alphabet erlaubt uns Code unabhangig vom benutztenAlphabet zu schreiben.

class Alphabet:

def __init__(s : List[char])

def toChar(index : Int) -> char

def toIndex(c : Char) -> int

def contains(c : Char) -> boolean

def radix() -> int

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 11 / 45

Page 12: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings LSD-Sortierverfahren

D1.2 LSD-Sortierverfahren

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 12 / 45

Page 13: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings LSD-Sortierverfahren

LSD-Sortierverfahren (1 Zeichen)

I Input: Array a, Output: Sortiertes array aux

N = len(a) # Anzahl zu sortierender Zeichen

count = [0] * (alphabet.radix () + 1)

aux = [None] * N

# Zeichen zaehlen

for i in range(0, N):

indexOfchar = alphabet.toIndex(a[i])

count[indexOfchar + 1] += 1

# Kummulative Summe

for r in range(0, alphabet.radix ()):

count[r+1] += count[r]

# Verteilen

for i in range(0, N):

indexOfchar = alphabet.toIndex(a[i])

countForChar = count[indexOfchar]

aux[countForChar] = a[i]

count[indexOfchar] += 1

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 13 / 45

Page 14: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings LSD-Sortierverfahren

LSD-Sortierverfahren (1 Zeichen)

N = len(a) # Anzahl zu sortierender Zeichen in array a

count = [0] * (alphabet.radix () + 1)

# Zeichen Zaehlen

for i in range(0, N):

indexOfchar = alphabet.toIndex(a[i])

count[indexOfchar + 1] += 1

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 14 / 45

Page 15: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings LSD-Sortierverfahren

LSD-Sortierverfahren (1 Zeichen)

# Kummulative Summe

for r in range(0, alphabet.radix ()):

count[r+1] += count[r]

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 15 / 45

Page 16: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings LSD-Sortierverfahren

LSD-Sortierverfahren (1 Zeichen)

# Verteilen

for i in range(0, N):

indexOfchar = alphabet.toIndex(a[i])

countForChar = count[indexOfchar]

aux[countForChar] = a[i]

count[indexOfchar] += 1

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 16 / 45

Page 17: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings LSD-Sortierverfahren

LSD-Sortierverfahren (1 Zeichen)

I Verfahren ist stabil

I Zeitaufwand: Proportional zu N + R, wobei R Grosse desAlphabets ist

I Speicher: Proportional zu N + R (aux-Array und count Array)

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 17 / 45

Page 18: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings LSD-Sortierverfahren

LSD-Sortierverfahren

I Sortiere jedes Zeichen einzelnbeginnend mit letztem (least significant digit)

I Funktioniert, da Sortierung stabil ist

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 18 / 45

Page 19: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings LSD-Sortierverfahren

LSD-Sortierverfahren

N = len(a); aux = [None] * N ; d = numDigits - 1

while d >= 0:

count = [0] * (alphabet.radix () + 1)

for i in range(0, N):

indexOfcharAtPosdInA = alphabet.toIndex(a[i][d])

count[indexOfcharAtPosdInA + 1] += 1

for r in range(0, alphabet.radix ()):

count[r+1] += count[r]

for i in range(0, N):

indexOfCharAtPosdInA = alphabet.toIndex(a[i][d])

countForChar = count[indexOfCharAtPosdInA]

aux[countForChar] = a[i]

count[indexOfCharAtPosdInA] += 1

for i in range(0, N):

a[i] = aux[i]

d -= 1

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 19 / 45

Page 20: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Quicksort

D1.3 Quicksort

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 20 / 45

Page 21: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Quicksort

Erinnerung: Quicksort

I Wahle Pivot Element

I Partitioniere Array

I Rekursion auf linkes und rechtes Teilarray

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 21 / 45

Page 22: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Quicksort

Quicksort: Gleiche Schlussel

I Was passiert bei vielen gleichen Schlusseln?

I Unnotige Partitionierung von gleichen Schlusseln.

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 22 / 45

Page 23: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Quicksort

3-Wege Quicksort

I Gleiche Schlussel sind bereits sortiert.I Kein rekursiver Aufruf mehr notig.

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 23 / 45

Page 24: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Quicksort

Quicksort fur Strings

I 3-Wege Quicksort perBuchstabe

I Bei gleichenAnfangsbuchstaben,vergleiche nachstenBuchstaben.

Quelle: Sedgewick & Wayne,Algorithmen, Abbildung 5.16

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 24 / 45

Page 25: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Quicksort

Quicksort fur Strings

Quelle: Sedgewick & Wayne, Algorithmen, Abbildung 5.18

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 25 / 45

Page 26: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Quicksort

Laufzeit

TheoremUm ein Array von N zufalligen Strings zu sortieren, benotigt der3-Weg-Quicksort fur Strings im Durchschnitt ∼ 2NlnNZeichenvergleiche.

I Gleiche Anzahl Vergleiche wie standard (3-Wege) Quicksort

I Aber: Wir haben Zeichenvergleiche und nichtSchlusselvergleiche

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 26 / 45

Page 27: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Quicksort

Implementation

Jupyter Notebooks: Stringsort.ipynb

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 27 / 45

Page 28: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Tries

D1.4 Tries

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 28 / 45

Page 29: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Tries

Erinnerung: Symboltabellen

Abstraktion fur Schlussel/Werte Paar

Grundlegende Operationen

I Speichere Schlussel mit dazugehorendem Wert.

I Suche zu Schlussel gehorenden Wert.

I Schlussel und Wert loschen.

Typische Beispiele

I DNS - Suche IP-Adresse zu Domainnamen

I Telefonbuch - Suche Telefonnummer zu Person / Adresse

I Worterbuch - Suche Ubersetzungen fur Wort

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 29 / 45

Page 30: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Tries

Ubersicht

Worst-case Average-caseImplementation suchen einfugen suchen (hit) einfugenRot-Schwarz Baume 2 log2(N) 2 log2(N) 1 log2(N) 1 log2(N)Hashtabellen N N 1 1

I Frage: Geht es noch schneller?

I Antwort: Ja, wenn wir nicht ganzen String vergleichen mussen.

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 30 / 45

Page 31: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Tries

Symboltabelle fur Strings

class StringST[Value]:

def StringST ()

def put(key : String , value : Value) -> None

def get(key : String) -> Value

def delete(key : String) -> None

def keys() -> Iterator[String]

Normale Symboltabellen Operationen, aber mit fixem Typ Stringals Schlussel

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 31 / 45

Page 32: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Tries

Symboltabelle fur Strings

class StringST[Value]:

def StringST ()

def put(key : String , value : Value) -> None

def get(key : String) -> Value

def delete(key : String) -> None

def keys() -> Iterator[String]

def keysWithPrefix(s : String) -> Iterator[String]

def keysThatMatch(s : String) -> Iterator[String]

def longestPrefixOf(s : String) -> String

Mittels Tries lassen sich viele nutzliche, zeichenbasierteSuchoperationen definieren.

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 32 / 45

Page 33: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Tries

Tries

Trie Von Retrieval.I Ausgesprochen wie try

I Zeichen (nicht Schlusselwerden in Knotengespeichert)

I Jeder Knoten hat R Knoten(also einen pro moglichemZeichen)

Quelle: Sedgewick & Wayne, Algorithmen, Abbildung5.19

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 33 / 45

Page 34: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Tries

Reprasentation der Knoten

Quelle: Sedgewick & Wayne, Algorithmen, Abbildung 5.21

class Node:

value = None

children = [None] * alphabet.radix()

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 34 / 45

Page 35: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Tries

Suche in Trie

Dem Zeichenentsprechenden Linkfolgen

I Erfolgreiche Suche:Endet an Knoten mitdefiniertem Wert

I Erfolglose Suche:Endet an Knoten mitundefiniertem Wert(null)

Quelle: Sedgewick & Wayne, Algorithmen, Abbildung 5.20

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 35 / 45

Page 36: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Tries

Suche in Tries

def get(key):

node = get_rec(root , key , 0)

if (node == None):

return None

else:

return node.value

def get_rec(node , key , d):

if (node == None):

return None

if d == len(key):

return node

c = alphabet.toIndex(key[d])

return get_rec(node.children[c], key , d + 1)

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 36 / 45

Page 37: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Tries

Einfugen in Trie

Dem Zeichenentsprechenden Linkfolgen

I Erfolgreiche Suche:Wert neu setzten

I Erfolglose Suche:Neuen Knotenerzeugen.

Quelle: Sedgewick & Wayne, Algorithmen, Abbildung 5.22

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 37 / 45

Page 38: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Tries

Einfugen in Trie

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

if node == None:

node = Node(alphabet.radix ())

if d == len(key):

node.value = value

return node

c = alphabet.toIndex(key[d])

node.children[c] = put(node.children[c], key , value , d + 1)

return node

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 38 / 45

Page 39: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Tries

Loschen von Schlusseln

I Schlussel finden und Knoten loschen.

I Rekursiv alle Knoten mit nur null-Werten und null-linksloschen

Quelle: Sedgewick & Wayne, Algorithmen, Abbildung 5.26

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 39 / 45

Page 40: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Tries

Loschen von Schlusseln

def delete(node , key , d):

if node == None:

return None

if d == len(key):

node.value = None

else:

c = alphabet.toIndex(key[d])

node.children[c] = delete(node.children[c], key , d + 1)

if node.value != None:

return node

nonNullChildren = [c for c in node.children if c != None]

if len(nonNullChildren) > 0:

return node

else:

return None

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 40 / 45

Page 41: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Tries

Implementation und Beispielanwendung

Jupyter Notebook: Tries.ipynb

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 41 / 45

Page 42: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Tries

Analyse: Form des Tries

Theorem

Die verkettete Struktur (Form) eines Trie ist nicht abhangig vonder Schlusselreihenfolge beim Loschen/Einfugen: Fur jedegegebene Menge von Schlusseln gibt es einen eindeutigen Trie.

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 42 / 45

Page 43: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Tries

Analyse: Einfugen

TheoremDie Anzahl der Arrayzugriffe beim Suchen in einem Trie oder beimEinfugen eines Schlussels in einen Trie ist hochstens 1 plus derLange des Schlussels.

TheoremDie durchschnittliche Anzahl der untersuchten Knoten bei einererfolglosen Suche in einem Trie, der aus N Zufallsschlusseln ubereinem Alphabet der Grosse R erstellt wird, betragt ∼ logR(N).

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 43 / 45

Page 44: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Tries

Tries: Take-Home Message

Auch in riesigen Datenmengen konnen wir mit wenigen Vergleichenjeden Wert finden.

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 44 / 45

Page 45: Algorithmen und Datenstrukturen - Sortieren und Suchen in ... · I Kleineres Alphabet reicht f ur viele Anwendungen aus Name Radix (R) Bits (log 2(R)) Zeichen BINARY 2 1 0 1 DNA 4

D1. Sortieren und Suchen in Strings Tries

Zusammenfassung

I String-Algorithmen nutzen Struktur von Strings ausI Vorteil: Erlaubt Implementation von schnelleren AlgorithmenI Nachteil: Algorithmen nur fur Schlussel mit Typ String

anwendbar.

I Strategie und Konzepte von bestehenden Algorithmen wurdeubernommen.

I LSD-Sort: Radixsort angewendet auf Zeichen

I Quicksort fur Strings: Macht Vergleich fur jedes Zeichen

I Tries: Suchbaum der durch Zeichen indiziert ist

M. Luthi (Universitat Basel) Algorithmen und Datenstrukturen 20. Mai 2020 45 / 45


Recommended