Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1 Kapitel 6: Suchbäume und weitere Sortierverfahren 6.1 Binäre Bäume Die Klasse BinTree mit Traversierungsmethoden 6.2 Suchbäume 6.2.1 AVL Bäume 6.3 HeapSort.

Ähnliche Präsentationen


Präsentation zum Thema: "1 Kapitel 6: Suchbäume und weitere Sortierverfahren 6.1 Binäre Bäume Die Klasse BinTree mit Traversierungsmethoden 6.2 Suchbäume 6.2.1 AVL Bäume 6.3 HeapSort."—  Präsentation transkript:

1 1 Kapitel 6: Suchbäume und weitere Sortierverfahren 6.1 Binäre Bäume Die Klasse BinTree mit Traversierungsmethoden 6.2 Suchbäume AVL Bäume 6.3 HeapSort und BucketSort HeapSort BucketSort

2 2 6.3 BucketSort Alle Sortierverfahren bisher basieren auf: Vergleiche je zweier Schlüssel. Allgemeine untere Schranke für den Aufwand: O(n log n). Für spezielle Schlüsselmengen: Sortieren möglich ohne Vergleiche und effizienter!

3 3 Idee: verwende die Schlüssel zur Berechnung der Speicheradresse in der sortierten Folge (wie beim Hashing). Beispiel: Menge von n Datenobjekten {s 0,..., s n-1 } mit Schlüsselwerten 0,..., n-1, gegeben als Array S. Sortieralgorithmus: for(int i = 0, i < n, i++) T[S[i].key] = S[i]; Aufwand: O(n).

4 4 Menge von n Datenobjekten {s 0,..., s n-1 } mit Schlüsselwerten 0,..., m-1, gegeben als Array S. Duplikate zugelassen. Erinnerung: CountingSort (Aufgabe 19) {int C[] = new int[k]; for(int j = 0, j < m, j++) C[j] = 0; for(int i = 0, i < n, i++) C[S[i].key]++; for(int j = 0, j < m, j++) C[j] = C[j]+C[j-1]; for(int i = n-1, i >= 0, i++) { T[C[S[i].key]-1] := S[i]; C[S[i].key]--; } } Aufwand: O(n+m).

