78
Algorithmen und Datenstrukturen (f¨ ur ET/IT) Sommersemester 2015 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universit¨ at M¨ unchen

Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Algorithmen und Datenstrukturen (fur ET/IT)Sommersemester 2015

Dr. Tobias Lasser

Computer Aided Medical ProceduresTechnische Universitat Munchen

Page 2: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Programm heute

7 Fortgeschrittene Datenstrukturen

8 Such-AlgorithmenLineare SucheBinare SucheBinare SuchbaumeBalancierte SuchbaumeSuchen mit HashtabellenSuchen in Zeichenketten

2

Page 3: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Suchen

Such-Algorithmen

Gegeben sei eine Menge M von Objekten. Ein Such-Algorithmussucht in M nach Mustern oder nach Objekten mit bestimmtenEigenschaften.

Beispiele:

• Suche von Adresse von Person in Telefonbuch

• Suche nach Webseite mit Google Search

• Suche nach Produkt auf Amazon

• Suche nach ahnlichen Mustern: Viren-Scanner

• Suche nach Mustern: Bilderkennung

• Suche nach Tumoren in medizinischen Bildern von Patienten

3

Page 4: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Lineare Suche

Gegeben sei Array A der Lange n, das Such-Schlussel enthalt.

• einfachster Such-Algorithmus: Durchlaufen des Feldes A bisgewunschter Schlussel gefunden

• auch genannt: Lineare Suche

• Algorithmus:

Input: Array A[1..n] mit Schlusseln, k gesuchter SchlusselOutput: Index i mit A[i] = k (sonst 0)linearSearch(A, k):

i = 1;while ( (A[i] != k) && (i ≤ n) ) {

i = i + 1;}if (i ≤ n) return i; // fundig gewordenelse return 0; // nichts gefunden

• auch anwendbar fur verkettete Listen

4

Page 5: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Lineare Suche: Komplexitat

5 7 9 11 23

Laufzeit T (n) von linearSearch:

• best-case: sofort gefunden, T(n) = 1, d.h. T (n) = O(1)

• worst-case: alles durchsuchen, T(n) = n, d.h. T (n) = O(n)

• im Mittel: Annahme jede Anordnung der Such-Schlussel istgleich wahrscheinlich:

T (n) =1

n

n∑i=1

i =n + 1

2

d.h. T (n) = O(n)

• einfacher Algorithmus, aber nicht besonders effizient

5

Page 6: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Programm heute

7 Fortgeschrittene Datenstrukturen

8 Such-AlgorithmenLineare SucheBinare SucheBinare SuchbaumeBalancierte SuchbaumeSuchen mit HashtabellenSuchen in Zeichenketten

6

Page 7: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Binare Suche

2 3 7 9 115

Gegeben sei Array A der Lange n, das Such-Schlussel enthalt.

• falls haufiger gesucht wird: Array A vorsortieren! O(n log n)

• Such-Algorithmus mittels Divide & ConquerAlgorithmen-Muster:• Divide: vergleiche mittleres Element mit gesuchtem• Rekursion: falls kleiner, Rekursion auf linker Halfte• Rekursion: falls grosser, Rekursion auf rechter Halfte• Conquer: falls gleich, liefere Ergebnis

7

Page 8: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Binare Suche: Algorithmus rekursiv

Input: Array A[1..n] sortierter Schlussel, k gesuchter Schlussellow, high: unterer/oberer Index von aktueller Array-Halfte

Output: Index i mit A[i] = k (sonst 0)binarySearch(A, k, low, high):

if (low > high) return 0; // nichts gefundenmiddle = b(low + high) / 2c;if (A[middle] == k) return middle; // fundig gewordenif (A[middle] > k)return binarySearch(A, k, low, middle-1);

elsereturn binarySearch(A, k, middle+1, high);

• erster Aufruf mit binarySearch(A, k, 1, n)

8

Page 9: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Binare Suche: Algorithmus iterativ

Input: Array A[1..n] sortierter Schlussel, k gesuchter SchlusselOutput: Index i mit A[i] = k (sonst 0)binarySearchIterative(A, k):

low = 1;high = n;while (low <= high) {

middle = b (low + high) / 2c;if (A[middle] == k) return middle; // fundig gewordenif (A[middle] > k)

high = middle - 1;else

low = middle + 1;}return 0; // nichts gefunden

9

Page 10: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Binare Suche: Beispiel

• Gesucht: Schlussel 12

8

1 3 4 6 12 14 15 17 20

