20
Heapsort

Heapsort - Technische Fakultät · Heap-Datenstruktur • Array • kann interpretiert werden als fast vollständiger Binärbaum • alle Reihen des Baumes sind komplett gefüllt,

Embed Size (px)

Citation preview

Heapsort

• Insertion Sort: Laufzeit O(n2), sortiert in-place, d.h. es werden nur eine konstante Zahl von Elementen ausserhalb des Arrays gespeichert

• Merge-Sort: Laufzeit O(n lg n), sortiert nicht in-place

• Heapsort: Laufzeit O(n lg n), sortiert in-place

Heap-Datenstruktur• Array

• kann interpretiert werden als fast vollständiger Binärbaum

• alle Reihen des Baumes sind komplett gefüllt, ausser der untersten

Heap Datenstruktur

Für einen Knoten i gilt:

Arten von Heaps

• max-heap: Die max-heap Eigenschaft ist, dass für jeden Knoten gilt: A[Parent(i)] ≥ A[i] → der Wurzelknoten enthält das größte Element

• min-heap: Die min-heap Eigenschaft ist, dass für jeden Knoten gilt: A[Parent(i)] ≤ A[i] → der Wurzelknoten enthält das kleinste Element

• Für den Heapsort-Algorithmus verwenden wir max-heaps.

Max-Heapify• Eingabe: Array A und Index i

• Annahme: Left(i) und Right(i) sind max-Heaps, A[i] ist möglicherweise kleiner als seine Kinder → max-heap Eigenschaft verletzt

• Max-Heapify stellt die max-heap Eigenschaft wieder her:

Max-Heapify

Effizienz von Max-Heapify

• Heap ist ein vollständiger Binärbaum

• Ein Binärbaum mit n Elementen hat die Höhe O(lg n)

• daher gilt für Max-Heapify: T(n)=O(lg n)

Build-Max-Heap

• Die Prozedur Build-Max-Heap baut einen max-Heap aus einem Array:

Effizienz von Build-Max-Heap

• Jeder Aufruf von Max-Heapify benötigt O(lg n) Zeit

• Insgesamt gibt es O(n) Aufrufe von Max-Heapify

• Laufzeit von Build-Max-Heap daher O(n lg n)

Heapsort

• Nach Build-Max-Heap befindet sich das größte Element in A[1]

• wir vertauschen A[1] mit A[n]

• Danach sind die Kinder von A[1] weiterhin max-Heaps. A[1] verletzt allerdings die max-Heap Eigenschaft

• heap-size wird um eins reduziert, somit wird das letzte (und nun größte Element) aus dem Heap ausgeblendet

• Max-Heapify(A,1) stellt die max-Heap Eigenschaft wieder her

Effizienz von Heapsort

• Build-Max-Heap benötigt O(n lg n) Zeit

• Max-Heapify wird n-1 mal aufgerufen und benötigt jeweils O(lg n) Zeit

• Daher ist die Laufzeit von Heapsort T(n)=O(n lg n)

Priority Queues• Anwendung: Verwalten von Jobs auf einem multi-user

computer

• jeder Job hat eine Priorität, derjenige mit der höchsten wird ausgeführt

• Insert(S,x) fügt ein Element x der Priority Queue hinzu

• Maximum(S) liefert das größte Element

• Extract-Max(S) entfernt das größte Element

• Increase-Key(S,x,k) ändert den Wert des Elements x zu k. Dabei muss k größer sein, als der aktuelle Wert von x

Operationen• Maximum:

• Extract-Max:

Laufzeit: O(1)

Laufzeit: O(lg n)

Increase-Key:

Laufzeit: O(lg n)

Insert:

Laufzeit: O(lg n)

Fazit: Alle Operationen der Priority Queue werden in O(lg n) Zeit unterstützt