5 5 BucketSort Menge von n Datenobjekten {s 0,..., s n-1 } mit Schlüsselwerten 0,..., m-1, gegeben als Array S. Duplikate zugelassen. void BucketSort(S) { int i; int j; for(j=0; j

6 6 RadixSort Menge von n Datenobjekten {s 0,..., s n-1 } mit Schlüsselwerten 0,..., n k -1, gegeben als Array S. Duplikate zugelassen. Bucketsort dafür: O(n + n k ). Verbesserung (RadixSort): schreibe die Schlüssel zur Basis n. Man erhält Zahlen mit k Ziffern. Sortiere der Reihe nach (z.B. von hinten mittels mod und div ) nach jeder Ziffer mit BucketSort. Aufwand: O(kn).

7 7 Beispiel zu RadixSort: n=10, k=2. Zu sortierende Folge: 64, 17, 3, 99, 79, 78, 19, 13, 67, Schritt: Einfügen in Buckets nach letzter Ziffer: und (von oben) ausgeben: 3, 13, 64, 34, 17, 67, 78, 99, 79,

8 8 Fortsetzung RadixSort 2. Schritt: im 1. Schritt ausgegebene Folge 3, 13, 64, 34, 17, 67, 78, 99, 79, 19 einfügen in Buckets nach vorletzter Ziffer: und ausgeben: 3, 13, 17, 19, 34, 64, 67, 78, 79,

9 9 Verallgemeinerung: Ziffern können an den verschiedenen Positionen auch in verschiedenen Wertebereichen liegen. Beispiel: Datum=(Jahr, Monat, Tag) ( [ ], [1..12], [1..31] ) BucketSort nach Jahr, nach Monat und nach Tag.

10 10 Kapitel 7: Ausgewählte Algorithmen 7.1 Externes Suchen

11 Externes Suchen Bisherige Algorithmen: geeignet, wenn alle Daten im Hauptspeicher. Große Datenmengen: oft auf externen Speichermedien, z.B. Festplatte. Zugriff: immer gleich auf einen ganzen Block (eine Seite) von Daten, z.B: 4096 Bytes. Effizienz: Zahl der Seitenzugriffe klein halten!

12 12 Für externes Suchen: Variante von Suchbäumen mit: Knoten = Seite Vielwegsuchbäume!

13 13 Definition (Vielweg-Suchbaum) Der leere Baum ist ein Vielweg-Suchbaum mit der Schlüsselmenge {}. Seien T 0,..., T n Vielweg-Suchbäume mit Schlüsseln aus einer gemeinsamen Schlüsselmenge S, und sei k 1,...,k n eine Folge von Schlüsseln mit k 1 <...< k n. Dann ist die Folge T 0 k 1 T 1 k 2 T 2 k k n T n ein Vielweg-Suchbaum genau dann, wenn: für alle Schlüssel x aus T 0 gilt: x < k 1 für i=1,...,n-1, für alle Schlüssel x in T i gilt: k i < x < k i +1, für alle Schlüssel x aus T n gilt: k n < x.

14 14 B-Baum Definition Ein B-Baum der Ordnung m ist ein Vielweg-Suchbaum mit folgenden Eigenschaften 1 #(Schlüssel in Wurzel) 2m und m #(Schlüssel in Knoten) 2m für alle anderen Knoten. Alle Pfade von der Wurzel zu einem Blatt sind gleichlang. Jeder innere Knoten mit s Schlüsseln hat genau s+1 Söhne.

15 15 Beispiel: Ein B-Baum der Ordnung 2:

16 16 Abschätzungen zu B-Bäumen Ein minimal gefüllter B-Baum der Ordnung m und Höhe h: Knotenzahl im linken wie im rechten Teilbaum 1 + (m+1) + (m+1) (m+1) h-1 = ( (m+1) h – 1) / m. Die Wurzel hat einen Schlüssel, alle anderen Knoten haben m Schlüssel. Insgesamt: Schlüsselzahl n in einem B-Baum der Höhe h: n 2 (m+1) h – 1 Also gilt für jeden B-Baum der Höhe h mit n Schlüsseln: h log m+1 ((n+1)/2).

17 17 Beispiel Also gilt für jeden B-Baum der Höhe h mit n Schlüsseln: h log m+1 ((n+1)/2). Beispiel: Bei Seitengröße: 1 KByte und jeder Eintrag nebst Zeiger: 8 Byte, kann m=63 gewählt werden, und bei einer Datenmenge von n= folgt h log < 4 und damit h max = 3.

18 Externes Suchen Definition Ein B-Baum der Ordnung m ist ein Vielweg-Suchbaum mit folgenden Eigenschaften 1 #(Schlüssel in Wurzel) 2m und m #(Schlüssel in Knoten) 2m für alle anderen Knoten. Alle Pfade von der Wurzel zu einem Blatt sind gleichlang. Jeder innere Knoten mit s Schlüsseln hat genau s+1 Söhne.

19 19 Beispiel: Ein B-Baum der Ordnung 2:

20 20 Abschätzungen zu B-Bäumen Ein minimal gefüllter B-Baum der Ordnung m und Höhe h: Knotenzahl im linken wie im rechten Teilbaum 1 + (m+1) + (m+1) (m+1) h-1 = ( (m+1) h – 1) / m. Die Wurzel hat einen Schlüssel, alle anderen Knoten haben m Schlüssel. Insgesamt: Schlüsselzahl n in einem B-Baum der Höhe h: n 2 (m+1) h – 1 Also gilt für jeden B-Baum der Höhe h mit n Schlüsseln: h log m+1 ((n+1)/2).

21 21 Beispiel Also gilt für jeden B-Baum der Höhe h mit n Schlüsseln: h log m+1 ((n+1)/2). Beispiel: Bei Seitengröße: 1 KByte und jeder Eintrag nebst Zeiger: 8 Byte, kann m=63 gewählt werden, und bei einer Datenmenge von n= folgt h log < 4 und damit h max = 3.

22 22 Algorithmen zum Einfügen und Löschen von Schlüsseln in B-Bäumen Algorithmus insert (root, x) //füge Schlüssel x in den Baum mit Wurzelknoten root ein suche nach x im Baum mit Wurzel root; wenn x nicht gefunden { sei p Blatt, an dem die Suche endete; füge x an der richtigen Position ein; wenn p nun 2m+1 Schlüssel {overflow(p)} }

23 23 Algorithmus overflow (p) = split (p) Algorithmus split (p) Erster Fall: p hat einen Vater q. Zerlege den übervollen Knoten. Der mittlere Schlüssel wandert in den Vater. Anmerkung: das Splitting muss evtl. bis zur Wurzel wiederholt werden. Algorithmus Split (1)

24 24 Algorithmus split (p) Zweiter Fall: p ist die Wurzel. Zerlege den übervollen Knoten. Eröffne eine neue Ebene nach oben mit einer neuen Wurzel mit dem mittleren Schlüssel. Algorithmus Split (2)

25 25 //entferne Schlüssel x aus dem Baum mit Wurzel root suche nach x im Baum mit Wurzel root; wenn x gefunden { wenn x in einem inneren Knoten liegt { vertausche x mit dem nächstgrößeren Schlüssel x' im Baum // wenn x in einem inneren Knoten liegt, gibt // es einen nächstgrößeren Schlüssel // im Baum, und dieser liegt in einem Blatt } sei p das Blatt, das x enthält; lösche x aus p; wenn p nicht die wurzel ist { wenn p m-1 Schlüssel hat {underflow (p)} } } Algorithmus delete (root,x)

26 26 Algorithmus underflow (p) // behandle die Unterläufe des Knoten p wenn p einen Nachbarknoten hat mit s>m Knoten { balance (p,p') } anderenfalls // da p nicht die Wurzel sein kann, muss p Nachbarn mit m Schlüsseln haben { sei p' Nachbar mit m Schlüsseln; merge (p,p')}

27 27 Algorithmus balance (p, p') // balanciere Knoten p mit seinem Nachbarknoten p' (s > m, r = (m+s)/2 -m )

28 28 Algorithmus merge (p,p') // verschmelze Knoten p mit seinem Nachbarknoten Führe die folgende Operation durch: Anschließend: wenn ( q <> Wurzel) und (q hat m-1 Schlüssel) underflow (q) anderenfalls (wenn (q= Wurzel) und (q leer)) {gib q frei und lasse root auf p^ zeigen}

29 29 Rekursion Wenn es bei underflow zu merge kommt, muss evtl. underflow eine Ebene höher wiederholt werden. Dies kann sich bis zur Wurzel fortsetzen.

30 30 Beispiel: B-Baum der Ordnung 2

31 31 Aufwand Sei m die Ordnung des B-Baums, n die Zahl der Schlüssel. Aufwand für Suchen, Einfügen, Entfernen: O(h) = O(log m+1 ((n+1)/2) ) = O(log m+1 (n)).

32 32 Anmerkung: B-Bäume auch als interne Speicherstruktur zu gebrauchen: Besonders: B-Bäume der Ordnung 1 (dann nur 1 oder 2 Schlüssel pro Knoten – keine aufwändige Suche innerhalb von Knoten). Aufwand für Suchen, Einfügen, Löschen: O(log n).

33 33 Anmerkung: Speicherplatzausnutzung: über 50% Grund: die Bedingung: 1/2k #(Schlüssel in Knoten) k Für Knoten Wurzel (k=2m)

34 34 Noch höhere Speicherplatzausnutzung möglich, z.B. über 66% mit Bedingung: 2/3k #(Schlüssel in Knoten) k für alle Knoten mit Ausnahme der Wurzel und ihrer Kinder. Erreichbar durch 1) modifiziertes Balancieren auch beim Einfügen und 2) split erst, wenn zwei Nachbarn ganz voll. Nachteil: Häufigere Reorganisation beim Einfügen und Löschen notwendig.

35 Externes Sortieren Problem: Sortieren großer Datenmengen, wie beim Externen Suchen gespeichert in Blöcken (Seiten). Effizienz: Zahl der Seitenzugriffe klein halten! Strategie: Sortieralgorithmus, der Daten sequentiell verarbeitet (kein häufiges Wechseln der Seiten): MergeSort!

36 36 Beginn: n Datensätze in einem File g 1, unterteilt in Seiten der Größe b: Seite 1: s 1,…,s b Seite 2: s b+1,…s 2b … Seite k: s (k-1)b+1,…,s n ( k = [n/b] + ) Bei sequentieller Verarbeitung: nur k Seitenzugriffe statt n.

37 37 Varianten von MergeSort für Externes Sortieren MergeSort: Divide-and-Conquer-Algorithmus Für Externes Sortieren: ohne Divide-Schritt, nur noch Merge. Definition: Lauf := geordnete Teilfolge innerhalb eines Files. Strategie: durch Merge immer größere Läufe erzeugen, bis alles sortiert.

38 38 Algorithmus 1. Schritt: Erzeuge aus der Folge im Eingabefile g 1 Anfangsläufe und verteile sie auf zwei Files f 1 und f 2, gleich viele ( 1) auf jeden. (hierzu gibt es verschiedene Strategien, später). Nun: verwende vier Files f 1, f 2, g 1, g 2.

39 39 2. Schritt (Hauptschritt): Solange Zahl der Läufe > 1 wiederhole: { Mische je zwei Läufe von f 1 und f 2 zu einem doppelt so langen Lauf abwechselnd nach g 1 und g 2, bis keine Läufe auf f 1 und f 2 mehr übrig. Mische je zwei Läufe von g 1 und g 2 zu einem doppelt so langen Lauf abwechselnd nach f 1 und f 2, bis keine Läufe auf g 1 und g 2 mehr übrig. } Jede Schleife = zwei Phasen


Herunterladen ppt "1 Kapitel 6: Suchbäume und weitere Sortierverfahren 6.1 Binäre Bäume Die Klasse BinTree mit Traversierungsmethoden 6.2 Suchbäume 6.2.1 AVL Bäume 6.3 HeapSort."

Ähnliche Präsentationen


Google-Anzeigen