1 2 3 4 5 6 7 8 9 10

8

middlelow high

1 3 4 1412 1715 20

middlelow high

6

81 3 4 1412 15

low high

6 17 20

10

Page 11: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Binare Suche: Komplexitat

• Komplexitat: O(log n)• errechnet z.B. via Rekursionsbaum wie bei MergeSort

• Beispiel-Laufzeiten:

Algorithmus n = 10 n = 1000 n = 106

Lineare Suche (n/2) ≈ 5 ≈ 500 ≈ 500.000

Binare Suche (log2 n) ≈ 3.3 ≈ 9.9 ≈ 19.9

• sehr effizienter Such-Algorithmus!

• falls sich Daten oft andern, muss jeweils neu sortiert werden• besser: Suchbaume

11

Page 12: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Programm heute

7 Fortgeschrittene Datenstrukturen

8 Such-AlgorithmenLineare SucheBinare SucheBinare SuchbaumeBalancierte SuchbaumeSuchen mit HashtabellenSuchen in Zeichenketten

12

Page 13: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Binarer Suchbaum

Definition binarer Suchbaum

Sei G = (V ,E ) ein Binarbaum mit Wurzel w ∈ V . Jeder Knotenv ∈ V sei mit einem Wert key(v) verknupft, die Werte seien durch≤, ≥ geordnet.G heißt binarer Suchbaum, falls fur alle inneren Knoten v ∈ V gilt

• fur alle Knoten x im linken Teilbaum v .left gilt

key(x) ≤ key(v)

• fur alle Knoten y im rechten Teilbaum v .right gilt

key(y) ≥ key(v)

13

Page 14: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Binarer Suchbaum: Beispiel

5

2 8

931

• binarer Baum muss nicht vollstandig sein!

• Reprasentation ublicherweise mit verketteter Liste(geht aber auch als sequentielle Liste)

14

Page 15: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Binarer Suchbaum: Operationen

Operationen auf binarem Suchbaum:

• Suchen: finde Element mit Schlussel k

• Minimum/Maximum: finde Element mit minimalem/maximalem Schlussel

• Einfugen: fuge Element zum Suchbaum hinzu

• Loschen: entferne Element aus Suchbaum

15

Page 16: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Binarer Suchbaum: Suchen (rekursiv)

Input: Knoten v , dessen Teilbaum untersucht werden soll,k gesuchter Schlussel

Output: Knoten mit gesuchtem Schlussel,null falls nicht gefunden

search(v, k):if (v == null) return null; // hier gibt es nichts!if (key(v) == k) return v ; // fundig geworden!if (k < key(v))search(v .left, k);

elsesearch(v .right, k);

• erster Aufruf mit search(w, k)

• falls v kein linkes/rechtes Kind hat, ist das durch null markiert

16

Page 17: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Binarer Suchbaum: Suchen (iterativ)

Input: Knoten v , dessen Teilbaum untersucht werden soll,k gesuchter Schlussel

Output: Knoten mit gesuchtem Schlussel,null falls nicht gefunden

searchIterative(v, k):while ( (v != null) && (key(v) != k) ) {if (k < key(v))v = v .left;

elsev = v .right;

}return v;

• Komplexitat: O(h), wobei h Hohe von Suchbaum

17

Page 18: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Binarer Suchbaum: Suchen

• Beispiel: suche Schlussel 3

5

2 8

931

18

Page 19: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Binarer Suchbaum: Minimum/Maximum

Input: Wurzel v des zu durchsuchenden BaumesOutput: Knoten mit minimalem Schlusselminimum(v):

while (v .left != null)v = v .left;

return v ;

Input: Wurzel v des zu durchsuchenden BaumesOutput: Knoten mit maximalem Schlusselmaximum(v):

while (v .right != null)v = v .right;

return v;

19

Page 20: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Binarer Suchbaum: Minimum/Maximum

5

2 8

931

min

5

2 8

931

max

• Komplexitat: O(h), wobei h Hohe von Suchbaum

20

Page 21: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Binarer Suchbaum: EinfugenInput: Wurzel v des Baumes, x einzufugendes Elementinsert(v , x):

if (v == null) { // Baum leerv = x ; return;}while (v != null) {hilfsKnoten = v ;if (key(x) < key(v))v = v .left;

elsev = v .right;

}x .vater = hilfsKnoten;if (key(x) < key(hilfsKnoten))

hilfsKnoten.left = x;elsehilfsKnoten.right = x;

