mag. thomas hilpold, universität linz, institut für wirtschaftsinformatik – software engineering...
TRANSCRIPT
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1
Algorithmen und Datenstrukturen 1
SS 2002
Mag.Thomas Hilpold
Institut für Wirtschaftsinformatik
Software Engineering
JKU Linz
Termin 9 – Laufzeitkomplexität
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 2
•Lösung Übung 7
•Themenbereiche heute
• Laufzeitkomplexität
• Übungsbesprechung Übung 9
Übersicht
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 3
Lösung Ü7
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 4
Komplexität
Allgemeines• Speicherkomplexität
• Laufzeitkomplexität
• Laufzeit = f(Problemgröße) typ. Größe der Datenmenge
• O-Notation gibt Obergrenze für Laufzeit an.
• Konstanten werden weggelassen
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 5
Komplexität
Beispiele für Laufzeitkomplexität
Bezeichnung O Wertung Beispiel
konstante Komp. O(1) optimal, selten
Hashing, Prepend
Logarithmische K. O( log n ) Sehr günstig Binäres Suchen
Lineare Komp. O( n ) Günstig Lineares Suchen
Leicht überlinear O(n log n) Noch gut Gutes Sortierverfahren
Quadratische K. O( n2 ) Ungünstig Schlechtes Sortierverfahren
Kubische K. O( n3 ) Ungünstig Matrizenmultiplikation
Exponentielle K. O( an ) Katastrophal Rundreiseproblem
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 6
Komplexität
einige Aussagen
• wenn P(n) ein Polynom m. Grades ist, so gilt P(n) = O(nm)
• an wächst stärker als jedes Polynom -> kein polynomialer Algorithmus
• log n wächst schwächer als n, egal welche Basis
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 7
Laufzeitkomplexität
Beispiele
n O(n) O(n2) O(2^n)
1 1 sec 1 sec 1 sec
10 10 sec 100 sec ca. 1 msec
100 100 sec 10 msec 4*106 Jahre
1000 1 msec 1 sec 3,4*10286 Jahre
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 8
Laufzeitkomplexität
grafische Darstellung (kleine Problemgrößen)
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 9
Laufzeitkomplexität
grafische Darstellung (große Problemgrößen)
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 10
Bestimmen der Laufzeitkomplexität
For - Schleife• Annahme: eine Operation A hat einen konstanten Zeitbedarf. Die Laufzeit für A soll also unabhängig von den Werten der Laufvariablen sein.
for (int i = 1..n) {A
}
•Laufzeitkomplexität: O(N), Linear
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 11
Bestimmen der Laufzeitkomplexität
For – Schleife (2)
for (int i = 1..n) {for (int j = 1..n) {
A}
}
•Laufzeitkomplexität: O(N2), quadratisch
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 12
Bestimmen der Laufzeitkomplexität
For – Schleife (3)
for (int i = 1..n) {for (int j = 1..i) {
A}
}
• geschachtelt, innere Schleife hat variable Obergrenze
???•Laufzeitkomplexität:
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 13
Bestimmen der Laufzeitkomplexität
For – Schleife (3)
for (int i = 1..n) {for (int j = 1..i) {
A}
}
• geschachtelt, innere Schleife hat variable Obergrenze
???•Laufzeitkomplexität:
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 14
Bestimmen der Laufzeitkomplexität
binäre suche
while (i <n) {n = n/2i = i + 1;
}
•Obergrenze halbiert sich bei jedem Schleifendurchlauf. log(n) Durchläufe = O(log(n)).
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 15
Bestimmen der Laufzeitkomplexität
an der Tafel
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 16
Übung 9
ad 1) Feinanalyse – Suchverfahren
analog zur Vorlesung
ad 2) asymptotische Laufzeitkomplexität - praktische Betrachtung
gegeben O-Notation, Zeit für n = 10; zu berechnen für mehrere n
ad 3) Grobanalyse
asymptotische Laufzeitkomplexität für einen iterativen und einen rekursiven Algorithmus. gesucht: Anzahl der Schleifendruchläufe, Anzahl der rek. Aufrufe,
z.B. Aufrufbaum überlegen, Anzahl der Knoten.
ad 4) 2 Algorithmen zum Potenzieren