2. In der - TU Bergakademie Freiberg

Werbung
40
Algorithmen und Datenstrukturen
2
Wachstumsverhalten von Funktionen
Beim Vergleich der Worst-Case-Laufzeiten von Algorithmen in Abhängigkeit von der Größe n der Eingabedaten ist oft nur deren Verhalten für große
Werte von n von Interesse, also deren asymptotisches Verhalten.
In diesem Kapitel werden Begriffe und Notation zur Beschreibung dieses asymptotischen Verhaltens eingeführt sowie einige Hilfsmittel für die
asymptotische Analyse vorgestellt.
2 Wachstumsverhalten von Funktionen
TU Bergakademie Freiberg, WS 2005/06
41
Algorithmen und Datenstrukturen
2.1
Asymptotische Notation
Wir betrachten Funktionen f, g, . . . deren Definitionsbereich die natürlichen
Zahlen (N oder N0 ) sind mit Werten in R (R+ ).
2.1.1
Die Θ-Notation
Für eine gegebene Funktion g = g(n) ist Θ(g(n)) definiert als die Menge
von Funktionen
Θ(g(n)) := f (n) : es existieren positive Konstanten c1 , c2 sowie n0 ,
sodass 0 ≤ c1 g(n) ≤ f (n) ≤ c2 g(n) ∀n ≥ n0
Somit bezeichnet Θ(g(n)) alle Funktionen, deren asymptotisches Wachstumsverhalten bis auf multiplikative Konstanten gleich ist.
2.1 Asymptotische Notation
TU Bergakademie Freiberg, WS 2005/06
42
Algorithmen und Datenstrukturen
Bemerkungen 2.1
1. Obgleich Θ(g(n)) eine Menge ist, wird Enthaltensein von f in Θ(g(n))
nicht durch f ∈ Θ(g(n)) sondern durch f = Θ(g(n)) ausgedrückt.
Diese Abweichung von der üblichen Notation hat gewisse Vorteile.
2. Gemäß unserer Definition sind alle Funktionen in Θ(g(n)) asymptotisch nichtnegativ, d.h. f (n) ≥ 0 für alle hinreichend große n. Ferner
muss g selbst asymptotisch nichtnegativ sein, da ansonsten die Menge leer wäre. Wir gehen daher bei unseren Betrachtungen stets von
asymptotisch nichtnegativen Funktionen aus.
3. Für jedes Polynom p von exaktem Grad d ∈ N0 gilt p(n) = Θ(nd ). Für
jede Konstante c ≥ 0 gilt c = Θ(n0 ) = Θ(1).
2.1 Asymptotische Notation
TU Bergakademie Freiberg, WS 2005/06
43
Algorithmen und Datenstrukturen
Beispiel: Im vorigen Kapitel hatten wir informell die Θ-Notation so eingeführt, dass Terme niedriger Ordnung sowie multiplikative Konstanten
einfach ignoriert werden. Wir überprüfen dieses Vorgehen und weisen
anhand der Definition nach, dass 12 n2 − 3n = Θ(n2 ).
Gesucht: c1 , c2 , n0 sodass
c1 n2 ≤ 12 n2 − 3n ≤ c2 n2
∀n ≥ n0 .
Division durch n2 (n ≥ 1) führt auf
c1 ≤
1
3
− ≤ c2
2 n
∀n ≥ n0 ,
was z.B. für c1 = 1/14, c2 = 1/2 und n0 = 7 erfüllt ist. (Die genaue Wahl ist
uninteressant, wesentlich ist nur die Existenz solcher Konstanten.)
Übung: 6n3 6= Θ(n2 )
2.1 Asymptotische Notation
TU Bergakademie Freiberg, WS 2005/06
44
Algorithmen und Datenstrukturen
2.1.2
Die O-Notation
Die O-Notationa ist für den Fall, dass lediglich obere asymptotische Schranken vorliegen.
Für eine gegebene Funktion g = g(n) ist O(g(n)) definiert als die Funktionenmenge
O(g(n)) := f (n) : ∃ Konstanten c, n0 sodass
0 ≤ f (n) ≤ cg(n) ∀n ≥ n0
Klar: mengentheoretisch gilt Θ(g(n)) ⊂ O(g(n)), d.h. f = Θ(g(n)) impliziert
f = O(g(n)).
a gesprochen
2.1 Asymptotische Notation
groß O von“ bzw. nur O von“
”
”
TU Bergakademie Freiberg, WS 2005/06
45
Algorithmen und Datenstrukturen
Bemerkungen 2.2
1. O(g(n)) enthält auch alle Funktionen mit niedrigerer Wachstumsordnung als g. So liegt neben g1 (n) = an2 + bn + c auch die Funktion
g2 (n) = an + b in O(n2 ).
2. In der (vor allem älteren) Literatur wird die O-Notation oft anstelle der
Θ-Notation verwendet, hier soll O aber ausschließlich asymptotische
obere Schranken beschreiben.
3. Wort-Case-Laufzeit von O(g(n)) impliziert Laufzeit in O(g(n)) für alle
möglichen Eingaben. Worst-Case-Laufzeit von Θ(g(n)) heißt dagegen
nicht notwendig Laufzeit von Θ(g(n)) für alle möglichen Eingaben. (Gegenbeispiel: Insertion-Sort, mit einer Worst-Case-Laufzeit von Θ(n2 ),
aber einer Laufzeit von Θ(n) für bereits sortierte Eingabe.)
2.1 Asymptotische Notation
TU Bergakademie Freiberg, WS 2005/06
Algorithmen und Datenstrukturen
46
Beispiele:
2n2 = O(n3 ) mit c = 1 und n0 = 2.
Weitere Funktionen in O(n2 ):
n2
n2 + n
n2 + 1000n
1000n2 + 1000n
n
n/1000
n1.9999
n2 / log log log n
2.1 Asymptotische Notation
TU Bergakademie Freiberg, WS 2005/06
47
Algorithmen und Datenstrukturen
2.1.3
Die Ω-Notation
Analog der asymptotischen oberen Schranke bei der O-Notation bezeichnet die Ω-Notation eine asymptotische untere Schranke:
Ω(g(n)) := f (n) : ∃ Konstanten c, n0 sodass
0 ≤ cg(n) ≤ f (n) ∀n ≥ n0
Gemäß der bisherigen Definitionen folgt sofort
Satz 2.3 Für zwei Funktionen f und g gilt f (n) = Θ(g(n)) genau dann,
wenn sowohl f (n) = O(g(n)) als auch f (n) = Ω(g(n)).
2.1 Asymptotische Notation
TU Bergakademie Freiberg, WS 2005/06
48
Algorithmen und Datenstrukturen
Bemerkungen 2.4
1. Da die Ω-Notation eine untere asymptotische Schranke angibt, setzen
wir sie zur Beschreibung der Best-Case-Laufzeit von Algorithmen ein.
Eine Ω-Schranke für die Laufzeit im günstigsten Fall liefert eine entsprechende Laufzeit für alle möglichen Eingaben.
Beispiel: Best-Case-Laufzeit von Insertion-Sort: Ω(n), damit ist die
Laufzeit von Insertion-Sort Ω(n).
2. Laufzeit von Insertion-Sort somit zwischen Ω(n) und O(n2 ). Diese
Schranken sind asymptotisch bestmöglich.
3. Man kann jedoch sagen: die Worst-Case-Laufzeit von Insertion-Sort ist
Ω(n2 ), da für gewisse Eingaben die Laufzeit Ω(n2 ) ist.
4. Sprechweise Laufzeit eines Algorithmus ist Ω(g(n))“ bedeutet: egal
”
welche Eingabe der Länge n, die Laufzeit ist mindestens Konstante
·g(n) für n hinreichend groß.
2.1 Asymptotische Notation
TU Bergakademie Freiberg, WS 2005/06
Algorithmen und Datenstrukturen
49
Beispiele:
√
n = Ω(log2 n) mit c = 1 und n0 = 16.
Weitere Funktionen in Ω(n2 ):
n2
n2 + n
n2 − n
n2 + 1000n
1000n2 + 1000n
1000n2 − 1000n
n3
n2.0001
n2 log log log n
2n
2
2.1 Asymptotische Notation
TU Bergakademie Freiberg, WS 2005/06
50
Algorithmen und Datenstrukturen
2.1.4
Asymptotische Notation in Gleichungen und Ungleichungen
• Auf der rechten Seite einer (Un-)Gleichung: O(n2 ) steht für eine beliebige Funktion f ∈ O(n2 ).
Beispiel: 2n2 + 3n + 1 = 2n2 + Θ(n) bedeutet 2n2 + 3n + 1 = 2n2 + f (n)
mit f (n) ∈ Θ(n) (etwa f (n) = 3n + 1).
• Auf der linken Seite einer (Un-)Gleichung: Egal wie die anonyme Funktion auf der linken Seite gewählt wird, es gibt stets eine Wahl einer
Funktion auf der rechten Seite, damit die (UN-)Gleichung wahr ist.
Beispiel: 2n2 + Θ(n) = Θ(n2 ) bedeutet, dass für alle Funktionen f ∈
Θ(n) eine Funktion g(n) ∈ Θ(n2 ) existiert mit 2n2 + f (n) = g(n).
2.1 Asymptotische Notation
TU Bergakademie Freiberg, WS 2005/06
51
Algorithmen und Datenstrukturen
Verkettung:
2n2 + 3n + 1 = 2n2 + Θ(n) = Θ(n2 )
Interpretation:
• Erste Gleichung: es existiert f (n) ∈ Θ(n) sodass 2n2 + 3n + 1 =
2n2 + f (n).
• Zweite Gleichung: für jede Funktion g(n) ∈ Θ(n) (beispielsweise für die
Funktion f (n) für welche die erste Gleichung gültig ist) existiert eine
Funktion h(n) ∈ Θ(n2 ) sodass 2n2 + g(n) = h(n).
2.1 Asymptotische Notation
TU Bergakademie Freiberg, WS 2005/06
52
Algorithmen und Datenstrukturen
2.1.5
Die o-Notation
Asymptotische obere Schranken ausgedrückt in O-Notation sind nicht notwendig asymptotisch scharf. Dies ist etwa für 2n2 = O(n2 ) der Fall, nicht
aber für 2n = O(n2 ).
Die o-Notation beschreibt obere Schranken, die nicht asymptotisch scharf
sind. Wir definieren o(g(n)) ( klein O von g von n“) als die Menge
”
o(g(n)) := f (n) : ∀ Konstanten c > 0, ∃n0 > 0 sodass
0 ≤ f (n) < cg(n) ∀n ≥ n0
Beispiel: 2n = o(n2 ), aber 2n2 6= o(n2 ).
Intuitiv: für n hinreichend groß wird f (n) beliebig kleiner als g(n), oder
f (n)
= 0.
n→∞ g(n)
lim
2.1 Asymptotische Notation
TU Bergakademie Freiberg, WS 2005/06
Algorithmen und Datenstrukturen
53
Beispiele:
n1.9999 = o(n2 )
n2 / log n = o(n2 )
n2 6= o(n2 )
n2 /1000 6= o(n2 )
2.1 Asymptotische Notation
TU Bergakademie Freiberg, WS 2005/06
54
Algorithmen und Datenstrukturen
2.1.6
Die ω-Notation
Beschreibt nicht asymptotisch scharfe untere Schranken:
ω(g(n)) := f (n) : ∀ Konstanten c > 0, ∃n0 > 0 sodass
0 ≤ cg(n) < f (n) ∀n ≥ n0
So gilt etwa n2 /2 = ω(n), nicht aber n2 /2 6= ω(n2 ).
Die Beziehung f (n) = ω(g(n)) impliziert
f (n)
lim
= ∞,
n→∞ g(n)
d.h. f (n) wird, sofern n hinreichend groß, beliebig größer als g(n).
Beispiele: n2.0001 = ω(n2 ), n2 log n = ω(n2 ), n2 6= ω(n2 ).
2.1 Asymptotische Notation
TU Bergakademie Freiberg, WS 2005/06
55
Algorithmen und Datenstrukturen
2.1.7
Vergleich von Funktionen
Viele Relationen zwischen reellen Zahlen gelten auch für asymptotische
Vergleiche.
Zunächst kann man folgende Analogien/Entsprechungen ausmachen:
O
≈
≤
Ω
≈
≥
Θ
≈ =
o
≈ <
ω
≈ >.
Sprechweisen:
f (n) asymptotisch kleiner“ als g(n) falls f (n) = o(g(n))
”
f (n) asymptotisch größer“ als g(n) falls f (n) = ω(g(n)).
”
2.1 Asymptotische Notation
TU Bergakademie Freiberg, WS 2005/06
56
Algorithmen und Datenstrukturen
Relationseigenschaften:
Transitivität
f (n) = Θ(g(n)) und g(n) = Θ(h(n)) ⇒ f (n) = Θ(h(n)),
analog für O, Ω, o, ω.
Reflexivität
f (n) = Θ(f (n)),
analog für O, Ω.
Symmetrie
f (n) = Θ(g(n)) ⇔ g(n) = Θ(f (n)).
Transponierte Symmetrie
f (n) = O(g(n)) ⇔ g(n) = Ω(f (n)),
f (n) = o(g(n)) ⇔ g(n) = ω(f (n)).
2.1 Asymptotische Notation
TU Bergakademie Freiberg, WS 2005/06
57
Algorithmen und Datenstrukturen
Was nicht gilt: Trichotomie, d.h. für zwei reelle Zahlen a, b gilt stets eines
von a < b, a = b oder a > b.
Nicht alle Funktionen sind asymptotisch vergleichbar.
Beispiel: Die Funktionen f (n) = n und g(n) = n1+sin n sind nicht asymptotisch vergleichbar, da der Wert des Exponenten 1 + sin n zwischen 0 und 2
oszilliert und alle dazwischenliegenden Werte annimmt.
2.1 Asymptotische Notation
TU Bergakademie Freiberg, WS 2005/06
58
Algorithmen und Datenstrukturen
2.2
Bezeichnungen und Wissenswertes
Monotonie
• f ist monoton wachsend falls m ≤ n ⇒ f (m) ≤ f (n).
• f ist monoton fallend falls m ≤ n ⇒ f (m) ≥ f (n).
• f ist streng monoton wachsend falls m < n ⇒ f (m) < f (n).
• f ist streng monoton fallend falls m < n ⇒ f (m) > f (n).
2.2 Bezeichnungen und Wissenswertes
TU Bergakademie Freiberg, WS 2005/06
59
Algorithmen und Datenstrukturen
2.2.1
Floor- und Ceiling-Funktionen
Für x ∈ R definieren wir die (monoton wachsenden) Funktionen
bxc := max{z ∈ Z : z ≤ x},
dxe := min{z ∈ Z : z ≥ x}.
• Für alle x ∈ R gilt x − 1 < bxc ≤ x ≤ dxe < x + 1.
• Für alle z ∈ Z gilt bz/2c + dz/2e = z.
• Für alle reellen x ≥ 0 und p, q ∈ Z gelten
ddx/pe/qe = dx/(pq)e,
bbx/pc/qc = bx/(pq)c,
dp/qe ≤ (p + (q − 1))/q,
bp/qc ≥ (p − (q − 1))/q.
2.2 Bezeichnungen und Wissenswertes
TU Bergakademie Freiberg, WS 2005/06
60
Algorithmen und Datenstrukturen
2.2.2
Restklassenarithmetik
Für z ∈ Z und n ∈ N wird die Zahl z mod n definiert als Divisionsrest des
Quotienten z/n, d.h.
z mod n = z − bz/ncn.
Man sagt, zwei ganze Zahlen z1 , z2 seien kongruent modulo n (für ein
n ∈ N) falls diese bei Division durch n denselben Rest liefern. Wir schreiben
z1 ≡ z2
mod n
falls
z1
mod n = z2
mod n
Äquivalent: z1 ≡ z2 mod n genau dann, wenn n die Zahl z2 − z1 teilt.
Wir schreiben z1 6≡ z2 mod n falls z1 , z2 nicht kongruent modulo n.
2.2 Bezeichnungen und Wissenswertes
TU Bergakademie Freiberg, WS 2005/06
61
Algorithmen und Datenstrukturen
2.2.3
Polynome
Ein Polynom vom Grad d (d ∈ N0 ) ist ein Ausdruck der Form
p(n) =
d
X
aj nj .
j=0
Die Konstanten {aj }dj=0 heißen Koeffizienten des Polynoms. Das Polynom
p ist von exaktem Grad d, falls ad 6= 0 und ist in diesem Fall asymptotisch
positiv genau dann, wenn ad > 0.
Für ein asymptotisch positives Polynom p von exaktem Grad d gilt p(n) =
Θ(nd ). Für jede reelle Zahl a ≥ 0 ist die Funktion na monoton wachsend,
für jede reelle Zahl a ≤ 0 ist na monoton fallend.
Wir nennen eine Funktion f polynomiell beschränkt, falls f (n) = O(nk ) für
eine Konstante k.
2.2 Bezeichnungen und Wissenswertes
TU Bergakademie Freiberg, WS 2005/06
62
Algorithmen und Datenstrukturen
2.2.4
Exponentialfunktionen
Für alle n ∈ N0 und a ≥ 1 ist an eine monoton wachsende Funktion von n.
Wir vereinbaren 00 := 1.
Die Wachstumsraten von Polynomen und Exponentialfunktionen werden
durch folgende Tatsache in Beziehung gesetzt: für alle reelle Konstanten
a, b mit a > 1 gilt
nb
lim
= 0,
n→∞ an
d.h.
nb = o(an ).
(2.1)
Jede Exponentialfunktion zu einer Basis a > 1 wächst somit schneller als
jedes Polynom.
2.2 Bezeichnungen und Wissenswertes
TU Bergakademie Freiberg, WS 2005/06
63
Algorithmen und Datenstrukturen
Die Exponentialfunktion ex besitzt die (auf ganz R konvergente) Potenzreihe
∞
X
xk
x2
x3
x
=1+x+
+
+ ... .
e =
k!
2
3!
k=0
Für alle x ∈ R gilt ex ≥ 1 + x mit Gleichheit genau für x = 0. Ferner gilt
1 + x ≤ ex ≤ 1 + x + x2
für alle |x| < 1.
Für x → 0 ist die Approximation von ex durch 1 + x recht gut, es gilt
ex = 1 + x + Θ(x2 ),
wobei mit Θ(x2 ) hier die Asymptotik im Grenzwert x → 0 gemeint ist.
Schließlich gilt für alle x ∈ R
x n
x
e = lim 1 +
.
n→∞
n
2.2 Bezeichnungen und Wissenswertes
TU Bergakademie Freiberg, WS 2005/06
64
Algorithmen und Datenstrukturen
2.2.5
Logarithmen
Für alle reellen positiven Zahlen a, b, c und n ∈ N gelten
a = blogb a ,
logc (ab) = logc a + logc b,
logb an = n logb a,
logb a =
logc a
,
logc b
1
logb = − logb a,
a
1
logb a =
,
loga b
alogb c = clogb a .
(In allen Gleichungen seien alle Basen 6= 1.)
2.2 Bezeichnungen und Wissenswertes
TU Bergakademie Freiberg, WS 2005/06
65
Algorithmen und Datenstrukturen
• logb n = loga n/ loga b, d.h. bei asymptotischen Betrachtungen (n → ∞)
spielt Basis des Logarithmus keine Rolle.
• Informatik: Basis 2 von besonderer Bedeutung, da viele Algorithmen
und Datenstrukturen auf Zerlegung von Problemen in zwei gleich große
Teilprobleme beruhen.
Potenzreihe:
x2
x3
x4
log(1 + x) = x −
+
−
+ −...,
2
3!
4!
|x| < 1.
Ferner gilt für x > −1
x
≤ log(1 + x) ≤ x
1+x
mit Gleichheit nur für x = 0.
2.2 Bezeichnungen und Wissenswertes
TU Bergakademie Freiberg, WS 2005/06
66
Algorithmen und Datenstrukturen
Wir nennen eine Funktion f polylogarithmisch beschränkt, fallsa f (n) =
O(logk n) für eine Konstante k.
Der Vergleich zwischen den Wachstumsverhalten von Polynomen und
Polylogarithmen ist gegeben durch (ersetze n durch log n in (2.1))
logk n
logk n
0 = lim a log n = lim
n→∞ (e )
n→∞ na
und somit
logk n = o(na )
für jede positive Konstante a.
Somit wächst jede polylogarithmische Funktion langsamer als jedes positive Polynom.
a Schreibweise:
logk n := (log n)k
2.2 Bezeichnungen und Wissenswertes
TU Bergakademie Freiberg, WS 2005/06
67
Algorithmen und Datenstrukturen
2.2.6
Fakultäten
Die Funktion n! ( n Fakultät“) ist definiert als
”
(
1
falls n = 0,
n! =
n · (n − 1)!, falls n > 0.
M.a.W. : n! = 1 · 2 · 3 · . . . · n.
Eine offensichtliche obere Schranke für n! ist n! ≤ nn .
Eine asymptotisch exakte Schranke liefert die Stirlingsche Approximation
n n √
1
n! = 2πn
.
1+Θ
e
n
Ferner gelten die asymptotischen Aussagen
n! = o(nn ),
2.2 Bezeichnungen und Wissenswertes
n! = ω(2n ),
log(n!) = Θ(n log n).
TU Bergakademie Freiberg, WS 2005/06
68
Algorithmen und Datenstrukturen
Schließlich gilt für alle n ≥ 1
n n
√
n! = 2πn
eαn
e
2.2 Bezeichnungen und Wissenswertes
mit
1
1
< αn <
.
12n + 1
12n
TU Bergakademie Freiberg, WS 2005/06
69
Algorithmen und Datenstrukturen
2.2.7
Iteration von Funktionen
Mit f (i) (n) bezeichnen die i-malige Anwendung der Funktion f auf das
Argument n:
f
(i)
(n) =
(
n
f (f (i−1) (n))
falls i = 0,
falls i > 0.
Beispiel: für f (n) = 2n erhalten wir f (i) (n) = 2i n.
2.2 Bezeichnungen und Wissenswertes
TU Bergakademie Freiberg, WS 2005/06
70
Algorithmen und Datenstrukturen
2.2.8
Der iterierte Logarithmus
Mit log∗ n ( log Stern von n“) bezeichnen wir den iterierten Logarithmus,
”
der wie folgt definiert ist:
Sei log(i) n wie oben definiert mit f (n) = log n. Da Logarithmen nur für
positive Argumente definiert sind, setzen wir
log∗ n := min{i ≥ 0 : log(i) n ≤ 1}.
Beispiele:
log∗2 2 = 1,
log∗2 4 = 2,
log∗2 16 = 3,
log∗2 65536 = 4,
log∗2 (265536 ) = 5.
2.2 Bezeichnungen und Wissenswertes
TU Bergakademie Freiberg, WS 2005/06
71
Algorithmen und Datenstrukturen
An diesen Beispielen erkennt man, dass der iterierte Logarithmus extrem
langsam anwächst.
Da die Anzahl der Atome im beobachtbaren Universum auf etwa 280
geschätzt wird, eine Zahl die wesentlich kleiner ist als 265536 , sind Eingabegrößen n mit log∗ n > 5 eher selten zu erwarten.
2.2 Bezeichnungen und Wissenswertes
TU Bergakademie Freiberg, WS 2005/06
72
Algorithmen und Datenstrukturen
2.2.9
Fibonacci-Zahlen
Die Fibonacci-Zahlen sind definiert durch die Rekursion


i = 0,

0
Fi = 1
i = 1,


F
+ F , (i ≥ 2).
i−1
i−2
Ab i = 2 ist also jede Fibonacci-Zahl die Summe ihrer beiden Vorgänger,
wir erhalten die Folge
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, . . . .
2.2 Bezeichnungen und Wissenswertes
TU Bergakademie Freiberg, WS 2005/06
73
Algorithmen und Datenstrukturen
Fibonacci-Zahlen sind verwandt mit dem goldenen Schnitt φ und dessen
negativen Kehrwert φb gegeben durch
√
1+ 5
φ=
≈ 1.61803 . . . ,
2√
1− 5
φb =
≈ −0.61803 . . . .
2
Genauer:
φi − φbi
Fi = √ .
5
√
√
i
b
b
Wegen
|φ| < 1 folgt |φ |/ 5 < 1/ 5 < 1/2. Somit ist Fi gegeben durch
√
φi / 5 gerundet zur nächsten ganzen Zahl. Insbesondere wachsen die
Fibonacci-Zahlen exponentiell.
2.2 Bezeichnungen und Wissenswertes
TU Bergakademie Freiberg, WS 2005/06
Herunterladen