25
Heaps Algorithmen und Datenstrukturen Kapitel 4 Neue Datenstrukturen, besseres (?) Sortieren (Teil 2) Frank Heitmann [email protected] 4. November 2015 Frank Heitmann [email protected] 1/97 Heaps MaxHeapify und BuildMaxHeap HeapSort Heaps Ein (bin¨ arer) Heap ist eine Datenstruktur, die als ein (fast) vollst¨ andiger bin¨ arer Baum angesehen werden kann, wobei der Baum noch die spezielle Heap-Eigenschaft erf¨ ullt. Der Baum ist auf allen Ebenen vollst¨ andig gef¨ ullt außer oglicherweise auf der letzten. Der Heap wird meist durch ein Array repr¨ asentiert. ange [A] ist die Anzahl der Elemente des Feldes heap-gr¨oße [A] ist die Anzahl der Elemente im Heap (die in A gespeichert werden). Heap-Eigenschaft: Sei n ein Knoten des Baumes und p sein Vater, dann gilt Max-Heap: v (p) v (n) Min-Heap: v (p) v (n) Gut f¨ ur Sortieren und Warteschlangen. Frank Heitmann [email protected] 2/97 Heaps MaxHeapify und BuildMaxHeap HeapSort Heap - Beispiel 11 16 7 6 12 15 8 1 2 13 9 7 4 5 16 12 15 11 8 7 13 7 6 1 2 1 2 3 4 5 6 7 8 4 5 9 9 10 11 12 13 14 Frank Heitmann [email protected] 3/97 Heaps MaxHeapify und BuildMaxHeap HeapSort Heaps und Arrays Hat man ein Array, so werden die Elemente von links nach rechts gelesen und der bin¨ are Baum von oben nach unten und von links nach rechts Ebene f¨ ur Ebene aufgebaut. Hat man einen Baum, so wird dieser von oben nach unten und von links nach rechts gelesen und dabei das Array von links nach rechts gef¨ ullt. Frank Heitmann [email protected] 4/97

HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

Heaps

Algorithmen und DatenstrukturenKapitel 4

Neue Datenstrukturen,besseres (?) Sortieren

(Teil 2)

Frank [email protected]

4. November 2015

Frank Heitmann [email protected] 1/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

Heaps

Ein (binarer) Heap ist eine Datenstruktur, die als ein (fast)vollstandiger binarer Baum angesehen werden kann, wobei derBaum noch die spezielle Heap-Eigenschaft erfullt.

Der Baum ist auf allen Ebenen vollstandig gefullt außermoglicherweise auf der letzten.

Der Heap wird meist durch ein Array reprasentiert.

lange[A] ist die Anzahl der Elemente des Feldesheap-große[A] ist die Anzahl der Elemente im Heap (die in Agespeichert werden).

Heap-Eigenschaft: Sei n ein Knoten des Baumes und p seinVater, dann gilt

Max-Heap: v(p) ≥ v(n)Min-Heap: v(p) ≤ v(n)

⇒ Gut fur Sortieren und Warteschlangen.

Frank Heitmann [email protected] 2/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

Heap - Beispiel

11

16

7 6

12 15

8

1 2

13

9

7

4 5

16 12 15 11 8 7 13 7 6 1 21 2 3 4 5 6 7 8

4 5 99 10 11 12 13 14

Frank Heitmann [email protected] 3/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

Heaps und Arrays

Hat man ein Array, so werden die Elemente von links nach rechtsgelesen und der binare Baum von oben nach unten und von linksnach rechts Ebene fur Ebene aufgebaut.

Hat man einen Baum, so wird dieser von oben nach unten und vonlinks nach rechts gelesen und dabei das Array von links nach rechtsgefullt.

Frank Heitmann [email protected] 4/97

Page 2: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

Heaps und Arrays

Damit sind einfache Operationen moglich. Sei i ein Index im Array,dann ist

Vater(i) = bi/2cLeft(i) = 2i

Right(i) = 2i + 1

Die Max-Heap-Eigenschaft ist damit:

A[Vater(i)] ≥ A[i ]

Frank Heitmann [email protected] 5/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

Heap - Beispiel

11

16

7 6

12 15

