• Keine Ergebnisse gefunden

Operationen in Fibonacci-Heaps:

N/A
N/A
Protected

Academic year: 2021

Aktie "Operationen in Fibonacci-Heaps:"

Copied!
17
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Operationen in Fibonacci-Heaps:

6

DecreaseKey(x, ∆):

entferne x samt Unterbaum

f¨ uge x mit Unterbaum in die Wurzelliste ein k(x) := k(x) − ∆; aktualisiere Min-Pointer

if P (x)=NIL then return fi co x ist Wurzel oc while true do

x := P (x)

if P (x)=NIL then return fi co x ist Wurzel oc if Markierung(x)=0 then Markierung(x):=1; return else

h¨ ange x samt Unterbaum in Wurzelliste entferne Markierung von x (da x nun Wurzel) fi

od

Kosten: O(1 + #kask. Schnitte)

EADS 5.2 Fibonacci-Heaps 190/530

ľErnst W. Mayr

(2)

Bemerkung:

Startet man mit einem leeren Fibonacci-Heap und werden ausschließlich die aufbauenden Operationen Insert, Merge und FindMin angewendet, so k¨ onnen nur Binomialb¨ aume enstehen. In diesem nat¨ urlichen Fall liegt also stets ein Binomialwald vor, der jedoch i.a. nicht aufger¨ aumt ist. Das heißt, es existieren ev.

mehrere Binomialb¨ aume B

i

desselben Wurzelgrads, die nicht paarweise zu B

i+1

-B¨ aumen verschmolzen sind.

Dies geschieht erst bei der Operation ExtractMin. Man beachte, dass nur nach einer solchen Operation momentan ein Binomial Heap vorliegt, ansonsten nur ein Binomialwald.

Treten auch DecreaseKey- und/oder Delete -Operationen auf, so

sind die B¨ aume i.a. keine Binomialb¨ aume mehr.

(3)

5.2.2 Amortisierte Kostenanalyse f¨ ur Fibonacci-Heaps Kostenanalyse f¨ ur Folgen von Operationen:

i) Summieren der worst-case-Kosten w¨ are zu pessimistisch. Der resultierende Wert ist i.a. zu groß.

ii) average-case:

Aufwand f¨ ur Analyse sehr hoch

welcher Verteilung folgen die Eingaben?

die ermittelten Kosten stellen keine obere Schranke f¨ ur die tats¨ achlichen Kosten dar!

iii) amortisierte Kostenanalyse:

average-case-Analyse ¨ uber worst-case-Operationenfolgen

EADS 5.2 Fibonacci-Heaps 192/530

ľErnst W. Mayr

(4)

Definition 47

Wir f¨ uhren f¨ ur jede Datenstruktur ein Bankkonto ein und ordnen ihr eine nichtnegative reelle Zahl bal, ihr Potenzial (bzw.

Kontostand) zu. Die amortisierten Kosten f¨ ur eine Operation ergeben sich als Summe der tats¨ achlichen Kosten und der Ver¨ anderung des Potenzials (∆bal), welche durch die Operation verursacht wird:

t

i

= tats¨ achliche Kosten der i-ten Operation

∆bal

i

= bal

i

− bal

i−1

: Ver¨ anderung des Potenzials durch die i-te Operation

a

i

= t

i

+ ∆bal

i

: amortisierte Kosten der i-ten Operation

m = Anzahl der Operationen

(5)

Falls bal

m

≥ bal

0

(was bei bal

0

= 0 stets gilt):

m

X

i=1

a

i

=

m

X

i=1

(t

i

+ ∆bal

i

) =

m

X

i=1

t

i

+ bal

m

− bal

0

m

X

i=1

t

i

In diesem Fall sind die amortisierten Kosten einer Sequenz eine obere Schranke f¨ ur die tats¨ achlichen Kosten.

EADS 5.2 Fibonacci-Heaps 194/530

ľErnst W. Mayr

(6)

Anwendung auf Fibonacci-Heaps:

Wir setzen

bal := # B¨ aume + 2#(markierte Knoten 6= Wurzel)

Lemma 48

Sei x ein Knoten im Fibonacci-Heap mit Rang(x) = k. Seien die

Kinder von x sortiert in der Reihenfolge ihres Anf¨ ugens an x. Dann

