• Keine Ergebnisse gefunden

B5. Heaps und Heapsort

N/A
N/A
Protected

Academic year: 2022

Aktie "B5. Heaps und Heapsort"

Copied!
7
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Algorithmen und Datenstrukturen

B5. Heaps und Heapsort

Marcel L¨ uthi and Gabriele R¨ oger

Universit¨ at Basel

28. M¨ arz 2019

M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 28. M¨arz 2019 1 / 28

Algorithmen und Datenstrukturen

28. M¨ arz 2019 — B5. Heaps und Heapsort

B5.1 Einf¨ uhrung B5.2 Heaps

B5.3 Warteschlangen mit Heaps B5.4 Heapsort

M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 28. M¨arz 2019 2 / 28

B5. Heaps und Heapsort Einf¨uhrung

B5.1 Einf¨ uhrung

B5. Heaps und Heapsort Einf¨uhrung

Ausblick auf Vorlesung

I Die Datenstruktur Heap

I Heaps zur Implementation von Priorityqueues

I Heapsort

(2)

B5. Heaps und Heapsort Einf¨uhrung

Informatiker des Tages

Robert W. Floyd

I Gewinner Turing Award (1978) I U.a. f¨ ur Arbeit an Analyse von

Algorithmen

I Entwickler des Treesort Algorithmus (Vorg¨ anger von Heapsort)

I Verbesserung von Heapsort, nachdem dieser von J. Williams entwickelt wurde.

I Auch bekannt f¨ ur: Floyd-Warshall Algorithmus

I Findung von k¨ urzesten Pfaden in Graphen.

Floyd, R. W. (1979). ”The paradigms of programming”.

Communications of the ACM. 22 (8).

M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 28. M¨arz 2019 5 / 28

B5. Heaps und Heapsort Heaps

B5.2 Heaps

M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 28. M¨arz 2019 6 / 28

B5. Heaps und Heapsort Heaps

Bijektion - Array / Vollst¨ andiger Bin¨ arbaum

I Jedes Array kann als vollst¨ andiger Bin¨ arbaum interpretiert werden:

I Linker Teilbaum: Index Wurzel * 2 I Rechter Teilbaum: Index Wurzel * 2 + 1

Quelle: Abbildung 2.26, Algorithms, Sedgewick & Wayne

B5. Heaps und Heapsort Heaps

Heap

Definition: Heap

Ein bin¨ arer Baum / Array ist Heap geordnet, wenn der Schl¨ ussel in jedem Knoten gr¨ osser gleich dem Schl¨ ussel seiner beiden Kindern (sofern vorhanden) ist.

Quelle: Abbildung 2.25, Algorithmen, Wayne & Sedgewick

(3)

B5. Heaps und Heapsort Heaps

Heap Ordnung

Theorem

Der gr¨ osste Schl¨ ussel in einem Heap-geordneten Bin¨ arbaum befindet sich an der Wurzel.

Beweis.

Induktion ¨ uber die Baumgr¨ osse

M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 28. M¨arz 2019 9 / 28

B5. Heaps und Heapsort Heaps

Bin¨ arer Heap

Definition: Bin¨ arer Heap

Ein bin¨ arer Heap ist eine Sammlung von Schl¨ usseln, die in einem vollst¨ andigen Heap-geordneten Bin¨ arbaum angeordnet sind und in einem Array ebenenweise repr¨ asentiert werden (das erste Feld des Arrays wird nicht verwendet).

M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 28. M¨arz 2019 10 / 28

B5. Heaps und Heapsort Heaps

Bin¨ arer Heap

Quelle: Abbildung 2.26, Algorithmen, Wayne & Sedgewick

B5. Heaps und Heapsort Warteschlangen mit Heaps

B5.3 Warteschlangen mit Heaps

(4)

B5. Heaps und Heapsort Warteschlangen mit Heaps

Priority Queue ADT

c l a s s M a x P Q [ I t e m ]:

# E l e m e n t e i n f u e g e n

def i n s e r t ( k : I t e m ) - > N o n e

# G r o e s s t e s E l e m e n t z u r u e c k g e b e n def max () - > I t e m

# G r o e s s t e s E l e m e n t e n t f e r n e n u n d z u r u e c k g e b e n def d e l M a x () - > I t e m