8

1 2

13

9

7

4 5

16 12 15 11 8 7 13 7 6 1 21 2 3 4 5 6 7 8

4 5 99 10 11 12 13 14

Frank Heitmann [email protected] 6/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

Heap - Beispiel (Vater/Kind)

11

16

7 6

12 15

8

1 2

13

9

7

4 5

16 12 15 11 8 7 13 7 6 1 21 2 3 4 5 6 7 8

4 5 99 10 11 12 13 14

Frank Heitmann [email protected] 7/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

Heap - Beispiel (Vater/Kind)

11

16

7 6

12 15

8

1 2

13

9

7

4 5

16 12 15 11 8 7 13 7 6 1 21 2 3 4 5 6 7 8

4 5 99 10 11 12 13 14

Frank Heitmann [email protected] 8/97

Page 3: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

Aufrechterhaltung der Heap-Eigenschaft

Wie stellen wir aber gegeben ein Array (das noch kein Heap ist,sondern nur Werte enthalt) einen Heap her? (Und das schnell!)

Eine wichtige Routine ist MaxHeapify(A, i).

Diese geht davon aus, dass Left(i) und Right(i) bereits Max-Heapssind, dass jedoch A[i ] selbst die Heap-Eigenschaft verletzten kann.Die Routine lasst A[i ] ’absinken’, so dass der bei A[i ] beginnendeTeilbaum dann ein Max-Heap wird.

Frank Heitmann [email protected] 9/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

MaxHeapify - Beispiel

11

16

7 6

3 15

8

1 2

13

9

7

4 5

Frank Heitmann [email protected] 10/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

MaxHeapify - Beispiel

3

16

7 6

11 15

8

1 2

13

9

7

4 5

Frank Heitmann [email protected] 11/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

MaxHeapify - Beispiel

7

16

3 6

11 15

8

1 2

13

9

7

4 5

Frank Heitmann [email protected] 12/97

Page 4: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

MaxHeapify - Beispiel 2

11

16

7 6

10 15

8

1 2

13

9

7

4 5

Frank Heitmann [email protected] 13/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

MaxHeapify - Beispiel 2

10

16

7 6

11 15

8

1 2

13

9

7

4 5

Frank Heitmann [email protected] 14/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

MaxHeapify - Die Idee

Vergleiche A[i ] mit A[Left(i)] und A[Right(i)].

Ist A[i ] am großten, so sind wir fertig.

Sonst sei max der Index des großeren Elementes, tausche A[i ]und A[max ] (d.h. tausche A[i ] mit dem großeren Kind).

Fahre nun mit A[max ] (hat den Wert von A[i ]!) so wie ebenmit A[i ] fort.

Anmerkung

Der Wert von A[i ] wandert im Baum nach unten. Bei allenTauschoperationen ist dieser Wert beteiligt. Es finden sonst keineTauschoperationen statt!

Frank Heitmann [email protected] 15/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

MaxHeapify - Analyse

Satz

MaxHeapify ist korrekt und hat eine Laufzeit von Θ(log n), wobein die Anzahl der Knoten des Baumes ist.

Diese Routine kann nun benutzt werden, um Schritt fur Schritteinen korrekten MaxHeap aufzubauen.

Wie?

Frank Heitmann [email protected] 16/97

Page 5: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel

10

4

5 7

2 6

3

1 8

14

13

12

11 9

Frank Heitmann [email protected] 17/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel

10

4

5 7

2 6

3

1 8

14

13

12

11 9

Frank Heitmann [email protected] 18/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel

10

4

5 7

2 6

8

1 3

14

13

12

11 9

Frank Heitmann [email protected] 19/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel

10

4

5 7

2 6

8

1 3

14

13

12

11 9

Frank Heitmann [email protected] 20/97

Page 6: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel

10

4

5 7

2 14

8

1 3

6

13

12

11 9

Frank Heitmann [email protected] 21/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel

10

4

5 7

2 14

8

1 3

13

6

12

11 9

Frank Heitmann [email protected] 22/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel

10

4

5 7

2 14

8

1 3

13

6

12

11 9

Frank Heitmann [email protected] 23/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel

2

4

5 7

10 14

8