ist der Rang des i-ten Kindes ≥ i − 2.

(7)

Beweis:

Zum Zeitpunkt des Einf¨ ugens des i-ten Kindes ist Rang(x) = i − 1.

Das einzuf¨ ugende i-te Kind hat zu dieser Zeit ebenfalls Rang i − 1.

Danach kann das i-te Kind h¨ ochstens eines seiner Kinder verloren haben

⇒ Rang des i-ten Kindes ≥ i − 2 .

EADS 5.2 Fibonacci-Heaps 196/530

ľErnst W. Mayr

(8)

Satz 49

Sei x Knoten in einem Fibonacci-Heap, Rang(x) = k. Dann enth¨ alt der (Unter-)Baum mit Wurzel x mindestens F

k+2

Elemente, wobei F

k

die k-te Fibonacci-Zahl bezeichnet.

Da

F

k+2

≥ Φ

k

f¨ ur Φ = (1 + √

5)/2 (Goldener Schnitt), ist der Wurzelrang also logarithmisch in der Baumgr¨ oße beschr¨ ankt.

Wir setzen hier folgende Eigenschaften der Fibonacci-Zahlen F

k

voraus:

F

k+2

≥ Φ

k

f¨ ur Φ = 1 + √ 5

2 ≈ 1, 618034 ; F

k+2

= 1 +

k

X

i=0

F

i

.

(9)

Beweis:

Sei f

k

die minimale Anzahl von Elementen in einem

” Fibonacci-Baum“ mit Wurzel-Rang k.

Aus dem vorangehenden Lemma folgt:

f

k

≥ f

k−2

+ f

k−3

+ . . . + f

0

+ 1

|{z}

1. Kind

+ 1

|{z}

Wurzel

,

also (zusammen mit den offensichtlichen Anfangsbedingungen f

0

= 1 bzw. f

1

= 2 und den obigen Eigenschaften der

Fibonacci-Zahlen):

f

k

≥ F

k+2

EADS 5.2 Fibonacci-Heaps 198/530

ľErnst W. Mayr

(10)

Satz 50

Die amortisierten Kosten der Fibonacci-Heap-Operationen (a

i

= t

i

+ ∆bal

i

) sind:

1

Insert: t = O(1), ∆bal = +1 ⇒ a = O(1).

2

Merge: t = O(1), ∆bal = 0 ⇒ a = O(1).

3

FindMin: t = O(1), ∆bal = 0 ⇒ a = O(1).

(11)

Satz 50

Die amortisierten Kosten der Fibonacci-Heap-Operationen (a

i

= t

i

+ ∆bal

i

) sind:

4

Delete (nicht Min-Knoten):

Einf¨ ugen der Kinder von x in Wurzelliste:

∆bal = Rang(x)

Jeder kask. Schnitt erh¨ oht #B¨ aume um 1

∆bal = #kask. Schnitte

Jeder Schnitt vernichtet eine Markierung

∆bal = −2 · #kask. Schnitte

Letzter Schnitt erzeugt ev. eine Markierung

∆bal = 2

⇒ Jeder kask. Schnitt wird vom Bankkonto bezahlt und verschwindet amortisiert

 

 

 

 

 

 

 

 

 

 

 

 

 

 

⇒ a = O(log n)

EADS 199/530

ľErnst W. Mayr

(12)

Satz 50

Die amortisierten Kosten der Fibonacci-Heap-Operationen (a

i

= t

i

+ ∆bal

i

) sind:

5

ExtractMin:

Einf¨ ugen der Kinder von x in Wurzelliste:

∆bal = Rang(x)

Jeder Link-Schritt verkleinert #B¨ aume um 1

∆bal = −#Link-Schritte

⇒ Jeder Link-Schritt wird vom Bankkonto bezahlt und verschwindet amortisiert

 

 

 

 

 

 

⇒ a = O(log n)

(13)

Satz 50

Die amortisierten Kosten der Fibonacci-Heap-Operationen (a

i

= t

i

+ ∆bal

i

) sind:

6

