Algorithmen und Datenstrukturen I

Werbung
Aufwand
Aufwand
Gliederung
Algorithmen und Datenstrukturen I
Aspekte von Algorithmen: Aufwand
1
D. Rösner
Institut für Wissens- und Sprachverarbeitung
Fakultät für Informatik
Otto-von-Guericke Universität Magdeburg
Aufwand
Einleitung
O-Notation
Listenfunktionen
c
Winter 2009/10, 26. Oktober 2009, 2009/10
D.Rösner
D. Rösner AuD I 2009/10 . . .
Aufwand
1
Einleitung
O-Notation
Listenfunktionen
D. Rösner AuD I 2009/10 . . .
Aufwand
Aufwandbetrachtungen:
2
Einleitung
O-Notation
Listenfunktionen
Beispiel: Berechnung der Fibonacci-Zahlen
für ein Problem gibt es oft unterschiedlich aufwendige
Lösungen
Beispiel: Fibonacci-Zahlen
die Definition der Fibonacci-Zahlen lässt sich direkt in
einen rekursiven Algorithmus umsetzen
die Folge der Fibonacci-Zahlen ist definiert durch:
Anfangswerte:
in Haskell: Variante mit Pattern matching
fib :: Int -> Int
fib0 = 1, fib1 = 1
für alle anderen Werte (d.h. für n ≥ 2) gilt die folgende
rekursive Definition:
fib 0 = 1
fib 1 = 1
fib n = fib (n - 1) + fib (n - 2)
fibn = fibn−1 + fibn−2
die Fibonacci-Zahlen wurden von Leonardo von Pisa (ca.
1170 – 1250; genannt Fibonacci) entwickelt, um u.a. die
Vermehrung von Kaninchen-Populationen zu beschreiben
D. Rösner AuD I 2009/10 . . .
4
D. Rösner AuD I 2009/10 . . .
5
Aufwand
Einleitung
O-Notation
Listenfunktionen
Aufwand
Beispiel: Berechnung der Fibonacci-Zahlen
Beispiel: Berechnung der Fibonacci-Zahlen
die direkte Umsetzung der Definition erfordert einen
Aufwand, der exponentiell in Abhängigkeit von n anwächst
dies ergibt sich aus folgender Abschätzung nach unten für
den mindestens erforderlichen Aufwand (hier gemessen in
Anzahl von Funktionsaufrufen):
die Werte in der Folge wachsen sehr schnell an
so ergeben sich die ersten 30 Fibonacci-Zahlen als
Main> take 30 [(n, fib n)| n <- [0 ..]]
[(0,1),(1,1),(2,2),(3,3),(4,5),(5,8),(6,13),(7,21),
(8,34),(9,55),(10,89),(11,144),(12,233),(13,377),
(14,610),(15,987),(16,1597),(17,2584),(18,4181),
(19,6765),(20,10946),(21,17711),(22,28657),
(23,46368),(24,75025),(25,121393),(26,196418),
(27,317811),(28,514229),(29,832040)]
D. Rösner AuD I 2009/10 . . .
Aufwand
Einleitung
O-Notation
Listenfunktionen
wegen fib n = fib (n - 1) + fib (n - 2) :
aufwand(fib n) ≥ 2 * aufwand(fib (n - 2))
≥ 2 * 2 * aufwand(fib (n - 4))
...
für n gerade:
≥ 2(n/2−1) * aufwand(fib 2)
= 2n/2
analog für n ungerade:
≥ 2(n−1)/2−1 * aufwand(fib 3)
≥ 2(n−1)/2
D. Rösner AuD I 2009/10 . . .
6
Einleitung
O-Notation
Listenfunktionen
Aufwand
Beispiel: Berechnung der Fibonacci-Zahlen
7
Einleitung
O-Notation
Listenfunktionen
Vergleich von Funktionen
asymptotischer Vergleich von Funktionen
zusammengefasst:
O (sprich: gross-0)
Aufwand für Berechnung von fib n (hier gemessen in
Anzahl von Funktionsaufrufen) wächst in Abhängigkeit von
n mindestens so stark wie 2(n−1)/2
für “asymptotisch kleiner als oder gleich“
im Kontrast dazu ist der Aufwand für die Berechnung von
fastFib n (vgl. letzte Vorlesung und [Tho99], pp. 75)
nur eine lineare Funktion von n
Definition (vgl. [GT01], 3.6):
D. Rösner AuD I 2009/10 . . .
Seien im folgenden f und g Funktionen von den natürlichen
Zahlen in die nichtnegativen reellen Zahlen.
f(n) ist O(g(n))
wenn es eine reelle Konstante c > 0 und eine natürliche
Zahl n0 ≥ 1 gibt, so dass
f(n) ≤ c g(n) für alle n ≥ n0
8
D. Rösner AuD I 2009/10 . . .
10
Aufwand
Einleitung
O-Notation
Listenfunktionen
Aufwand
Vergleich von Funktionen
Einleitung
O-Notation
Listenfunktionen
Vergleich von Funktionen
Θ (sprich: gross-Theta)
Ω (sprich: gross-0mega)
für “asymptotisch gleich“
für “asymptotisch grösser als oder gleich“
Definition (vgl. [GT01], 3.6):
Definition (vgl. [GT01], 3.6):
f(n) ist Θ(g(n))
wenn
f(n) ist Ω(g(n))
wenn g(n) ist O(f(n)) d.h. es gibt eine reelle Konstante c > 0
und eine natürliche Zahl n0 ≥ 1, so dass
f(n) ≥ c g(n) für alle n ≥ n0
D. Rösner AuD I 2009/10 . . .
Aufwand
f(n) ist O(g(n)) und
f(n) ist Ω(g(n))
m.a.W. es gibt reelle Konstanten c > 0 und d > 0 und eine
natürliche Zahl n0 ≥ 1, so dass
c g(n) ≤ f(n) ≤ d g(n) für alle n ≥ n0
11
Einleitung
O-Notation
Listenfunktionen
Aufwand
Vergleich von Funktionen
12
Einleitung
O-Notation
Listenfunktionen
Vergleich von Funktionen
Beispiele (vgl. [GT01], 3.6):
Beispiele (vgl. [GT01], 3.6):
20 n3 + 10 n log n + 5 ist O(n3 )
jedes Polynom ak nk + ak −1 nk −1 + . . . + a0 ist O(nk )
Begründung:
3 log n + log log n ist O(log n)
Begründung:
für n ≥ 1 : log n < n
n log n < n2 ≤ n3
10 n log n ≤ 10 n3
Damit: 20 n3 + 10 n log n + 5 ≤ 35 n3
D. Rösner AuD I 2009/10 . . .
D. Rösner AuD I 2009/10 . . .
für n ≥ 2 : log log n ≤ log n
Damit: 3 log n + log log n ≤ 4 log n für n ≥ 2
13
D. Rösner AuD I 2009/10 . . .
14
Aufwand
Einleitung
O-Notation
Listenfunktionen
Aufwand
Aufwand bei Listenfunktionen
Einleitung
O-Notation
Listenfunktionen
Aufwand bei Listenfunktionen
Test, ob ein Element in einer Liste der Länge n enthalten
Zugriff auf das erste Listenelement (den Listenkopf)
im Prelude definiert als:
head
head (x:_)
elem
elem _ []
elem y (x:xs)
:: [a] -> a
schlechtester Fall (sog. “worst case“): y ist überhaupt nicht
in der Liste enthalten (oder als letztes Element)
der Aufwand ist unabhängig von der Länge der Liste
konstant, d.h. O(1)
D. Rösner AuD I 2009/10 . . .
Aufwand (hier z.B. Zahl der rekursiven Aufrufe und der
Tests auf Gleichheit) ist linear bezogen auf n, d.h. O(n)
16
D. Rösner AuD I 2009/10 . . .
Einleitung
O-Notation
Listenfunktionen
Aufwand
Aufwand bei Listenfunktionen
17
Einleitung
O-Notation
Listenfunktionen
Literatur: I
Schnittbildung zweier Listen, d.h. Bestimmung derjenigen
Elemente, die in beiden Listen enthalten
intersect
intersect _ []
intersect [] _
intersect (x:xs) y
= False
= if y == x then True
else elem y xs
günstigster Fall: y ist gleich dem ersten Listenelement
= x
Aufwand
:: a -> [a] -> Bool
Michael T. Goodrich and Roberto Tamassia.
Data Structures and Algorithms in Java.
John Wiley & Sons, New York, 2001.
ISBN 0-471-38367-8; 2nd edition.
:: [a] -> [a] -> [a]
= []
= []
= if elem x y
then x:(intersect xs y)
else (intersect xs y)
Simon Thompson.
Haskell - The Craft of Functional Programming.
Addison Wesley Longman Ltd., Essex, 1999.
2nd edition, ISBN 0-201-34275-8; Accompanying Web site:
http://www.cs.ukc.ac.uk/people/staff/sjt/craft2e.
schlechtester Fall: die Listen haben keine gemeinsamen
Elemente
mit m = length (x:xs) und n = length y ergeben sich m mal
n Tests auf Enthaltensein
m.a.W.: Aufwand ist quadratisch, d.h. O(n2 )
D. Rösner AuD I 2009/10 . . .
18
D. Rösner AuD I 2009/10 . . .
19
Herunterladen