• Keine Ergebnisse gefunden

SORTIEREN  MIT  BÄUMEN  -­‐   HEAPSORT

N/A
N/A
Protected

Academic year: 2021

Aktie "SORTIEREN  MIT  BÄUMEN  -­‐   HEAPSORT"

Copied!
27
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Algorithmen  &  Datenstrukturen   Prof.  Dr.  Wolfgang  Schramm  

SORTIEREN  MIT  BÄUMEN  -­‐  

HEAPSORT  

10.  Kapitel  –  Teil  3  

(2)

1  

Übersicht  

0. Einführung 1.  Algorithmen

2.  Eigenschaften von Programmiersprachen 3.  Algorithmenparadigmen

4.  Suchen & Sortieren 5.  Hashing

6.  Komplexität von Algorithmen 7.  Abstrakte Datentypen (ADT) 8.  Listen

9.  Bäume

10.  Graphen

(3)

2  

Lernziele  des  Kapitels  

o 

Verstehen,  wie  ein  Heap  aufgebaut  ist  ?  

o 

Kennenlernen  wie  ein  Heap  aufgebaut   wird.  

o 

Kennenlernen  wie  ein  Heap  sorKert  wird.  

o 

2  Heap-­‐ImplemenKerungen   kennenlernen.  

2

(4)

3  

Inhalt  

o 

Übersicht  

o 

Die  Datenstruktur  Heap  

o 

Das  SorKeren  

o 

Beispiel  

o 

Komplexität  

o 

Vor-­‐  und  Nachteile  

o 

Hinweise  zur  ImplemenKerung  

 

(5)

4  

HeapSort  

 

SorKerverfahren  1964  entwickelt  von  J.W.J  Williams  (von    Floyd  

„verbessert“).  

 

SorKeren  in  2  Schri_en:  

 

 1.  In  besKmmte  Datenstruktur  bringen   à  HEAP    

 2.  vorstrukturierte  Daten  sorKeren   à  SORT  

 

(6)

5  

Die  Datenstruktur  HEAP  

Einsatzbereich:  Häufig  bei  Vorrangswarteschlangen  oder  sog.  Greedy   Algorithmen  (z.B.  Dijkstra).  

 

Arten  von  Heaps:  

o 

Fibonacci-­‐Heap  

o 

Binomial-­‐Heap  

o 

Treap  

o 

Binärer  Heap    

à  unterschiedliche  Laufzeitverhalten  für  die  unterschiedlichen   OperaKonen.  

Hier nur binärer Heap.

(7)

6  

Heap-­‐Eigenschaeen  

Es  gibt  für  den  binären  Heap  zwei  ImplemenKerungsvarianten  :     MaxHeap  und  MinHeap  

 

EigenschaJen:  

o 

Ein  binärer  MaxHeap  besteht  aus  einem  Binärbaum  bei  dem   bis  auf  das  letzte  Level  alle  vollständig  ausgefüllt  sind.  Das   letzte  Level  muss  von  links  aufgefüllt  sein.  

o 

Für  alle  inneren  Knoten  muss  gelten:  

 ∀  x

1

 ∈  L,    x

2  

∈  L+1  (x

1  

 ist  Elternknoten  von  x

2

):  x

1

 ≥  x

2

 

 

Oder:  Ein  Binärbaum  stellt  einen  MaxHeap  dar,  wenn    alle  

 Elternknoten  größer  oder  gleich  ihren  Kinderknoten  sind.  

 

(8)

7  

L1 L0

L2

L3

Heap:  Beispiel  

(9)

8  

Heap  auhauen  

2  Verfahren    

o 

von  J.W.J.  Williams  mit  einer  Komplexität  von  O(n*log(n)),  

o 

von  R.W.  Floyd  mit  einer  Komplexität  O(n).  

Hierfür  benöKgt:  Methode  zum  Versickern  eines  Knotens.  

o 

Wird  sowohl  für  das  Erstellen  des  Heaps  benöKgt  als  auch  für  die   SorKerung.  

o 

Wird  das  Wurzelelement  enkernt  und  durch  ein  neues  Element   ersetzt,  ist  nicht  mehr  gewährleistet,  ob  die  Heap-­‐Bedingungen   noch  erfüllt  sind.    

o 

Man  nutzt  hierzu  die  Eigenschae  aus  das  die  beiden  Teilbäume   noch  die  Heapeigenschae  besitzen  und  lässt  das  neue  Element   versickern.  

 

(10)

9  

1.  Prüfen ob Heapeigenschaft verletzt.

2.  Prüfen ob das Element einen oder zwei Söhne besitzt .

3.  Wählen des größeren Sohnes und vertauschen, also zum neuen Vergleichselement machen.

Heap:  Versickern  

(11)

10  

Heap:  Erstellen  

o  Der  Baum  hat  n  Elemente.  

o  Baue  zuerst  Heaps  der  Höhe  2  auf;  beginne  dazu  bei  Element  n/2  –  1.  