DecreaseKey: Es ist ∆bal ≤ 4 − (#kaskadierende Schnitte).

Jeder kask. Schnitt erh¨ oht #B¨ aume um 1

∆bal = #kask. Schnitte

Jeder Schnitt vernichtet eine Markierung

∆bal = −2 · #kask. Schnitte

Letzter Schnitt erzeugt ev. eine Markierung

∆bal = 2

 

 

 

 

 

 

⇒ a = O(1)

Beweis:

s.o.

EADS 5.2 Fibonacci-Heaps 199/530

ľErnst W. Mayr

(14)

Literatur zu Fibonacci-Heaps:

Michael L. Fredman, Robert Endre Tarjan:

Fibonacci heaps and their uses in improved network optimization algorithms

Journal of the ACM 34(3), pp. 596–615 (1987)

James R. Driscoll, Harold N. Gabow, Ruth Shrairman, Robert E. Tarjan:

Relaxed heaps: An alternative to Fibonacci heaps with applications to parallel computation

Commun. ACM 31(11), pp. 1343–1354 (1988) Mikkel Thorup:

Equivalence between priority queues and sorting

Journal of the ACM 54(6), Article 28 (2007)

(15)

6. Sich selbst organisierende Datenstrukturen 6.1 Motivation

einfach, wenig Verwaltungsoverhead effizient im amortisierten Sinn

EADS 6.1 Motivation 201/530

ľErnst W. Mayr

(16)

6.2 Sich selbst organisierende lineare Listen

Bei der Implementierung von W¨ orterb¨ uchern ist auf m¨ oglichst effiziente Weise eine Menge von bis zu n Elementen zu

organisieren, dass die folgenden Operationen optimiert werden:

Einf¨ ugen L¨ oschen

Vorhandensein ¨ uberpr¨ ufen

Dabei soll die Effizienz der Implementierung bei beliebigen

Sequenzen von m Operationen untersucht werden. Die Menge wird als unsortierte Liste dargestellt.

? s - s - s - pppppppppppppppppp - s

(17)

Operationen:

1

Access(i): Suchen des Elements i:

Die Liste wird von Anfang an durchsucht, bis das gesuchte Element gefunden ist. F¨ ur das i-te Element betragen die tats¨ achlichen Kosten i Einheiten.

2

Insert(i): Einf¨ ugen des Elements i:

Die Liste wird von Anfang an durchsucht, und wenn sie vollst¨ andig durchsucht wurde und das Element nicht enthalten ist, so wird es hinten angef¨ ugt. Dies erfordet (n + 1) Schritte, wenn die L¨ ange der Liste n ist.

3

Delete(i): L¨ oschen des Elements i:

Wie bei Access wird die Liste zuerst durchsucht und dann das betreffende Element gel¨ oscht. Dies kostet im Falle des i-ten Elements i Schritte.

Nach Abschluss einer jeden Operation k¨ onnen Umordnungsschritte stattfinden, die sp¨ atere Operationen ev. beschleunigen.

EADS 6.2 Sich selbst organisierende lineare Listen 203/530

ľErnst W. Mayr

Referenzen

ÄHNLICHE DOKUMENTE

f¨ur Dijkstras Algorithmus zum Finden k¨urzester Pfade zeigen, dass dieser eine Laufzeit von O(|E| + |V | log |V |) erreichen kann, wenn die Priority Queue durch einen

 verschiebe das (neue) Element der Wurzel in einen ihrer Unterbäume, damit das Array wieder ein Heap wird (DownHeap).  wiederhole Schritt 2 bis das Array

 verschiebe das (neue) Element der Wurzel in einen ihrer Unterbäume, damit das Array wieder ein Heap wird (DownHeap)G.  wiederhole Schritt 2 bis das Array

 Jede rekursive Funktion kann mit Iteration geschrieben werden.  Compiler implementiert Funktionen mit

Vor allem dann, wenn man Heaps niveauweise in einem Array speichert, können die beiden Ope- rationen sehr effizient ausgeführt werden – sie verwirren aber einen unbedarften

Vor allem dann, wenn man Heaps niveauweise in einem Array speichert, können die beiden Ope- rationen sehr effizient ausgeführt werden – sie verwirren aber einen unbedarften

F Reduzierende Unterr¨ aume.

kontinuierlichen Verteilung auf einem Intervall [a,b] mit ¨uberall positiver Dichte f ist der Median m die durch die Bedingung P([a,m]) = 1 2 eindeutig