# I s t d i e Q u e u e l e e r ? def i s E m p t y () - > b o o l

# A n z a h l E l e m e n t e in d e r P r i o r i t y Q u e u e def s i z e () - > int

M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 28. M¨arz 2019 13 / 28

B5. Heaps und Heapsort Warteschlangen mit Heaps

Beobachtung

Array implementation von Max-heap hat gr¨ osstes Element immer an Stelle 1 .

I Implementation von max ist trivial

Problem: Wir m¨ ussen wenn wir beim insert und delMax die Heapbedingung erf¨ ullen k¨ onnen.

M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 28. M¨arz 2019 14 / 28

B5. Heaps und Heapsort Warteschlangen mit Heaps

Beobachtung (2)

I Array implementation erlaubt uns in konstanter Zeit zu jedem Kind den Elternknoten und von jedem Elternknoten alle Kinder finden ...

... ohne dabei explizite Verweise verwalten zu m¨ ussen . I Der Baum hat die H¨ ohe blog 2 (N )c

Plan

Durch geschicktes Vertauschen der Eltern/Kinder in O(log 2 (N )) Operationen nach Entfernen oder Einf¨ ugen eines Elements die Heapbedingung wiederherstellen.

B5. Heaps und Heapsort Warteschlangen mit Heaps

Element einf¨ ugen

I Blatt wird an letzter Stelle im Array eingef¨ ugt

I entspricht Blatt ganz rechts

I Heap Bedingung wird durch ausf¨ uhren von swim

wiederhergestellt

Quelle: Abbildung 2.29: Algorithmen, Sedgewick &

Wayne

(5)

B5. Heaps und Heapsort Warteschlangen mit Heaps

Die Operation swim

I Knoten an Position k in Array a schwimmt nach oben bis Heap Bedingung wieder erf¨ ullt ist.

I Braucht maximal log 2 (N) + 1 Vergleiche.

def s w i m ( a , k ):

w h i l e k > 1 and a [ k /2] < a [ k ]:

a [ k /2] , a [ k ] = a [ k ] , a [ k /2]

k = k /2

Quelle: Abbildung 2.29: Algorithmen, Sedgewick & Wayne

M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 28. M¨arz 2019 17 / 28

B5. Heaps und Heapsort Warteschlangen mit Heaps

Gr¨ osstes Element entfernen

I Wurzel (gr¨ osstes Element) wird entfernt

I Blatt ganz rechts wird an Wurzel gesetzt

I Heap Bedingung wird durch ausf¨ uhren von sink

wiederhergestellt

Quelle: Abbiludung 2.29: Algorithmen, Sedgewick &

Wayne

M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 28. M¨arz 2019 18 / 28

B5. Heaps und Heapsort Warteschlangen mit Heaps

Die Operation sink

I Knoten an Position k in Array a sinkt nach unten bis Heap Bedingung wieder erf¨ ullt ist.

I Element wird mit gr¨ osserem Kind vertauscht.

I Braucht maximal 2 log 2 (N ) Vergleiche.

def s i n k ( a , k ):

w h i l e 2 * k <= len( a ):

j = 2 * k

if j < len ( a ) and a [ j ] < a [ j + 1 ] : j += 1

if not a [ k ] < a [ j ]:

b r e a k

a [ j ] , a [ k ] = a [ k ] , a [ j ] k = j

Quelle: Abbiludung 2.29: Algorithmen, Sedgewick & Wayne

B5. Heaps und Heapsort Warteschlangen mit Heaps

Implementation

Juypter Notebooks: Heap.ipynb

(6)

B5. Heaps und Heapsort Warteschlangen mit Heaps

Komplexit¨ at

Theorem

In einer Vorrangwarteschlange mit N Elementen ben¨ otigen die Heap-Algorithmen zum Einf¨ ugen eines neuen Elements nicht mehr als 1 + log 2 (N ) Vergleiche und zum Entfernen des gr¨ ossten Elements nicht mehr als 2 log 2 (N ) Vergleiche.

M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 28. M¨arz 2019 21 / 28

B5. Heaps und Heapsort Heapsort

B5.4 Heapsort

M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 28. M¨arz 2019 22 / 28

B5. Heaps und Heapsort Heapsort

Ein Sortieralgorithmus

I Gegeben, ein unsortiertes Array der l¨ ange N .

