(2) Ist

Werbung
74
Algorithmen und Datenstrukturen
3
Rekursionen
Vor allem bei rekursiven Algorithmen besitzt die Laufzeitfunktion eine naheliegende rekursive Formulierung, d.h. die Laufzeitfunktion ist konstant
für den Basisfall und ansonsten durch den Funktionswert für kleinere Argumente angegeben. Das Auflösen von Rekursionen, d.h. die Umwandlung
der rekursiven in eine explizite (oder asymptotische) Darstellung, ist Gegenstand dieses Kapitels. Wir stellen hierfür drei Techniken vor:
Substitutionsmethode Lösung raten und dann per Induktion verifizieren
Rekursionsbäume Aufstellen eines Baumes dessen Knoten die Laufzeit
auf jeder Rekursionsstufe darstellen und Aufsummieren
Hauptsatz Eine formale Methode, welche obere asymptotische Schranken
für Rekursionen der Form T (n) = aT (n/b) + f (n) liefert.
3 Rekursionen
TU Bergakademie Freiberg, WS 2005/06
75
Algorithmen und Datenstrukturen
Beispiele:
(
• T (n) =
(
• T (n) =
(
• T (n) =
3 Rekursionen
falls n = 1,
T (n − 1) + 1
falls n > 1.
1
falls n = 1,
2T (n/2) + n
falls n > 1.
0
√
T ( n) + 1
(
• T (n) =
1
falls n = 2,
Lösung: T (n) = n.
Lösung: T (n) = n log2 n+n
Lösung: T (n) = log log n
falls n > 2.
1
falls n = 1,
T (n/3) + T (2n/3) + n
falls n > 1.
Lösung: T (n) = Θ(n log n)
TU Bergakademie Freiberg, WS 2005/06
76
Algorithmen und Datenstrukturen
Hilfreiche Vereinfachungen
Reellwertige Argumente. Oft ist es einfacher, mit reellen Argumenten zu
rechnen, auch wenn die Laufzeitfunktion nur für natürliche Argumente
definiert ist. Beispielsweise ist die rekursive Beschreibung der Laufzeit
von M ERGE -S ORT strenggenommen
(
Θ(1)
falls n = 1,
T (n) =
T (dn/2e) + T (bn/2c) + Θ(n) falls n > 1.
Ignorieren von Basisfällen. Typischerweise gilt T (n) = Θ(1) für hinreichend kleines n, sodass bei der Formulierung von Rekursionen
oft der Basisfall weggelassen wird und beispielsweise nur T (n) =
2T (n/2) + Θ(n) angegeben wird.
Wir werden jedoch Fälle kennenlernen, bei denen diese Vereinfachungen
nicht zulässig sind.
3 Rekursionen
TU Bergakademie Freiberg, WS 2005/06
77
Algorithmen und Datenstrukturen
3.1
Die Substitutionsmethode
Vorgehen:
1. Lösung oder deren Asymptotik raten
2. Durch vollständige Induktion zeigen, dass geratene Lösung stimmt
Beispiel: Gesucht sei eine asymptotische Oberschranke für die Rekursion
(3.1)
T (n) = 2T (bn/2c) + n.
In Anbetracht der Ähnlichkeit mit der Rekursion für
wir die obere Schranke T (n) = O(n log n).
MERGE -S ORT
erraten
Somit ist also zu zeigen: T (n) ≤ cn log n für eine geeignet gewählte Konstante c.
3.1 Die Substitutionsmethode
TU Bergakademie Freiberg, WS 2005/06
78
Algorithmen und Datenstrukturen
Induktionsannahme: die Aussage gelte für bn/2c, d.h. es gelte
T (bn/2c) ≤ cbn/2c log2 (bn/2c).
Einsetzen in die Rekursion ergibt
T (n) = 2T (bn/2c) + n
≤ 2 cbn/2c log2 (bn/2c) + n
≤ cn log2 (n/2) + n
= cn log2 n − cn log2 2 + n
= cn log2 n + (1 − c)n
≤ cn log2 n
für jedes c ≥ 1.
3.1 Die Substitutionsmethode
TU Bergakademie Freiberg, WS 2005/06
79
Algorithmen und Datenstrukturen
Induktionsanfang: Zeige, dass c so gewählt werden kann, dass T (n) ≤
cn log n auch für den Basisfall zutrifft.
Für den Basisfall T (1) = 1 hieße dies T (1) ≤ c · 1 · log 1 = 0, hier scheint
sich also ein Problem aufzutun.
Für den Nachweis der gewünschten asymptotischen Aussage muss jedoch
lediglich
T (n) ≤ cn log n
für n ≥ n0
gezeigt werden (n0 noch frei wählbar).
Rekursion (3.1) ist für n > 3 unabhängig von T (1). Wir können also auch
T (2) und T (3) anstelle von T (1) als Basisfälle – des Induktionsbeweises,
nicht der Rekursionsgleichung – betrachten (n0 = 2).
Rekursion (3.1) liefert desweiteren T (2) = 4, T (3) = 5 und T (2) ≤ c·2 log2 2
sowie T (3) ≤ c · 3 log2 3 sind somit für alle c ≥ 2 erfüllt.
3.1 Die Substitutionsmethode
TU Bergakademie Freiberg, WS 2005/06
80
Algorithmen und Datenstrukturen
Erfolgreiches Raten:
• Erfordert etwas Übung
• Manchmal Rekursionsbäume hilfreich (siehe nächsten Abschnitt)
• Ähnlichkeiten mit bekannten Rekursionen beachten.
T (n) = 2T (bn/2c + 17) + n legt T (n) = O(n log n) nahe. (Verifizieren!)
• Zunächst (einfache aber) schwächere asymptotische Schranken herleiten und diese dann verfeinern.
(Hier etwa zunächst T (n) = Ω(n) oder T (n) = O(n2 )).
3.1 Die Substitutionsmethode
TU Bergakademie Freiberg, WS 2005/06
81
Algorithmen und Datenstrukturen
Feinheiten:
Manchmal muss die Induktionsannahme durch Abziehen eines Terms niedrigerer Ordnung gestärkt werden, um den Induktionsschluss zu ermöglichen: betrachte
T (n) = T (bn/2c) + T (dn/2e) + 1.
Wir raten T (n) = O(n) und versuchen daher T (n) ≤ cn für eine geeignete
Konstante c nachzuweisen. Einsetzen:
T (n) = T (bn/2c) + T (dn/2e) + 1
≤ cbn/2c + cdn/2e + 1 = cn + 1,
läßt sich nicht durch cn abschätzen.
3.1 Die Substitutionsmethode
TU Bergakademie Freiberg, WS 2005/06
82
Algorithmen und Datenstrukturen
Lösung: wir subtrahieren einen Term niederer Ordnung von der zuvor
geratenen Schranke:
T (n) ≤ cn − b,
b ≥ 0 konstant.
Einsetzen:
T (n) ≤ (cbn/2c − b) + (cdn/2e − b) + 1
= cn − 2b + 1
≤ cn − b,
sofern b ≥ 1.
Nun muss lediglich c hinreichend groß gewählt werden, damit die Anfangsbedingung erfüllt ist.
3.1 Die Substitutionsmethode
TU Bergakademie Freiberg, WS 2005/06
83
Algorithmen und Datenstrukturen
Vorsicht !
In der Verwendung der asymptotischen Notation kann man leicht Fehler
machen: ein falscher Beweis“, dass die Rekursion (3.1) eine Schranke von
”
O(n) besitzt, könnte so lauten: wir raten zunächst T (n) ≤ cn und folgern
daraufhin
T (n) ≤ 2(cbn/2c) + n
≤ cn + n
= O(n)
⇐ falsch !
mit der Argumentation, dass c ja eine Konstante sei.
Der Fehler besteht darin, dass nicht gezeigt wurde: es existiert eine Konstante c, sodass T (n) ≤ cn.
3.1 Die Substitutionsmethode
TU Bergakademie Freiberg, WS 2005/06
84
Algorithmen und Datenstrukturen
Einführung neuer Variablen
Manchmal bringt etwas algebraische Manipulation eine Rekursion in eine
freundlichere Form. Betrachte
√
T (n) = 2T (b nc) + log2 n.
Umbenennen von m = log2 n, d.h. n = 2m , lieferta
T (2m ) = 2T (2m/2 ) + m.
Umbenennung der abhängigen Variablen durch S(m) = T (2m ) führt auf
S(m) = 2S(m/2) + m,
eine Rekursion, die (3.1) sehr ähnlich ist. Tatsächlich gilt hier S(m) =
O(m log2 m).
a hier
ignorieren wir das Runden auf ganze Zahlen
3.1 Die Substitutionsmethode
TU Bergakademie Freiberg, WS 2005/06
85
Algorithmen und Datenstrukturen
Umschreiben in die alten Variablen liefert nun
T (n) = T (2m ) = S(m) = O(m log2 m) = O ((log2 n) log2 log2 n) .
3.1 Die Substitutionsmethode
TU Bergakademie Freiberg, WS 2005/06
86
Algorithmen und Datenstrukturen
3.2
Rekursionsbäume
Gute Methode, um Ansatz für Substitutionsmethode zu finden.
Rekursionsbaum:
• Jeder Knoten repräsentiert Aufwand für ein Teilproblem irgendwo innerhalb der Rekursionshierarchie.
• Aufsummieren innerhalb jeder Ebene liefert Aufwand pro Ebene, Summieren über alle Ebenen liefert Gesamtaufwand.
Beispiel 1: Rekursionsbaum für T (n) = 3T (bn/4c) + Θ(n2 ).
(i) Ignoriere Floor-Funktion, Ausschreiben der Konstanten: T (n) = 3T (n/4)+
cn2 .
(ii) Weitere Vereinfachung: n = 4p .
3.2 Rekursionsbäume
TU Bergakademie Freiberg, WS 2005/06
87
Algorithmen und Datenstrukturen
• Teilproblemgröße auf Ebene i (i = 0, 1, . . . ) ist n/4i , wird 1 für i =
log4 n,
⇒ Baum enthält 1 + log4 n Ebenen (i = 0, 1, . . . , log4 n).
• Aufwand pro Ebene:
# Knoten auf Ebene i: 3i (i = 0, 1, . . . , log4 n),
Problemgröße auf Ebene i:
n/4i ,
⇒ Aufwand pro Knoten auf Ebene i: c(n/4i )2 (i = 0, 1, . . . , log4 n − 1)
⇒ Aufwand auf Ebene i
i
n 2
3
2
i
(i = 1, 2, . . . , log4 n − 1).
3 c i = cn
4
16
• # Knoten auf unterster Ebene: 3log4 n = nlog4 3
Aufwand für diese Knoten (Blätter): T (1)
⇒ Aufwand für Blätter: nlog4 3 T (1) = Θ(nlog4 3 ).
3.2 Rekursionsbäume
TU Bergakademie Freiberg, WS 2005/06
88
Algorithmen und Datenstrukturen
Gesamtaufwand:
3
3
+ · · · + cn2
16
16
i
log4 n−1 X
3
= cn2
+ Θ(nlog4 3 )
16
i=0
i
∞ X
3
2
+ Θ(nlog4 3 )
< cn
16
i=0
T (n) = cn2 + cn2
log4 n−1
+ Θ(nlog4 3 )
1
log4 3
+
Θ(n
)
3
1 − 16
16
= cn2
+ Θ(nlog4 3 )
13
= O(n2 ).
= cn2
3.2 Rekursionsbäume
TU Bergakademie Freiberg, WS 2005/06
89
Algorithmen und Datenstrukturen
Wir erraten“ also in der Substitutionsmethode eine obere Schranke von
2”
O(n ) und schreiten zum Induktionsbeweis.
Wir wollen zeigen: T (n) ≤ dn2 für geeignete Konstante d.
T (n) = 3T (bn/4c) + cn2
≤ 3dbn/4c2 + cn2
n 2
≤ 3d
+ cn2
4
3 2
=
dn + cn2
16
≤ dn
2
16
c.
sofern d ≥
13
Damit ist die obere Schranke von O(n2 ) verfiziert.
3.2 Rekursionsbäume
TU Bergakademie Freiberg, WS 2005/06
90
Algorithmen und Datenstrukturen
Beispiel 2: Rekursion T (n) = T (n/3) + T (2n/3) + O(n)
• Längster Weg von Wurzel zu Blatt:
2
2
2
n→ n→
n → · · · → 1.
3
3
(2/3)k n = 1 ⇔ k = log 32 n ⇒ Höhe des Baumes ist log 23 n.
• Gesamtaufwand:
Aufwand pro Ebene · Höhe des Baumes = cn · log 23 n = O(n log n).
• # Blätter bei vollständigem binären Baum: 2log3/2 n = nlog3/2 2 .
Aufwand pro Blatt konstant ⇒ Blätter kosten Θ(nlog3/2 2 ) = ω(n log n).
Aber: Baum ist nicht vollständig, hat daher weniger als nlog3/2 2 Blätter.
3.2 Rekursionsbäume
TU Bergakademie Freiberg, WS 2005/06
91
Algorithmen und Datenstrukturen
Wir vermuten aber trotz dieser Ungenauigkeit eine obere Schranke von
O(n log n) und versuchen zu beweisen, dass T (n) ≤ dn log n für eine
Konstante d ≥ 0.
T (n) ≤ T (n/3) + T (2n/3) + cn
n
n
2n
2n
≤ d log + d
log
+ cn
3
3
3
3 dn
2dn
3
=
(log n − log 3) +
log n − log
+ cn
3
3
2
dn
2dn
3
= dn log n −
log 3 +
log + cn
3
3
2
dn
(log 3 + 2 log 3 − 2 log 2) + cn
= dn log n −
3
2
= dn log n − dn log 3 − log 2 + cn
3
≤ dn log n
sofern d ≥ (log 3 − 2/3 log 2)/c.
3.2 Rekursionsbäume
TU Bergakademie Freiberg, WS 2005/06
92
Algorithmen und Datenstrukturen
3.3
Der Hauptsatz
Kochrezept“ zur Auflösung von Rekursionen der Bauart
”
(3.2)
T (n) = aT (n/b) + f (n)
mit Konstanten a ≥ 1, b > 1 sowie einer asymptotisch positiven Funktion f .
Durch Unterscheidung zwischen drei Fällen bei einer Rekursion ist damit
deren Auflösen oft ohne Rechnung möglich.
Interpretation von (3.2):
• Laufzeit eines rekursiven Algorithmus, welcher ein Problem in a Teilprobleme der Größe jeweils n/b zerlegt.
• Aufwand von Zerlegen/Zusammenfügen durch f beschrieben.
• Beispiel M ERGE -S ORT: a = 2, b = 2, f (n) = Θ(n).
3.3 Der Hauptsatz
TU Bergakademie Freiberg, WS 2005/06
93
Algorithmen und Datenstrukturen
Satz 3.1 (Hauptsatz) Seien a ≥ 0, b > 0 Konstanten, f : N0 → R eine
asymptotisch positive Funktion und die Funktion T erfülle die Rekursionsgleichung
T (n) = aT (n/b) + f (n),
wobei n/b als entweder bn/bc oder dn/be zu interpretieren ist. Dann kann
T asymptotisch wie folgt beschränkt werden:
(1) Ist f (n) = O(nlogb a− ) für ein > 0, so gilt T (n) = Θ(nlogb a ).
(2) Ist f (n) = Θ(nlogb a ), so gilt T (n) = Θ(nlogb a log n).
(3) Ist f (n) = Ω(nlogb a+ ) für ein > 0 und gilt af (n/b) ≤ cf (n) für eine
Konstante c < 1 und alle hinreichend grossen n, so gilt T (n) = Θ(f (n)).
3.3 Der Hauptsatz
TU Bergakademie Freiberg, WS 2005/06
94
Algorithmen und Datenstrukturen
Bemerkungen 3.2
1. In allen Fällen werden die Funktionen f (n) und nlogb a verglichen. Ist,
wie im Fall (1), letztere größer, so gilt T (n) = Θ(nlogb a ), ist diese
kleiner (Fall (3)), so gilt T (n) = Θ(f (n)). Im Fall (2) asymptotisch gleich
schnellen Anwachsens ergibt sich die Asymptotik durch Multiplikation
mit log n zu T (n) = Θ(nlogb a log n) = Θ(f (n) log n).
2. Im Fall (1) muss f nicht nur kleiner als nlogb a , sondern polynomiell
kleiner sein, d.h. es muss asymptotisch kleiner sein als n · nlogb a .
3. Im Fall (3) muss f nicht nur größer sein als nlogb a , sondern polynomiell
größer und darüberhinaus der Regularitätsbedingung af (n/b) ≤ cf (n)
genügen. Diese Bedingung ist bei den meisten der hier auftretenden
polynomiell beschränkten Funktionen erfüllt.
4. Die Fallunterscheidung ist nicht erschöpfend; trifft keiner der Fälle zu,
so kann der Hauptsatz nicht angewandt werden.
3.3 Der Hauptsatz
TU Bergakademie Freiberg, WS 2005/06
95
Algorithmen und Datenstrukturen
Beispiele:
1. T (n) = 9T (n/3) + n, Hauptsatz liefert T (n) = Θ(n2 ).
2. T (n) = T (2n/3) + 1, Hauptsatz liefert T (n) = Θ(log n).
3. T (n) = 3T (n/4) + n log2 n, Hauptsatz liefert T (n) = Θ(n log n).
4. T (n) = 2T (n/2) + n log2 n, Hauptsatz nicht anwendbar.
3.3 Der Hauptsatz
TU Bergakademie Freiberg, WS 2005/06
Herunterladen