Grundlagen: Algorithmen und Datenstrukturen Prof. Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Sommersemester 2010 H. Täubig (TUM) GAD SS’10 1 / 261 Priority Queues Übersicht 1 Priority Queues Binomial Heaps H. Täubig (TUM) GAD SS’10 248 / 261 Priority Queues Binomial Heaps Binomial Heaps basieren auf Binomial-Bäumen Form-Invariante: r=0 r=1 r=2 r => r+1 Heap-Invariante: prio(Vater) ≤ prio(Kind) H. Täubig (TUM) GAD SS’10 249 / 261 Priority Queues Binomial Heaps Binomial-Bäume Beispiel Korrekte Binomial-Bäume: r=0 4 r=1 4 10 r=2 r=3 4 6 4 10 8 20 7 6 11 8 10 24 H. Täubig (TUM) GAD SS’10 250 / 261 Priority Queues Binomial Heaps Binomial-Baum: Merge 4 5 Wurzel mit größerem Wert wird neues Kind der Wurzel mit kleinerem Wert! (Heap-Bedingung) 17 13 16 22 19 9 20 7 6 11 8 10 24 23 4 5 aus zwei Br−1 wird ein Br 17 13 16 22 19 9 20 7 6 11 8 10 24 23 H. Täubig (TUM) GAD SS’10 251 / 261 Priority Queues Binomial Heaps Binomial-Baum: Löschen der Wurzel (deleteMin) 4 5 aus einem Br 17 13 16 22 19 9 20 7 6 11 8 10 24 23 4 5 werden Br−1 , . . . , B0 17 13 16 22 19 9 20 7 6 11 8 10 24 23 H. Täubig (TUM) GAD SS’10 252 / 261 Priority Queues Binomial Heaps Binomial-Baum: Knotenanzahl 4 5 Br hat auf Level k ∈ {0, . . . , r} genau kr Knoten Warum? 17 Bei Bau des Br aus 2 Br−1 gilt: ! ! ! r r −1 r −1 = + k k −1 k 23 Insgesamt: Br hat 2r Knoten 13 16 22 19 9 20 7 6 11 8 10 24 4 5 17 13 16 22 19 9 20 7 6 11 8 10 24 23 H. Täubig (TUM) GAD SS’10 253 / 261 Priority Queues Binomial Heaps Binomial-Bäume Eigenschaften von Binomial-Bäumen: r=0 r=1 r=2 r => r+1 Binomial-Baum vom Rang r hat 2r Knoten hat maximalen Grad r (Wurzel) zerfällt bei Entfernen der Wurzel in r Binomial-Bäume von Rang 0 bis r − 1 hat auf Level ` ∈ {0, . . . , r} genau `r Knoten H. Täubig (TUM) GAD SS’10 254 / 261 Priority Queues Binomial Heaps Binomial Heap Binomial Heap: verkettete Liste von Binomial-Bäumen pro Rang maximal 1 Binomial-Baum Zeiger auf Wurzel mit minimalem Prioritätswert 2 4 5 7 9 (Zahlen: Ränge) H. Täubig (TUM) GAD SS’10 255 / 261 Priority Queues Binomial Heaps Binomial Heap Beispiel Korrekter Binomial Heap: min−Zeiger 14 3 4 12 Binomial−Baum vom Rang r=1 20 7 6 11 8 10 24 H. Täubig (TUM) GAD SS’10 256 / 261 Priority Queues Binomial Heaps Merge von zwei Binomial Heaps wie Binäraddition: 2 5 10100100 7 2 3 + 101100 5 4 6 = 11010000 7 Aufwand für Merge: O(log n) H. Täubig (TUM) GAD SS’10 257 / 261 Priority Queues Binomial Heaps Binomial Heaps Bi : Binomial-Baum mit Rang i Operationen: merge: O(log n) insert(e): Merge mit B0 , Zeit O(log n) min(): spezieller Zeiger, Zeit O(1) deleteMin(): sei das Minimum in Bi , durch Löschen der Wurzel zerfällt der Binomialbaum in B0 , . . . , Bi−1 Merge mit dem restlichen Binomial Heap kostet O(log n) H. Täubig (TUM) GAD SS’10 258 / 261 Priority Queues Binomial Heaps Binomial Heaps Weitere Operationen: decreaseKey(e, k ): Zeit: O(log n) siftUp-Operation in Binomial-Baum von e remove(e): setze prio(e) = −∞ und wende siftUp-Operation auf e an bis e in der Wurzel, dann weiter wie bei deleteMin Zeit: O(log n) H. Täubig (TUM) GAD SS’10 259 / 261 Priority Queues Binomial Heaps Verbesserungen Fibonacci-Heap: Verbesserung von Binomial Heaps, so dass amortisierte Kosten von decreaseKey O(1) sind ganzzahlige Werte: Priority Queues bekannt, die für decreaseKey und insert Zeit O(1) und für deleteMin Zeit O(log log n) benötigen H. Täubig (TUM) GAD SS’10 260 / 261