21

Page 22: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Binarer Suchbaum: Einfugen

• Einfugen von Knoten mit Schlussel 7:

5

2 8

931

hilfsKnoten

hilfsKnoten

7

• Komplexitat: O(h), wobei h Hohe von Suchbaum

22

Page 23: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Binarer Suchbaum: Loschen

• Loschen von Knoten x in Suchbaum ist etwas komplizierter

• Drei Falle:

1 x ist Blatt: einfach entfernen

2 x hat nur ein Kind: setze Kind an Stelle von x

3 x hat zwei Kinder: setze minimales Element von rechtemTeilbaum an Stelle von x(alternativ: maximales Element von linkem Teilbaum)

• Komplexitat: O(h), wobei h Hohe von Suchbaum

23

Page 24: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Binarerer Suchbaum: Loschen

5

2 8

931

5

2 8

91

erase1. Fall:

5

2 8

931

2. Fall: erase5

2 9

31

5

2 8

931

erase3. Fall:8

2 9

31

24

Page 25: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Binarer Suchbaum: LoschenInput: Wurzel v des Baumes, x zu loschendes Elementerase(v , x):

if (x ist Blatt) { // 1. Fallif (x ist linkes Kind) x .vater .left = null;else x .vater .right = null;

} else { // 2. Fallif (x .left == null) {if (x ist linkes Kind) x .vater .left = x .right;else x .vater .right = x .right;} else {if (x .right == null) {

if (x ist linkes Kind) x .vater .left = x .left;else x .vater .right = x .left;

} else { // 3. Fallkind = minimum(x .right);ersetze x durch kind ;

}}

}25

Page 26: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Binarer Suchbaum: Effizienz

• Suchbaume mit n Knoten sind sehr effizient• aber nur wenn sie ausgeglichen (“balanciert”) sind!

• best-case Komplexitat: O(log n)

• worst-case Komplexitat: O(n)

5

2 8

931 7

ausgeglichen

1

2

3

5

7

8

9entartet

• Ausweg: automatisch balancierte Suchbaume(z.B. AVL Baume, Rot-Schwarz Baume, B-Baume)

26

Page 27: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Programm heute

7 Fortgeschrittene Datenstrukturen

8 Such-AlgorithmenLineare SucheBinare SucheBinare SuchbaumeBalancierte SuchbaumeSuchen mit HashtabellenSuchen in Zeichenketten

27

Page 28: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Entartete Suchbaume

5

2 8

931 7

ausgeglichen

1

2

3

5

7

8

9entartet

• Wie konnen Suchbaume entarten?• Beispiel: einfugen aus sortierter Liste

• Erwunscht: Suchbaume, die immer ausgeglichen (balanciert)bleiben→ AVL-Baume, Rot-Schwarz-Baume, B-Baume etc.

28

Page 29: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Beispiel: Balancieren von Suchbaum

5

3 7

642

5

3 7

642

insert(1)

1

balancieren4

2 6

531 7

• hier mussen zum Balancieren alle Knoten bewegt werden →Effizienz-Problem

29

Page 30: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Ansatze fur balancierte Suchbaume

• Binarbaum und gleichzeitig balanciert ist ineffizient

• Idee: Aufweichen eines der beiden Kriterien!

• Abschwachung des Kriteriums balanciert• Beispiel: AVL-Baume

• Abschwachung des Kriteriums Binarbaum• Mehrweg-Baume, Beispiel: B-Baume

• mehrere Verzweigungen kodiert als Binarbaum, Beispiel:Rot-Schwarz-Baume

30

Page 31: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Definition AVL-Baum

Definition AVL-Baum

Ein binarer Suchbaum G = (V ,E ) mit Wurzel w ∈ V heißtAVL-Baum, falls er die AVL-Bedingung erfullt:

• fur jeden inneren Knoten v ∈ V gilt: Hohe von linkem undrechtem Teilbaum von v unterscheidet sich maximal um 1.

• benannt nach G.M. Adelson-Velskii und E.M. Landis(russische Mathematiker)

• AVL-Bedingung nur fur Wurzel w ist nicht ausreichend• beide Teilbaume der Wurzel konnen entartet sein

31

Page 32: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

AVL-Baum: Beispiel

5

2 7

641

3

6

2 7

41

3 5

kein AVL-Baum!AVL-Baum

+1

-1

+1

+1

0

-1

+2

• linkes Beispiel: AVL-Bedingung uberall erfullt