I F¨ uge alle Elemente der Reihe nach in einen Heap ein.

I Entferne N mal das gr¨ osste Element und schreibe es zur¨ uck ins Array.

Komplexit¨ at

Die Prozedur hat garantierte Laufzeitkomplexit¨ at von O(n log 2 (n)).

B5. Heaps und Heapsort Heapsort

Heapsort

I Idee: Geschicktes verwenden von swim und sink l¨ asst uns heapsort in-place verwenden.

I Prozedur verl¨ auft in zwei Phasen:

1

Heap Konstruktion (rechts nach Links)

2

Absteigendes Sortieren durch sukkzesives Tauschen von gr¨ osstem Element

def h e a p s o r t ( a ):

N = len ( a ) -1

for k in r a n g e ( int ( N /2) , 0 , -1):

s i n k ( a , k ) w h i l e N > 1:

a [1] , a [ N ] = a [ N ] , a [1]

N -= 1

s i n k ( a , 1 , N )

(7)

B5. Heaps und Heapsort Heapsort

Heapsort

Quelle: Abbildung 2.31, Algorithmen, Wayne & Sedgewick

M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 28. M¨arz 2019 25 / 28

B5. Heaps und Heapsort Heapsort

Implementation

Jupyter Notebooks: Heap.ipynb

M. L¨uthi, G. R¨oger (Universit¨at Basel) Algorithmen und Datenstrukturen 28. M¨arz 2019 26 / 28

B5. Heaps und Heapsort Heapsort

Bemerkungen

I Heapsort ist theoretisch wichtig:

I Optimal hinsichtlich Zeit und Speichernutzung I Laufzeit O(n log n).

I Zus¨ atzlicher Speicher (O(1)) I Praktische Bedeutung eher klein

I Nutzt CPU Cache nicht effizient, da entfernte Elemente ausgetauscht werden.

I Heaps sind aber f¨ ur Priority Queues sehr wichtig!

B5. Heaps und Heapsort Heapsort

Zusammenfassung

I Heap-sort Algorithmus von Datenstruktur ”getrieben”

I Nutzt nicht triviale Zwischenschritte und Hilfsstrukturen I Nutzung von Eigenschaften vollst¨ andiger bin¨ are B¨ aume I Effiziente Implementation mittels Arrays

I Heap Bedingung um gr¨ osstes Element zu erhalten I Verst¨ andnis von Heap ist zentral f¨ ur Algorithmus

I Danach ist Algorithmus einfach zu verstehen I Laufzeitanalyse trivial

Show me your code and conceal your data structures, and I shall continue to be mystified. Show me your data structures, and I

won’t usually need your code ; it’ll be obvious

Fred Brooks

Referenzen

ÄHNLICHE DOKUMENTE

Program Verification 8.6 Verifying procedural, heap-manipulating programs.. Verifying

Ein (bin¨ arer) min-Heap ist ein vollst¨ andiger bin¨ arer Baum, bei dem gilt, dass der Wert in jedem Knoten kleiner gleich dem Wert seiner beiden Kindern (sofern vorhanden)

Ein (bin¨ arer) min-Heap ist ein vollst¨ andiger bin¨ arer Baum, bei dem gilt, dass der Wert in jedem Knoten kleiner gleich dem Wert seiner beiden Kindern (sofern vorhanden)

Ein bin¨ arer Baum / Array ist Heap geordnet, wenn der Schl¨ ussel in jedem Knoten gr¨ osser gleich dem Schl¨ ussel seiner beiden Kindern (sofern vorhanden) ist.. Quelle:

Ein bin¨ arer Heap ist eine Sammlung von Schl¨ usseln, die in einem vollst¨ andigen Heap-geordneten Bin¨ arbaum angeordnet sind und in einem Array ebenenweise repr¨ asentiert

Ein bin¨ arer Heap ist eine Sammlung von Schl¨ usseln, die in einem vollst¨ andigen Heap-geordneten Bin¨ arbaum angeordnet sind und in einem Array ebenenweise repr¨ asentiert

Alle V¨ ater sind kleiner als ihre

• int getId() liefert eine Zahl die den Prozess eindeutig identifiziert; vergeben Sie für jedes neue Objekt der Klasse Process eine fortlaufende Nummer; der erste mit new