Do 17.06.2010 - Lehrstuhl für Effiziente Algorithmen

Werbung
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
Herunterladen