• rechtes Beispiel: AVL-Bedingung in Wurzel verletzt

32

Page 33: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

AVL Baum: Operationen

• Operationen search, minimum, maximum unverandert vonbinarem Suchbaum

• Operationen insert, erase mussen verandert werden, damit dieAVL-Bedingung erhalten wird

33

Page 34: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

AVL-Baum: Einfugen

Einfuge-Operation bei AVL-Baum:

• insert wie in binarem Suchbaum

• nun kann AVL-Bedingung verletzt sein:• balance = height(left) - height(right)

• AVL-Bedingung: balance ∈ {−1, 0,+1}• nach insert: balance ∈ {−2,−1, 0, 1,+2}

• reparieren der AVL-Bedingung mittels Rotation undDoppelrotation

34

Page 35: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Einfugen / Verletzung AVL-Bedingung

Fallunterscheidung Verletzung AVL-Bedingung bei Einfugen:

1 Einfugen in linken Teilbaum des linken Kindes

2 Einfugen in rechten Teilbaum des linken Kindes

3 Einfugen in linken Teilbaum des rechten Kindes

4 Einfugen in rechten Teilbaum des rechten Kindes

1 und 4 sind symmetrische Falle, sowie 2 und 3

35

Page 36: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

AVL-Baum: Rotation

1 Einfugen in linken Teilbaum des linken Kindes:

k1

k2

k1

k2

+1

k3

+1

+2insert(k3) Rotationk2

k3 k1

0

4 Einfugen in rechten Teilbaum des rechten Kindes:

k1

k2

k1

k2

-1

k3

-1

-2insert(k3) Rotationk2

k1 k3

0

36

Page 37: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

AVL-Baum: Doppelrotation

2 Einfugen in rechten Teilbaum des linken Kindes:

k1

k2

k1

k2

+1

k3

-1

+2insert(k3) Rotationk3

k2 k1

0Rotationk1

k3

k2

+2

+1

3 Einfugen in linken Teilbaum des rechten Kindes:

k1

k2

k1

k2

-1

k3

+1

-2insert(k3) Rotationk3

k1 k2

0Rotationk1

k3

k2

-2

-1

37

Page 38: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

AVL-Baum: Beispiel-Sequenz I

3insert(3) insert(2)

3

2

insert(1)3

2

1

Rotation

3

2

1

insert(4)

3

2

1

4

insert(5)

3

2

1

4

5

Rotation

4

2

1

53

insert(6)

4

2

1

53

6

Rotation

5

4

2

631

+1

+1

+2 0 -1

-1

-1

-2

-2 -1

0

-2

-1

-1

0

-10

38

Page 39: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

AVL-Baum: Beispiel-Sequenz II

insert(7)

5

4

2

631

7

Rotation

6

4

2

731 5

insert(16)

6

4

2

731 5

16

insert(15)

6

4

2

731 5

16

15

Doppelrotation

6

4

2

1531 5

167

-1

-2

-1

0

0

00

-1

0 -1

-1

0

-2

-2

-2

+1

0

-1

-1

0

39

Page 40: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

AVL-Baum: Loschen

Loschen-Operation bei AVL-Baum:

• erase wie in binarem Suchbaum

• Verletzung der AVL-Bedingung in Teilbaumen durchRotationen reparieren

• bei jedem Eltern-Knoten wieder AVL-Bedingungen reparieren,bis hin zur Wurzel

40

Page 41: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

AVL-Baum: Beispiel-Sequenz III

7

5

2

31

erase(7)5

2

31

Rotation

5

2

1

3

7

6

2

841

3 5

Doppelrotation

6

4

2

831 5

8

6

2

41

3 5

erase(7)

0

+1

0

+2 -1

+1

-1

0

+1

-1

0

-1

+2 0

0 0

41

Page 42: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Programm heute

7 Fortgeschrittene Datenstrukturen

8 Such-AlgorithmenLineare SucheBinare SucheBinare SuchbaumeBalancierte SuchbaumeSuchen mit HashtabellenSuchen in Zeichenketten

42

Page 43: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Worterbucher

Worterbuch

Ein Worterbuch (auch genannt Dictionary oder Assoziatives Array)speichert eine Menge von Elementen M. Jedes Element e ∈ Mwird durch einen Schlussel key(e) eindeutig identifiziert.

Unterstutzte Operationen sind:

• search(key k): finde e ∈ M mit key(e) = k

• insert(Element e): erweitere M um e

• erase(key k): entferne e aus M, wobei key(e) = k