1 3

13

6

12

11 9

Frank Heitmann [email protected] 24/97

Page 7: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel

7

4

5 2

10 14

8

1 3

13

6

12

11 9

Frank Heitmann [email protected] 25/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel

7

4

5 2

10 14

8

1 3

13

6

12

11 9

Frank Heitmann [email protected] 26/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel

7

14

5 2

10 13

8

1 3

6

4

12

11 9

Frank Heitmann [email protected] 27/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel

7

14

5 2

10 13

8

1 3

6

4

12

11 9

Frank Heitmann [email protected] 28/97

Page 8: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Die Idee und Pseudocode

1 Suche im Baum von unten nach oben und von rechts nachlinks (im Array also von rechts nach links) den ersten Knoten,der als Wurzel eines Teilbaumes betrachtet, kein Heap mehrist.

2 Stelle die Heap-Eigenschaft her (mit einem Aufruf vonMaxHeapify).

3 Fahre bei 1. fort.

Algorithmus 1 BuildMaxHeap(A, i)

1: heap-große[A] = lange[A]2: for i = blange[A]/2c downto 1 do3: MaxHeapify(A, i)4: end for

Frank Heitmann [email protected] 29/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel (Wdh.)

10

4

5 7

2 6

3

1 8

14

13

12

11 9

Frank Heitmann [email protected] 30/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel (Wdh.)

10

4

5 7

2 6

3

1 8

14

13

12

11 9

Frank Heitmann [email protected] 31/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel (Wdh.)

10

4

5 7

2 6

8

1 3

14

13

12

11 9

Frank Heitmann [email protected] 32/97

Page 9: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel (Wdh.)

10

4

5 7

2 6

8

1 3

14

13

12

11 9

Frank Heitmann [email protected] 33/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel (Wdh.)

10

4

5 7

2 14

8

1 3

6

13

12

11 9

Frank Heitmann [email protected] 34/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel (Wdh.)

10

4

5 7

2 14

8

1 3

13

6

12

11 9

Frank Heitmann [email protected] 35/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel (Wdh.)

10

4

5 7

2 14

8

1 3

13

6

12

11 9

Frank Heitmann [email protected] 36/97

Page 10: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel (Wdh.)

2

4

5 7

10 14

8

1 3

13

6

12

11 9

Frank Heitmann [email protected] 37/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel (Wdh.)

7

4

5 2

10 14

8

1 3

13

6

12

11 9

Frank Heitmann [email protected] 38/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel (Wdh.)

7

4

5 2

10 14

8

1 3

13

6

12

11 9

Frank Heitmann [email protected] 39/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel (Wdh.)

7

14

5 2

10 13

8

1 3

6

4

12

11 9

Frank Heitmann [email protected] 40/97

Page 11: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Beispiel (Wdh.)

7

14

5 2

10 13

8

1 3

6

4

12

11 9

Frank Heitmann [email protected] 41/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Analyse

Algorithmus 2 BuildMaxHeap(A)

1: heap-große[A] = lange[A]2: for i = blange[A]/2c downto 1 do3: MaxHeapify(A, i)4: end for

Zum Beweis der Korrektheit von BuildMaxHeap benutzt man dieKorrektheit von MaxHeapify und folgende Schleifeninvariante:

Zu Beginn jeder Iteration der for-Schleife ist jeder Knoteni + 1, i + 2, . . . , n die Wurzel eines Max-Heap.

Frank Heitmann [email protected] 42/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

BuildMaxHeap - Analyse

Satz

BuildMaxHeap ist korrekt und die Laufzeit ist durch O(n · log n)beschrankt. Eine genauere Analyse zeigt, dass die Laufzeit sogardurch O(n) beschrankt ist. Wir konnen einen Heap also inLinearzeit herstellen.

Frank Heitmann [email protected] 43/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort

Wir wollen jetzt den Heap benutzen um einen effizientenSortieralgorithmus zu entwickeln.

Gegeben ein Array von Zahlen, stellen wir zunachst den Heap her(mit BuildMaxHeap).

Und dann? ...

Frank Heitmann [email protected] 44/97

Page 12: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Die Idee ?

7

14

5 2

10 13

8

1 3