o  Danach  werden  Heaps  der  nächst  größeren  Höhe  aufgebaut.  

o  Führe  für  dieses  Element  die  FunkKon  Versickern  aus,  falls  Heapbedingung  für  dieses   nicht  erfüllt.  

o  Wähle  danach  die  Elemente  n/2  -­‐2,  n/2-­‐3,  .  .  .  ,  0.  

o  Erklärung:  

o  Auf  dem  letzten  Level  hat  ein  binärer  Baum  max.  (n+1)/2  Elemente.    

o  Erstellt  man  nun  Heaps  der  Höhe  2,  so  nimmt  man  die  direkt  über  den  Blä_ern   liegenden  Knoten.  Also  Level  n-­‐1    Das  letzte  Element  hier  hat  die  PosiKon  n/2  –  1.  

o  Diese  Knoten  lässt  man  nun  nach  und  nach  versickern  bis  man  bei  der  Wurzel   angekommen  ist.  

(12)

11  

2

Heap:  Beispiel  

(13)

12  

Heap:  Beispiel  

(14)

13  

Heap:  Beispiel  

(15)

14  

Heap:  Beispiel  

(16)

15  

Heap:  Beispiel  

(17)

16  

Heap:  Beispiel  

(18)

17  

Aus dem nun vorliegenden (max)Heap und der Methode des Versickern lässt sich leicht ein Sortierverfahren konstruieren.

Vorgehen:

1)  Vertausche das Wurzelelement mit dem letzten Element der Blattebene.

2)  Lass dieses Element nun versickern ( bis n-1) falls Heapbedingungen verletzt.

3)  Betrachte nun wie beim Selectionsort nur noch die Menge n-1.

4)  Beginne wieder bei 1 bis die zu betrachtende Menge 0 ist.

Heap:  SorKeren  

(19)

18  

2.1 Vertauschen / versickern

2.2 Wurzel: 7 1. Ausgangsheap

Heap:  SorKeren  –  Beispiel  (MinHeap)  

(20)

19  

3.1 Vertauschen / versickern

4.1 Vertauschen und versickern

3.2 neue Wurzel: 6

Heap:  SorKeren  -­‐  Beispiel  

(21)

20  

4.2 Wurzel: 5 5.1 vertauschen und versickern

5.2 neue Wurzel: 4

Heap:  SorKeren  -­‐  Beispiel  

(22)

21  

6.2 neue Wurzel: 3 6.1 vertauschen und versickern

7. vertauschen ( kein versickern)

Heap:  SorKeren  -­‐  Beispiel  

(23)

22  

8. Heap besteht nur noch aus einem Element

à kein versickern

Fertig

Heap:  SorKeren  -­‐  Beispiel  

(24)

23  

Aufbau des Heaps benötigt O(n).

Versickern benötigt O(log(n)) und dies n-mal.

GESAMT

à O(n)+n*O(log(n)) = O(n*log(n))

Komplexität  

(25)

24  

+ worst case immer noch O(n*log(n))

+ internes Sortierverfahren (in-place)

+ Implementierung mit Array à wenig Code

- Im Vergleich zum Quicksort nur im worst case besser, der selten eintritt

- nicht stabil

Vor-­‐  /  Nachteile  

(26)

25  

Versickern:

Index eines Knotens: i

Index der Söhne: 2i+1 <= n-1 und 2i+2 <= n-1

Heapsort

in jedem Durchlauf: aktuelle array.length-1

Array-­‐Darstellung  

(27)

26  

Literatur  

26 Quellen:

[Wilj64] J. W. J. Williams. Algorithm 232 (heapsort). Communications of the ACM, 7:347-348, 1964

Thomas Ottmann und Peter Widmayer: "Algorithmen und Datenstrukturen". 3. Auflage.

1996. Spektrum Akademischer Verlag, Heidelberg

Für die Beispiele:

http://www.linux-related.de/index.html?/coding/sort/sort_heap.htm

Referenzen

ÄHNLICHE DOKUMENTE

[r]

A systematic procedure is developed to allow rapid identification of design parameters without the need for lengthy numerical simulation, using the lumped element, stiffness matrix

The arithmetic phase, executed as the division of one signed quantity by another (binary point of no consequence), halts when the SC counts up to O. MQOO receives

In this case the proportion of the golden section can be constructed in a square lattice, using circles going through lattice points.?. This gives

Es ist der Leserin oder dem Leser überlassen, wie ob sie oder er die Figur der Abbil- dung 5 als Folge von Rhomben mit dem Spitzenwinkel 72° oder als eine Ecke eines 5d-

In der ersten Spirale (Abb. 2) haben wir zuinnerst ein rotes Feld, anschließend drei grü- ne Felder, dann fünf rote Felder, dann sieben grüne Felder, dann neun rote Felder und

Beschriften Sie bitte im Bild die beiden Elektroden Anode und Kathode.. Hinweis: gemäss Definition ist die Anode dort wo die

Ein radioaktives Element X zerfällt mit einer Halbwertszeit von 8