Heapsort - Technische Fakultät · Heap-Datenstruktur • Array • kann interpretiert werden als...
-
Upload
trinhtuyen -
Category
Documents
-
view
225 -
download
0
Transcript of Heapsort - Technische Fakultät · Heap-Datenstruktur • Array • kann interpretiert werden als...
• 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
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:
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)
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