6

4

12

11 9

Frank Heitmann [email protected] 45/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Die Idee

1 Gegeben ein Array, stelle zunachst einen Heap her(BuildMaxHeap).

2 Vertausche die Wurzel (maximales Element!) mit demElement ganz rechts unten (das Element steht im Array ganzrechts! (Von den noch nicht behandelten Elementen)).

3 Verringere die Heap-Große um 1 und fuhre MaxHeapify aufdie Wurzel aus (die und nur die verletzt jetzt moglicherweisedie Heap-Eigenschaft).

4 Fahre bei 2. fort.

Frank Heitmann [email protected] 46/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

14

5 2

10 13

8

1 3

6

4

12

11 9

Frank Heitmann [email protected] 47/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

14

5 2

10 13

8

1 3

6

4

12

11 9

Frank Heitmann [email protected] 48/97

Page 13: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

4

5 2

10 13

8

1 3

6

14

12

11 9

Frank Heitmann [email protected] 49/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

4

5 2

10 13

8

1 3

6

14

12

11 9

Frank Heitmann [email protected] 50/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

4

5 2

10 13

8

1 3

6

14

12

11 9

Frank Heitmann [email protected] 51/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

13

5 2

10 12

8

1 3

6

14

11

4 9

Frank Heitmann [email protected] 52/97

Page 14: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

13

5 2

10 12

8

1 3

6

14

11

4 9

Frank Heitmann [email protected] 53/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

13

5 2

10 12

8

1 3

6

14

11

4 9

Frank Heitmann [email protected] 54/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

9

5 2

10 12

8

1 3

6

14

11

4 13

Frank Heitmann [email protected] 55/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

9

5 2

10 12

8

1 3

6

14

11

4 13

Frank Heitmann [email protected] 56/97

Page 15: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

9

5 2

10 12

8

1 3

6

14

11

4 13

Frank Heitmann [email protected] 57/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

12

5 2

10 11

8

1 3

6

14

9

4 13

Frank Heitmann [email protected] 58/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

12

5 2

10 11

8

1 3

6

14

9

4 13

Frank Heitmann [email protected] 59/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

4

5 2

10 11

8

1 3

6

14

9

12 13

Frank Heitmann [email protected] 60/97

Page 16: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

4

5 2

10 11

8

1 3

6

14

9

12 13

Frank Heitmann [email protected] 61/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

11

5 2

10 9

8

1 3

6

14

4

12 13

Frank Heitmann [email protected] 62/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

11

5 2

10 9

8

1 3

6

14

4

12 13

Frank Heitmann [email protected] 63/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

3

5 2

10 9

8

1 11

6

14

4

12 13

Frank Heitmann [email protected] 64/97

Page 17: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

3

5 2

10 9

8

1 11

6

14

4

12 13

Frank Heitmann [email protected] 65/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

3

5 2

10 9

8

1 11

6

14

4

12 13

Frank Heitmann [email protected] 66/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

10

5 2

8 9

3

1 11

6

14

4

12 13

Frank Heitmann [email protected] 67/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

10

5 2

8 9

3

1 11

6

14

4

12 13

Frank Heitmann [email protected] 68/97

Page 18: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

Wir uberspringen ein paar Schritte...

Frank Heitmann [email protected] 69/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

7

10

5 2

8 9

3

1 11

6

14

4

12 13

Frank Heitmann [email protected] 70/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

2

7

8 9

5 6

3

10 11

1

14

4

12 13

Frank Heitmann [email protected] 71/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

2

7

8 9

5 6

3

10 11

1

14

4

12 13

Frank Heitmann [email protected] 72/97

Page 19: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

2

1

8 9

5 6

3

10 11

7

14

4

12 13

Frank Heitmann [email protected] 73/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

2

1

8 9

5 6

3

10 11

7

14

4

12 13

Frank Heitmann [email protected] 74/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

2

6

8 9

5 4

3

10 11

7

14

1

12 13

Frank Heitmann [email protected] 75/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

2

6

8 9

5 4

3

10 11

7

14

1

12 13

Frank Heitmann [email protected] 76/97

Page 20: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

Wir uberspringen nochmal ein paar Schritte...