Beispiele:• Telefonbuch

• Element: Name, Adresse und Telefonnummer• Schlussel: Name

• Compiler-Symboltabelle• Element: Bezeichner und Typ-/Speicher-Informationen• Schlussel: Bezeichner

43

Page 44: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Such-Algorithmen fur Worterbucher

Sei M Worterbuch mit |M| = n.

• M als verkettete Liste mit linearer Suche• search O(n), insert O(1), erase O(n)

• M als sortierte verkettete Liste mit binarer Suche• search O(log n), insert O(n), erase O(log n)

• M als AVL-Suchbaum• search O(log n), insert O(log n), erase O(log n)

• M als Hashtabelle• search O(1), insert O(1), erase O(1) im Mittel!

• Worst case: search O(n), insert O(1), erase O(n)

44

Page 45: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

AdresstabellenSei M Worterbuch.

• Setze U :={key(e) : e ∈ M

}die Menge aller Schlussel

• Annahme: key(e1) 6= key(e2) fur alle e1 6= e2, e1, e2 ∈ M

Worterbuch mit Adresstabelle:

• sequentielle Liste T der Lange |U|

2 3 5 7

Schlüsselmenge U

1

2

3

4

5

6

7

8

Adresstabelle T

45

Page 46: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Operationen auf Adresstabellen

Adresstabelle T mit Lange |U|.

• Input: Tabelle T , Schlussel kOutput: Element mit Schlussel ksearch(T , k):

return T [k];

• Input: Tabelle T , Element einsert(T , e):

T [key(e)] = e;

• Input: Tabelle T , Schlussel kerase(T , k):

T [k] = null;

Alle Operationen: Laufzeit O(1)Speicherkomplexitat: O(|U|) → Problem falls U groß!

46

Page 47: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Reduktion von Adresstabellen mittels Hashfunktion

• Beobachtung: Menge K der tatsachlich benutzten Schlusselaus U oft klein

2 3 5 7

Schlüsselmenge U

1

2

3

4

5

6

7

8

Adresstabelle T

Menge K der tatsächlich benutzten Schlüssel

• Idee: wende Hashfunktion h auf key(e) an, um Adresstabelleauf |K | Elemente zu reduzieren → Hashtabelle

47

Page 48: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Hashtabellen

Worterbuch mit Hashtabelle:

• sequentielle Liste T mit Lange m := |K |• Hashfunktion h : U → {0, . . . ,m − 1}

2 3 5 7

Schlüsselmenge U

1

2

3

4

5

6

7

8

Hashtabelle T

Menge K der tatsächlich benutzten Schlüssel

h h h h

48

Page 49: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Operationen auf Hashtabellen

Hashtabelle T mit Lange m und Hashfunktion h.

• Input: Tabelle T , Schlussel kOutput: Element mit Schlussel ksearch(T , k):

return T [h(k)];

• Input: Tabelle T , Element einsert(T , e):

T [h(key(e))] = e;

• Input: Tabelle T , Schlussel kerase(T , k):

T [h(k)] = null;

Alle Operationen: Laufzeit O(1) (sofern h auch O(1))Speicherkomplexitat: O(m)

49

Page 50: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Kollisionen bei Hashtabellen

• Problem: falls h nicht injektiv → Kollision!• h ist nie injektiv da |K | < |U|

2 3 5 7

Schlüsselmenge U

1

2

3

4

5

6

7

8

Hashtabelle T

h h h h

9

Kollision!h

• Offene Fragen:• Strategie zur Kollisionsauflosung• Wahl von h

50

Page 51: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Verkettung zur Kollisionsauflosung

• jeder Slot in T enthaltstatt Element Referenzauf verkettete Liste

• bei Kollision: fugeElement am Anfang derListe ein → O(1)

• search und erase mussennun die Liste durchlaufen→ O(1) gefahrdet!

Schlüsselmenge U

1

2

3

4

5

6

7

8

Hashtabelle T

h h h h

9

h

-1

2

3 9

7

5

-2

-2-1

51

Page 52: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Analyse von Hashing mit Verkettung

Sei T Hashtabelle mit m Slots und n gespeicherten Elementen.

• Belegungsfaktor α = n/m• mittlere Anzahl von Elementen in verketteten Listen

• es kann gezeigt werden:Anzahl der Listendurchlaufe ist O(1+α)

• Annahme: es ist n = cm mit c Konstante, dannα = n/m = O(m)/m = O(1)

