0.1 Amortisierte Analyse

Werbung
0.1 Amortisierte Analyse
Nehmen wir an, wir haben nur eine Art von Operationen P auf einer Datenstruktur. Wenn T (n)
die Zeit für n aufeinanderfolgende Operationen ist, beginnend mit der leeren Datenstruktur,
dann ist die amortisierte Zeit T (n)
n pro Operation.
Methode 1 zur amortisierten Analyse:
Berechne die gesamte Laufzeit T (n).
Methode 2:
Verwendung einer Potentialfunktion Φ, die von der der aktuellen Gestalt der Datenstruktur
abhängt.
TP = die tatsächliche Laufzeit der Operation P
TP∗ = amortisierte Laufzeit TP − Φvor + Φnach
Lemma:
Wenn das Potential nie unter das Anfangspotential Φ0 sinkt, dann ist die amortisierte Laufzeit
durch TP∗ beschränkt.
Formeln:
Φ0 −→
P1
Φ1
−→
P2
Φ2
Φ3
−→
P3
...
−→
Pn
Φn
TP1 + TP2 + . . . + Tn
TP∗i
= TPi − Φi−1 + Φi
TP
= TP∗i + Φi−1 + Φi
"
!
" !
"
!
= TP∗1 + Φ0 − Φ1 + TP∗2 + Φ1 − Φ2 + · · · + TP∗n + Φn−1 − Φn
!
"
= TP∗1 + TP∗2 + · · · + TP∗n + ΦP − Φn
# $% &
TP1 + TP2 + . . . + Tn
≤0
≤
TP∗1
+
TP∗2
+ ··· +
TP∗n
≤ n · TP
Die Einheiten von Φ sind “Laufzeit”, es präsentiert die angespannte Laufzeit.
Eine Einheit von Φ reicht aus, um eine Operation mit konstanter Laufzeit zu bezahlen.
Φ = (2 · n − n$ ) · const

$
$

const − const · (2 · n − n ) + const · (2 · (n + 1) − n ) = 3 · const
Tn→n+1 = const − const · (2 · n − n) + const · (2 · (n + 1) − n) = 2 · const

# $% &
#
$%
&

2
n
Einfügen in (2,3)-Baum
Φ = #Knoten vom Grad 3
Methode 3:
1
Φ wird in der Datenstruktur “gespeichert”
(andere Betrachtungsweise von Methode 2).
Jeder Knoten vom Grad 3 hat einen Taler
gespeichert. Einfügen in einen (2,3)- Baum
kostet konstante Zeit + 1 Taler für den Elternknoten.



Der Temporärknoten vom Grad 4 hat 2 Taler gespeichert. Er bezahlt
einen Taler, um den Knoten aufzuspalten und ein Taler wird an den Elternknoten weitergereicht.


Beispiel:
Fibonacci- Halden haben eine amortisierte Laufzeit O(1) für die Einfügeoperation und O (log n), um das Minimum zu entfernen.
Das bedeutet, dass eine Folge von a einfüge- Operationen und b min-entfernen-Operationen
höchstens a · O(1) + b · O (log n) = O (a + b · log n) dauert.
tatsächliche Zeit:
Manchmal kann amortisierte Laufzeit in eine Laufzeitschranke für den schlechtesten Fall umgewandelt werden. Zum Beispiel durch vorausarbeiten:
1. n =
n!
2
+1

2.

Es wird auf beide “Bänder” parallel geschrieben. Der Aufwand verdoppelt sich über konstante
Zeit. Dies ist wichtig für Echtzeit- Anwendung, z.B. ein Atomkraftwerk.
Methode 4:
Bei dieser Methode werden die globalen Beziehungen zwischen den Operationen ausgenutzt.
#Schleifendurchläufe ≤ #Pop-Operationen = n
Die Laufzeit für alle Schleifendurchläufe = O(n)
2
Herunterladen