Frank Heitmann [email protected] 77/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

2

6

8 9

5 4

3

10 11

7

14

1

12 13

Frank Heitmann [email protected] 78/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

4

3

8 9

2 1

5

10 11

7

14

6

12 13

Frank Heitmann [email protected] 79/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

4

3

8 9

2 1

5

10 11

7

14

6

12 13

Frank Heitmann [email protected] 80/97

Page 21: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

4

1

8 9

2 3

5

10 11

7

14

6

12 13

Frank Heitmann [email protected] 81/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

4

2

8 9

1 3

5

10 11

7

14

6

12 13

Frank Heitmann [email protected] 82/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

4

1

8 9

2 3

5

10 11

7

14

6

12 13

Frank Heitmann [email protected] 83/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

4

1

8 9

2 3

5

10 11

7

14

6

12 13

Frank Heitmann [email protected] 84/97

Page 22: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Beispiel

4

1

8 9

2 3

5

10 11

7

14

6

12 13

Frank Heitmann [email protected] 85/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Die Idee

1 Gegeben ein Array, stelle zunachst einen Heap her(BuildMaxHeap).

2 Vertausche die Wurzel (maximales Element!) mit demElement ganz rechts unten (das Element steht im Array ganzrechts! (Von den noch nicht behandelten Elementen)).

3 Verringere die Heap-Große um 1 und fuhre MaxHeapify aufdie Wurzel aus (die und nur die verletzt jetzt moglicherweisedie Heap-Eigenschaft).

4 Fahre bei 2. fort.

Frank Heitmann [email protected] 86/97

HeapsMaxHeapify und BuildMaxHeapHeapSort

HeapSort - Pseudocode

Algorithmus 3 HeapSort(A)

1: BuildMaxHeap(A)2: for i = lange[A] downto 2 do3: swap(A[1],A[i ])4: heap-große[A] = heap-große[A]− 15: MaxHeapify(A, 1)6: end for

Satz

HeapSort sortiert ein Array von n Zahlen in Θ(n · log n) Schritten.HeapSort sortiert in-place.

Frank Heitmann [email protected] 87/97

Heaps

Wiederholung: Heaps

Ein (binarer) Heap ist eine Datenstruktur, die als ein (fast)vollstandiger binarer Baum angesehen werden kann, wobei derBaum noch die spezielle Heap-Eigenschaft erfullt.

Der Baum ist auf allen Ebenen vollstandig gefullt außermoglicherweise auf der letzten.

Der Heap wird meist durch ein Array reprasentiert.

lange[A] ist die Anzahl der Elemente des Feldesheap-große[A] ist die Anzahl der Elemente im Heap (die in Agespeichert werden).

Heap-Eigenschaft: Sei n ein Knoten des Baumes und p seinVater, dann gilt

Max-Heap: A[Vater(i)] ≥ A[i ]Min-Heap: A[Vater(i)] ≤ A[i ]

⇒ Gut fur Sortieren und Warteschlangen.

Frank Heitmann [email protected] 88/97

Page 23: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

Heaps

Wiederholung: HeapSort

Heaps zum Sortieren:

MaxHeapify zur Aufrechterhaltung der Heap-EigenschaftBuildMaxHeap zur Erstellung eines MaxHeaps (benutztMaxHeapify)HeapSort sortiert ein Array (benutzt MaxHeapify undBuildMaxHeap)

Frank Heitmann [email protected] 89/97

Heaps

Wiederholung - Heaps und Arrays

Hat man ein Array, so werden die Elemente von links nach rechtsgelesen und der binare Baum von oben nach unten und von linksnach rechts Ebene fur Ebene aufgebaut.

Hat man einen Baum, so wird dieser von oben nach unten und vonlinks nach rechts gelesen und dabei das Array von links nach rechtsgefullt.

Vater(i) = bi/2cLeft(i) = 2i

Right(i) = 2i + 1

Frank Heitmann [email protected] 90/97

Heaps

Heap - Beispiel

11

16

7 6

12 15

8

1 2

13

9

7

4 5

16 12 15 11 8 7 13 7 6 1 21 2 3 4 5 6 7 8

4 5 99 10 11 12 13 14