• Komplexitat von search und erase:• im Mittel: O(1)• worst case: O(n)

52

Page 53: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Hashfunktionen

Sei U Menge aller Schlussel, T Hashtabelle mit m Eintragen.

h : U → {0, . . . ,m − 1}

• Anforderungen an Hashfunktion:• einfache Auswertung O(1)• moglichst wenige Kollisionen

• viele Ansatze, zum Beispiel:• Divisionsmethode• Multiplikationsmethode• universelles Hashing

• Vereinbarung: U = N0 zur Vereinfachung• Strings z.B. via ASCII Code auf Zahlen abbilden

53

Page 54: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Divisionsmethode

Divisionsmethode

Sei U = N0 die Schlusselmenge, sei T Hashtabelle mit mEintragen. Die Divisionsmethode wahlt die Hashfunktionfolgendermaßen:

h : U → {0, . . . ,m − 1}, h(k) = k mod m.

• Beispiel: m = 12, k = 100, dann ist h(k) = 4.

• Problem: geschickte Wahl von m• eher schlecht ist m = 2p (wertet nur die unteresten p Bits von

k aus)• eher gut ist oft eine Primzahl, nicht nahe an Zweierpotenz

• Beispiel: erwartete Anzahl von Eintragen in Hashtabelle: 2000,gewunschter Belegungsfaktor 3 → m = 701 geeignetePrimzahl

54

Page 55: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Multiplikationsmethode

Multiplikationsmethode

Sei U = N0 die Schlusselmenge, sei T Hashtabelle mit mEintragen. Die Multiplikationsmethode wahlt die Hashfunktionfolgendermaßen:

h : U → {0, . . . ,m − 1}, h(k) = bm(kA mod 1)c,

wobei A ∈ (0, 1) Konstante.

• Vorschlag von Knuth: A ≈ 12(√

5− 1)

• typische Wahl: m = 2p

• Beispiel: m = 214 = 16384, A = 2654435769/232, undk = 123456, dann ist h(k) = 67.

55

Page 56: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Universelles Hashing

• Problem: fur jede feste Hashfunktion gibt esEingabesequenzen, die worst-case Laufzeit O(n) verursachen

• Losung:

Universelles Hashing

Sei U = N0 die Schlusselmenge, sei T Hashtabelle mit mEintragen. Sei H eine endliche Menge von Hashfunktionen:

H ={h : U → {0, . . . ,m − 1} | h Hashfunktion

}.

H heißt universell, falls fur jedes Schlusselpaar k , l ∈ U, k 6= l , dieAnzahl der Hashfunktionen h mit h(k) = h(l) durch |H|/m nachoben beschrankt ist.

• Idee: wahle zufallig ein h ∈ H• Resultat: Hashing mit Verkettung liefert im Mittel O(1)

Laufzeit der Worterbuch-Operationen

56

Page 57: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Kollisionsauflosung mit offener Adressierung

• Idee: statt Verkettung bei Kollision, suche systematischnachsten freien Platz in Hashtabelle → Sondieren

2 3 5

Schlüsselmenge U

1

2

3

4

5

6

7

8

Hashtabelle T

9

Kollision!

7 9

Sondieren

h h h h h

• Probleme:• Loschen von Elementen (erase) sehr problematisch• Falls Hashtabelle T voll, kein insert mehr moglich

57

Page 58: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Offene Adressierung

Sei U Schlusselmenge, T Hashtabelle mit m Eintragen.

• erweitere Hashfunktion zu

h : U × {0, . . . ,m − 1} → {0, . . . ,m − 1}

• fordere, daß Sondierungssequenz(h(k, 0), h(k , 1), . . . , h(k ,m − 1)

)eine Permutation von (0, . . . ,m − 1) ist

→ jeder Slot in T ist mogliches Ziel fur Schlussel k

• viele mogliche Sondierungssequenzen, zum Beispiel:• lineares Sondieren• quadratisches Sondieren• doppeltes Hashing

58

Page 59: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Hashing: Ausblick

• nachtragliche Anderung der Tabellengroße aufwendig• erfordert neue Tabelle und neue Hashfunktion• ubertragen aller Elemente (und Berechnung neuer

Hashfunktion) notig

• ist U statisch, so ist perfektes Hashing moglich• auch im worst-case sind alle Operationen O(1)• umgesetzt durch zwei Ebenen von universellem Hashing• Zeitgewinn erkauft durch zusatzlichen Speicherbedarf von O(n)

59

Page 60: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Programm heute

7 Fortgeschrittene Datenstrukturen

8 Such-AlgorithmenLineare SucheBinare SucheBinare SuchbaumeBalancierte SuchbaumeSuchen mit HashtabellenSuchen in Zeichenketten

60

Page 61: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Suchen in Zeichenketten

• Problem: find Teilwort in (langem) anderen Wort

• auch genannt: String-Matching

• Beispiele:• Suche Text in Textverarbeitung / Web-Browser• Suche Text in Dateien auf Festplatte (z.B. Spotlight, Windows

Search)• Suche Text im Internet (z.B. Google)

• Maß der Effizienz: Anzahl der Vergleiche zwischen Buchstabender Worte

61

Page 62: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Brute-Force Suche

D A S I S T E I N S I N N L O S E R ET X T

S I N N

S I N N

S I N N

S I N N

S I N N

S I N N

...

1

1

3

1

2

4

4

16 Vergleiche

62

Page 63: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Notationen

• Zu durchsuchender Text:• text[0..n − 1]• Lange n

• gesuchtes Muster = Pattern:• pat[0..m − 1]• Lange m

• Problem: finde Position i, so daß pat == text[i ..i + m − 1]

63

Page 64: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Brute-Force Algorithmus

Input: zu durchsuchender Text text Lange n,gesuchtes Muster pat Lange m

Output: Index i von Match (oder -1 falls nicht gefunden)bruteForceSearch(text, pat):