Frank Heitmann [email protected] 91/97

Heaps

MaxHeapify - Die Idee

Vergleiche A[i ] mit A[Left(i)] und A[Right(i)].

Ist A[i ] am großten, so sind wir fertig.

Sonst sei max der Index des großeren Elementes, tausche A[i ]und A[max ] (d.h. tausche A[i ] mit dem großeren Kind).

Fahre nun mit A[max ] (hat den Wert von A[i ]!) so wie ebenmit A[i ] fort.

Anmerkung

Der Wert von A[i ] wandert im Baum nach unten. Bei allenTauschoperationen ist dieser Wert beteiligt. Es finden sonst keineTauschoperationen statt!

Frank Heitmann [email protected] 92/97

Page 24: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

Heaps

MaxHeapify - Pseudocode

Algorithmus 4 MaxHeapify(A, i)

1: l = Left(i)2: r = Right(i)3: if l ≤ heap-große[A] und A[l ] > A[i ] then4: max = l5: else6: max = i7: end if8: if r ≤ heap-große[A] und A[r ] > A[max ] then9: max = r

10: end if11: if max 6= i then12: swap(A[i ],A[max ])13: MaxHeapify(A,max)14: end if

Frank Heitmann [email protected] 93/97

Heaps

BuildMaxHeap - Die Idee und Pseudocode

1 Suche im Baum von unten nach oben und von rechts nachlinks (im Array also von rechts nach links) den ersten Knoten,der als Wurzel eines Teilbaumes betrachtet, kein Heap mehrist.

2 Stelle die Heap-Eigenschaft her (mit einem Aufruf vonMaxHeapify).

3 Fahre bei 1. fort.

Algorithmus 5 BuildMaxHeap(A, i)

1: heap-große[A] = lange[A]2: for i = blange[A]/2c downto 1 do3: MaxHeapify(A, i)4: end for

Frank Heitmann [email protected] 94/97

Heaps

HeapSort - Die Idee

1 Gegeben ein Array, stelle zunachst einen Heap her(BuildMaxHeap).

2 Vertausche die Wurzel (maximales Element!) mit demElement ganz rechts unten (das Element steht im Array ganzrechts! (Von den noch nicht behandelten Elementen)).

3 Verringere die Heap-Große um 1 und fuhre MaxHeapify aufdie Wurzel aus (die und nur die verletzt jetzt moglicherweisedie Heap-Eigenschaft).

4 Fahre bei 2. fort.

Frank Heitmann [email protected] 95/97

Heaps

HeapSort - Pseudocode

Algorithmus 6 HeapSort(A)

1: BuildMaxHeap(A)2: for i = lange[A] downto 2 do3: swap(A[1],A[i ])4: heap-große[A] = heap-große[A]− 15: MaxHeapify(A, 1)6: end for

Anmerkung

Ist das Array gar nicht vollstandig gefullt, sollte in der for-Schleifenicht lange[A] genutzt werden, sondern heap-große[A] (dieweiteren Platze im Array werden ja gar nicht genutzt!).

Frank Heitmann [email protected] 96/97

Page 25: HeapSort Heaps Algorithmen und Datenstrukturen Heap · 2015. 11. 6. · HeapSort Heaps Ein (bin arer) Heap ist eine Datenstruktur, die als ein (fast) vollst andiger bin arer Baum

Heaps

Analysen

Satz

1 MaxHeapify ist korrekt und hat eine Laufzeit von Θ(log n),wobei n die Anzahl der Knoten des Baumes ist.

2 BuildMaxHeap ist korrekt und die Laufzeit ist durchO(n · log n) beschrankt. Eine genauere Analyse zeigt, dass dieLaufzeit sogar durch O(n) beschrankt ist (also in Θ(n) ist).Wir konnen einen Heap also in Linearzeit herstellen.

3 HeapSort sortiert ein Array von n Zahlen in Θ(n · log n)Schritten. HeapSort sortiert in-place.

Zur Ubung

Wir haben nur kurz die Korrektheitsbeweise erwahnt oderangedeutet. Genaueres zur Ubung oder bei Schwierigkeiten zumNachlesen im [Cormen].

Frank Heitmann [email protected] 97/97