for i = 0 to n −m {j = 0;while ( (j < m) && (pat[j ] == text[i + j ]) )

j = j + 1;if (j ≥ m) return i; // fundig geworden}return -1; // nichts gefunden

• Komplexitat: O((n −m)m) = O(nm)

64

Page 65: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Knuth-Morris-Pratt Algorithmus

Knuth-Morris-Pratt Algorithmus (kurz: KMP)

• Idee: verbessere Brute-Force Algorithmus durch Ausnutzungder bereits gelesenen Information bei einem Mismatch

• Mismatch an Stelle j von pat impliziert

pat[0..j − 1] == text[i ..i + j − 1]

D A S I S T E I N S I N N L O S E R ET X T

S I N N

text:

pat:

• Vorverarbeitungsschritt: analysiere vor Suche das Muster pat,speichere mogliche Uberspringungen in Feld shift

65

Page 66: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Alphabet und Worter

Worter

Ein Alphabet Σ ist eine endliche Menge von Symbolen. Ein Wortw der Lange n uber Σ ist eine endliche Folge von Symbolen

w = w1 · · ·wn, wi ∈ Σ, i = 1, . . . , n.

Beispiel:

• Alphabet Σ = { a,...,z, A,...,Z }• Worter: Daten, Algorithmen, aabb• keine Worter: uber, t35t

• Alphabet Σ = { 0,...,9,A,B,C,D,E,F }• Worter: 09FF, ABC, A3E• keine Worter: 1f, 1gH

Das leere Wort wird mit ε bezeichnet.

66

Page 67: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Prafix und Suffix von einem Wort

Prafix, Suffix

Sei w = w1 · · ·wn Wort der Lange n uber einem Alphabet Σ.

• Das Wort w ′ heißt Prafix von w , falls w ′ = w1 · · ·wl fur0 ≤ l ≤ n.

• Das Wort w ′ heißt Suffix von w , falls w ′ = wl · · ·wn fur1 ≤ l ≤ n + 1.

Beispiele fur Wort w = Algorithmen:

• Prafixe von w sind: A, Alg, Algorit, Algorithmen

• Suffixe von w sind: n, men, gorithmen, Algorithmen

67

Page 68: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Rand von einem Wort

Rand

Sei w Wort uber einem Alphabet Σ. Ein Wort r heißt Rand von w ,falls r sowohl Prafix als auch Suffix von w ist.

Ein Rand r von w heißt eigentlicher Rand, wenn r 6= w und wennes außer w selbst keinen langeren Rand gibt. Der eigentliche Randvon w wird mit ∂(w) bezeichnet.

Beispiel: Wort w = aabaabaa hat folgende Rander:

• ε• a

• aa

• aabaa ← eigentlicher Rand

• aabaabaa = w

68

Page 69: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Uberspringen beim Suchen

text:

pat:

shift

• Idee: verschiebe Pattern so, daß im bereits gepruften Bereichwieder Ubereinstimmung herrscht• dazu mussen Prafix und Suffix dieses Bereichs ubereinstimmen→ eigentlicher Rand

69

Page 70: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Shift-Tabelle

Shift-Tabelle

Sei pat = s0 · · · sm−1 Wort der Lange m. Die Shift-Tabelle von patgibt die Lange des eigentlichen Randes des Prafixes der Lange jvon pat an. Sie hat folgende Gestalt:

shift[j ] =

{−1 fur j = 0∣∣∂(s0 · · · sj−1)

∣∣ fur j ≥ 1

wobei j = 0, . . . ,m − 1.

• Ist das Prafix der Lange j gematcht, und an Stelle j einMismatch, so ist der Shift j − shift[j ] > 0 korrekt

70

Page 71: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

KMP Algorithmus: Beispiel I

A B C A B A B A B C A A B A B

A B C A A B

A B C A A B

A B C A A B

A B C A A B

text:

pat:

j 0 1 2 3 4 5

shift[j ] -1 0 0 0 1 1

71

Page 72: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

KMP Algorithmus

Input: zu durchsuchender Text text Lange n,gesuchtes Muster pat Lange m

Output: Index i von Match (oder -1 falls nicht gefunden)KMPSearch(text, pat):

initShift(pat); // Initialisierung shift Tabelle, siehe spateri = 0; j = 0;while (i ≤ n −m) {

while (text[i + j ] == pat[j ]) {j = j + 1;if (j == m)return i ; // fundig geworden

}i = i + (j − shift[j ]); // j − shift[j ] ist immer > 0j = max(0, shift[j ]);}return -1; // war wohl nix

72

Page 73: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

KMP Algorithmus: Beispiel II

A B C A B A B A B C A A B A B

A B C A A B

j = 0 1 2 3

A B C A A B

j = 0 1 2

A B C A A B

A B C A A B

j = 0 1 2

j = 0 1 2 3 4 5

text:

pat:

i = 0 3 5 7

4

j 0 1 2 3 4 5

shift[j ] -1 0 0 0 1 1

73

Page 74: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Shift Tabelle Beispiel I

j

1

2

3

4

5

A B C A A B

A B C A A B

A B C A A B

A B C A A B

A B C A A B

A B C A A B

A B C A A B

A B C A A B

A B C A A B

A B C A A B

shift[j]

0

0

0

1

1

74

Page 75: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

KMP Algorithmus: Shift Tabelle

Input: Muster pat der Lange minitShift(pat):

shift[0] = −1;shift[1] = 0;i = 0;for j = 2 to m {

// hier ist: i == shift[j − 1]while (i ≥ 0 && pat[i ] 6= pat[j − 1])

i = shift[i ];i = i + 1;shift[j ] = i ;}

75

Page 76: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

KMP Algorithmus: Komplexitat

Komplexitat von KMP Algorithmus:

• KMPSearch:• erfolglose Vergleiche (außere while-Schleife): maximal

n −m + 1 Vergleiche• erfolgreiche Vergleiche (innere while-Schleife): ingesamt

maximal n Vergleiche• insgesamt: maximal 2n −m + 1 Vergleiche

• initShift:• erfolgreiche Vergleiche (for-Schleife): maximal m− 1 Vergleiche• erfolglose Vergleiche (while-Schleife): maximal m Vergleiche• insgesamt: maximal 2m − 1 Vergleiche

• insgesamt: maximal 2n + m Vergleiche, also O(n + m)

• Platzbedarf: O(m)

76

Page 77: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Ausblick: Suchen in Zeichenketten

• Brute-Force Algorithmus• Komplexitat: O(mn)

• Knuth-Morris-Pratt Algorithmus• Komplexitat: O(m + n)

• Rabin-Karp Algorithmus: Suchen mit Hash-Funktion• Komplexitat im Mittel: O(m + n)• Komplexitat worst-case: O(mn)

• Boyer-Moore Algorithmus: Suchen ruckwarts• Komplexitat: O(n)• Komplexitat best-case: O(n/m)

• Regulare Ausdrucke mit endlichen Automaten

• Suche nach ahnlichen Zeichenketten

77

Page 78: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel8.pdfSuchen Such-Algorithmen Gegeben sei eine Menge M von Objekten. EinSuch-Algorithmus

Zusammenfassung

7 Fortgeschrittene Datenstrukturen

8 Such-AlgorithmenLineare SucheBinare SucheBinare SuchbaumeBalancierte SuchbaumeSuchen mit HashtabellenSuchen in Zeichenketten

78