Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
Teil VII : Zeitkomplexität von Algorithmen
1. Algorithmen und ihr Berechnungsaufwand
2. Aufwandsabschätzung – Wachstum von Funktionen
3. Aufwand von Suchalgorithmen
K. Murmann, H. Neumann, Fakultät für Informatik, Universität Ulm, 2001
1. Algorithmen und ihr Berechnungs-aufwand
• Motivation• Beispiel – Finden einer Münze
Problem
In der Vergangenheit wurden bereits Algorithmen vorgestellt, deren Ausführungs-dauer trotz gleicher Funktionalität bei identischen Daten unterschiedlich lang ausfiel !
Motivation
Ziel : Untersuchung der Größenordnung des Wachstums der Laufzeit eines Algorithmus‘ in Abhängigkeit der Anzahl n der Daten
⇒ • einfache Charakterisierung des Aufwands einer Algorithmus‘
• erlaubt den Vergleich der Performanz verschiedener algorithmischer Lösungen
Bsp. : • Suchen von Textsegmenten (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus)
• Berechnung der Fibonacci-Zahlen(rekursiver vs. iterativer Algorithmus → exponentieller vs. linearer Aufwand)
• Lösung des Problems der „Türme von Hanoi“(rekursiver Algorithmus mit 1 + 2·(n-1) Transportoperationen vs. eines einfachen Algorithmus‘ mit Umlauf auf Kreis → exponentieller vs. linearer Aufwand)
Untersuchungsgegenstand
Für große Datenmengen wird der (asymptotische) Aufwand eines Algorithmus‘ gesucht :
In welcher Weise wächst die Laufzeit eines Algorithmus mit wachsender Größe der Eingabedatenmenge n ?
Grenzbetrachtung :
→ „asympotische Notation“
∞→= nenEingabedat
Zeitkomplexität
Problembeschreibung
geg. : Menge identisch aussehender Münzen, von denen genau eine Münze schwerer ist als alle anderen, die restlichen Münzen sind untereinander alle gleich schwer
Beispiel – Finden einer Münze
Lösungsansätze
I. Lösung 1
Strategie : Jede Münze wird gegen eine andere gewogen, bis die Balkenwaage eine Münze als schwerere nachweist
Voraussetzung : Anzahl der Münzen muß gerade sein !
Aufgabe : Auffinden der schwereren Münze, wobei als Hilfsmittel eine Balkenwaage zur Verfügung steht
Name des Algorithmus : Finde-Muenze-1
Eingabe : alle Muenzen
Ausgabe : gesuchte schwere Muenze
haufen := gesamtmenge-der-muenzen;
WHILE keine-muenze-ausgesondert DO
nimm-2-muenzen-vom-haufen;
IF gewicht(muenze-1) = gewicht(muenze-2) THEN
(* -- nicht gefunden *)
lege-beide-muenzen-beiseite
ELSE (* -- eine Muenze ist die gesuchte *)
IF gewicht(muenze-1) > gewicht(muenze-2) THEN
sondere-muenze-aus(muenze-1)
ELSE
sondere-muenze-aus(muenze-2)
END
END
END
END Finde-Muenze-1.
Lösungsschema : „Eins-nach-dem-anderen“
II. Lösung 2
Strategie : Die zu untersuchende Gruppe von Münzen wird immer halbiert, wobei die schwerere Hälfte weiter analysiert wird – solange, bis sie nur noch eine Münze enthält (→ „divide-and-conquer“)
Voraussetzung : Anzahl der Münzen ist N = 2n !
Name des Algorithmus : Finde-Muenze-2
Eingabe : alle Muenzen
Ausgabe : gesuchte schwere Muenze
zu-untersuchende-muenzmenge := gesamtmenge-der-muenzen;
WHILE groesse(zu-untersuchende-muenzmenge) > 1 DO
gruppe-1 := erste-haelfte(zu-untersuchende-muenzmenge);
gruppe-2 := zweite-haelfte(zu-untersuchende-muenzmenge);
IF gewicht(gruppe-1) > gewicht(gruppe-2) THEN
zu-untersuchende-muenzmenge := gruppe-1
ELSE
zu-untersuchende-muenzmenge := gruppe-2
END
END;
sondere-muenze-aus(zu-untersuchende-muenzmenge)
END Finde-Muenze-2.
Lösungsschema : „Teile-und-Herrsche“
III. Lösung 3
Vorüberlegung : Beim Schema „Teile-und-Herrsche“ waren nie 2 Münzgruppen gleich schwer→ Verfahren kann noch effizienter werden, indem 2 möglicherweise
gleich schwere Gruppen ausgesondert werden können
Strategie : Die zu untersuchende Gruppe von Münzen wird immer in drei Gruppengeteilt, von denen 2 für die Wägung gleich groß sind (die Größe der Restgruppe ist beliebig, aber kleiner als die anderen 2 Gruppen)(→ alle Möglichkeiten der Balkenwaage werden genutzt !)
Gruppe 3
Gruppe 1
Gruppe 249 Münzen →→ 17 + 17 + 15
Name des Algorithmus : Finde-Muenze-3
Eingabe : alle Muenzen
Ausgabe : gesuchte schwere Muenze
zu-untersuchende-muenzmenge := gesamtmenge-der-muenzen;
WHILE groesse(zu-untersuchende-muenzmenge) > 1 DO
gruppe-1 := ungefaehr-ein-drittel(zu-untersuchende-muenzmenge);
gruppe-2 := gleich-grosser-teil(zu-untersuchende-muenzmenge);
gruppe-3 := rest(zu-untersuchende-muenzmenge);
IF gewicht(gruppe-1) = gewicht(gruppe-2) THEN
zu-untersuchende-muenzmenge := gruppe-3
ELSE
IF gewicht(gruppe-1) > gewicht(gruppe-2) THEN
zu-untersuchende-muenzmenge := gruppe-1
ELSE
zu-untersuchende-muenzmenge := gruppe-2
END
END
END;
sondere-muenze-aus(zu-untersuchende-muenzmenge)
END Finde-Muenze-3.
Lösungsschema : „Dreiteilung“
Analyse – Die Anzahl der W ägungen
Beispiel mit 8 Münzen
(1) Eins-nach-dem-anderen
Minimal 1Maximal 4Im Mittel 2x1, 2x2, 2x3, 2x4
⇒⇒ 20/8 = 2.5
Methode 1. Wägung 2. Wägung 3. Wägung 4. Wägung
Beispiel mit 8 Münzen (cont‘d)
(2) Teile-und-Herrsche
(3) Dreiteilung
Methode 1. Wägung 2. Wägung 3. Wägung 4. Wägung
Minimal 3Maximal 3Im Mittel 3
Minimal 2Maximal 2Im Mittel 2
Mittlere und maximale Anzahl von Wägungen
(2) Teile-und-Herrschef( n )
(3) Dreiteilungf( n )
Methode Anzahl der Münzen (n)
1 2 3 4 5 6 7 8 ... 16 32 64
(1) Eins-nach-dem-anderenf( n ) 2
11110
5
31 2
7
12
2
12
2
14 8
2
116
210 3 4 5 6
2
11110
5
41 2 2 2
8
72
16
53 4
⇒ Für viele Fragestellungen ist man an dem schlechtesten Fall interessiert, um eine Abschätzung der maximal möglichen Dauer des Algorithmus bei der Bearbeitung der Problemstellung zu erhalten !
hier : maximale Anzahl der Wägungen bei gegebener Menge von Münzen
2110 2 3 3 4 8 16 32
210 3 4 5 6
2110 2 2 2 2 3 4 4
Abschätzung der Ordnung des Berechnungs-Aufwands
Allgemeine Fragen :
Welche Funktion f(n) beschreibt den Berechnungs-Aufwand für das Problem bei gegebener Anzahlvon Daten n ?
Von welcher Art ist die Funktion f(n), d.h. kann man für den maximalen (mittleren, minimalen) Aufwandeine einfache Klasse von Funktionen angeben ?
2. Aufwandsabschätzung – Wachstum von Funktionen
• Asymptotische Notation – O-Notation• Asymptotische Notation in Gleichungen• Analyse von Algorithmen• Regeln für die O-Notation
Asymptotische Notation – O-Notation
O-Notation : asymptotisch obere Begrenzung einer Funktion
( )ngc ⋅1
0n
( )ngc ⋅2
( )nf
n
Aufwand
( ) ( )( )ngOnf =
ΘΘ-Notation : asymptotisch feste Begrenzung (Eingrenzung) einer Funktion
ΩΩ-Notation : asymptotisch untere Begrenzung einer Funktion
Beschreibung asymptotischer Lauf-/Ausführungszeiten von Algorithmen mittels Funktionen auf N0 (Menge der nat. Zahlen inkl. 0)
hier von Interesse !
Formale Charakterisierung
Def.: O-Notation
Eine Funktion f(n) heißt „von der Art O( g(n) )“, wobei O( g(n) ) die Menge von Funktionen
O( g(n) ) = f(n), für die es Zahlen c, n0 gibt, so daß
(∀ n ≥ n0) : 0 ≤ f(n) ≤ c·g(n)
definiert.
⇒ f(n) gehört der durch O( g(n) ) festgelegten Menge von Funktionen an, wenn
eine positive Konstante c existiert und f(n) für ein genügend großes n ≥ n0
unterhalb von c·g(n) liegt.
In anderen Worten: Für alle Werte n > n0 ist f(n) ≤ c·g(n) !
Notation : eigentlich , jedoch legt die Menge eine Charakteristik (Art) der Funktion fest, so daß typischerweise die Notation
verwendet wird !
( ) ( )( )ngOnf ∈
( ) ( )( )ngOnf =
Beispiele
1. Lineare Funktion ( ) ( )2nObannf =+=
0lim2
=+∞→ n
b
n
an
cban ≤+= :10
0, >a
cn
b
n
a
ncbna
≤+
⋅≤+⋅
2
2Ansatz :
somit : mit( ) ( )2nOnf = 1, 0 =+= nbac
2. Ansatz :
cn
bancbna ≤+⇒⋅≤+⋅ a
n
ba
n=+
∞→lim
0, >⋅≤+⋅ ancbna
cb
an ≤+=5
:50
somit : mit( ) ( )nOnf = 0
0
, nn
bac += Es wird stets diejenige Funktion
kleinster Ordnung gesucht !
2. Quadratische Funktion ( ) ( )22 4103 nOnnnf =−+=
2
1610010
0410
44103
4103
2,1
2
22
22
−±=
=+−
≤−+
⋅≤−+=
n
nn
nnn
ncnna
Ansatz :
somit : mit( ) ( )2nOnf = 10,4 0 == nc
( )4=→> cac
42.0
58.9
2
1
=
=
n
nLösungen :
⇒ 1058.910 === nn
( ) 11:
:
:
+<≤≤<−∈∀ xxxxxRx
floor
ceiling
x
x
Für g(n) sollen möglichst einfache (typische) Funktionen
angegeben werden, z.B.
Generell gesucht :
1,
log log n, log n,
n, n·log n,
n2, n3, ...,
n log n, 2n, 22n
Anwendung
Die O-Notation gestattet die Angabe der Ausführungszeit von Algorithmen zur Bearbeitung von Datenmengen. Dabei gibt die Struktur des Algorithmus Aufschlußüber den maximalen Aufwand (~ Anzahl der Verarbeitungsschritte), eine gegebene Datenmenge – bestehend aus n Elementen – zu bearbeiten !
cban ≤+= :10
O-Notation obere Grenze für den Aufwand
Begrenzung der Laufzeit eines Algorithmus‘ für beliebige
Eingabedaten
Die Aussage „die Ausführungszeit ist O( g(n) )“ bedeutet, daß die Ausführungszeit – als Funktion der Größe n der Menge von Eingabedaten –
im ungünstigsten Fall
O( g(n) ) ist !
Allgemeine Zielsetzung
Voraussage des Bedarfs an Ressourcen, die ein Algorithmus für seine Ausführung benötigt
Analyse von Algorithmen
Ressourcen :
§ Speicher§ Bandbreite für Datenübermittlung (Kommunikation)§ Logische Gatter§ Rechen- / Ausführungszeit (→ Zeitkomplexität eines Problems)
Modell :
Generische 1-Prozessor „random access“ Maschine (~ endliche Zustands-Maschine)
→ Jede Instruktion wird sequentiell nacheinander, Schritt für Schritt, ausgeführt(d.h. keine parallelen, nebenläufigen Prozesse ! )
Untersuchung der Performanz eines Algorithmus→ Abhängigkeit der Ausführungszeit (im ungünstigsten Fall), als Funktion von der
Anzahl der Eingabedaten
⇒⇒ O-Notation
Berechnungskomplexität („Computational complexity“)
Fragestellung :
geg. : Algorithmus (zur Lösung einer gestellten Aufgabe)
Zu zeigen, daß
a) die Ausführungszeit von der Art O( f(n) ) ist (für irgendeine Funktion f)
und
b) es keinen Algorithmus mit einer Ausführungszeit von der Art O( g(n) ) gibt, für die gilt :
( )( ) 0lim =
∞→ nf
ngn
1. Asymptotische Notation in Gleichungen auf der rechten Seite :
§ Die asymptotische Notation steht als Platzhalter für eine anonyme, nicht näher spezifizierte, Funktion
Bsp.:
bedeutet
d.h.
Asymptotische Notation in Gleichungen
( )nOnnn +=++ 22 2132
( )nfnnn +=++ 22 2132
( ) ( )nOnnf ∈+= 13
( ) ( ) ( )2
11 2
1nO
nnOiOiO
n
i
n
i
=
+
=
= ∑∑
==hier :
( )∑=
n
i
iO1
( ) ( ).Oif ∈( ) ( ) ( )nOOO +++ K21
§ Die Anzahl der „anonymen Funktionen“ in einem Ausdruck entspricht der Anzahl des Auftretens der asymptotischen Notation
Bsp.:
bedeutet nur eine einzige anonyme Funktion,
nicht (!)
2. Asymptotische Notation in Gleichungen auf der l inken Seite :
Bsp.:
Interpretation :
Unabhängig davon, wie die anonyme Funktion auf der l inken Seite gewählt wird, existiert stets eine Möglichkeit, die anonyme(n) Funktion(en) der rechten Seite so zu wählen, daß die Gleichung gültig ist !
( ) ( )222 nOnOn =+
( ) ( )( )
( )( )
2
22:
nOnO
ngnfnn
∈∈
=+∀(Bsp. !)
präziserer gröberer
Detaillierungsgrad
„Auswertungsrichtung“
1. Mehrere Funktionen :
§ Transitivität :
§ Reflexivität :
Bew.:
Regeln für die O-Notation
( ) ( )( ) ( ) ( )( )nhOngngOnf =∧=
( ) ( )( )nfOnf =
( ) ( )( )nhOnf =⇒
( ) ( )nfcnf ⋅≤ für beliebige n, 1≥c
2. Rechenregeln :
I.
II.
III.
IV.
( )( )( )( ) ( )( )( )( ) ( )( )
( )( )( )
( )( )( )( )
( ) ( )( )( )( )nfO
ngnfO
nfO
nfO
nfOO
ngOnfO
nfOnfO
nfOc
⋅====
⋅+
⋅
Beweise :
( )( ) ( )nfcnfcc ⋅≤⋅⋅ 21
( )( ) ( )( ) ( )( )nfOnfOnfO ⋅≠+ 2
( ) ( ) ( )nfcnfcnfc ⋅≤⋅+⋅ 321
für alle 12 ccc ⋅≥∀
( )( ) ( ) ( ) ( ) ( ) nfcngnnngnfO ⋅≤≥∀= :| 0
für alle 213 ccc +≥∀
( !!! )
( )( ) ( )( ) ( ) ( )( )ngnfcngcnfc ⋅⋅≤⋅⋅⋅ 321für alle
213 ccc ⋅≥∀
( )( )( )nfOO
( )ng( )( )nfOc ⋅= 1
( )ng( )nfcc ⋅⋅= 21
( )ng≥
zu I) :
zu II) :
zu III) :
zu IV) :
( ) ( )nfcnfcc ⋅≤⋅⋅ 321für alle 213 ccc ⋅≥∀
3. Aufwand von Suchalgorithmen
• Problemstellung – Suche in einem Telephonbuch• Schema der beiden Suchalgorithmen und ihr Aufwand• Häufig auftretende Komplexitäts-Klassen
Problemstellung – Suche in einem Telephonbuch
geg. : Menge von Datensätzen
beachte : In einem Telephonbuch sind die Einträge alphabetisch nach dem Namen geordnet !
Einträge (Datensätze) der Form
Name, Vorname
AdresseTelephonnummer
Aufgabe : Suchen nach einem (oder mehreren) Datensätzen mit einer bestimmten Eigenschaft→ die Eigenschaften entsprechen bestimmten Einträgen in den
Telephonbüchern (Name – Vorname)
1. Suche nach Namen :→ Ausnutzung der Ordnung
1. Telephonbuch in der Mitte aufschlagen
2. vergleiche gesuchten Namen mit dem aktuellen Namen auf der
aufgeschlagenen Seite
3. IF ORD(gesuchter Namen) < ORD(aktueller Namen) THEN
suche Namen in erster Hälfte
ELSE
suche Namen in zweiter Hälfte
4. Verfahre mit der jeweiligen Hälfte wieder wie genannt,
solange bis der gesuchte Name gefunden ist
⇒⇒ binäre Suche
2. Suche nach Telephon-Nummer :→ das Telephonbuch ist nicht nach den Nummern geordnet und muß daher der Reihe
nach element-weise durchsucht werden
⇒⇒ l ineare Suche
1. beginne mit ersten Element des Telephonbuchs
2. vergleiche gesuchte Nummer mit jeweils nächstem Element,
solange bis die Nummer gefunden (oder das Ende erreicht) ist
Schema der beiden Suchalgorithmen und ihr Aufwand
Lineare Suche
Gesuchtes Element : x =
Index : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
12 17 23 24 31 32 36 37 42 47 53 55 67 67 87 89 91 91 93
32
pos = 012345 Gefunden !
Beachte : Wäre das gesuchte Element x = ,
so hätte man 19 Suchschritte benötigt !
93
Binäre Suche
Gesuchtes Element : x =
Index : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
12 17 23 24 31 32 36 37 42 47 53 55 67 67 87 89 91 91 93
32
Min = 0 Max = 18
Gefunden !
Hinweise : 1. Der mittlere Wert für die Teilung berechnet sich aus
2. Unabhängig, welches Element gesucht wird, benötigt man eine konstante Anzahl von Suchschritten
12 17 23 24 31 32 36 37 42
Min = 0 Max = 8
32 36 37 42
Min = 5 Max = 8
Min = 5 Max = 6
32 36
( ) 2/MaxMinm +=
Aufwand
Vergleich
Verfahren Anzahl derElemente
mittlererAufwand
max.Aufwand
Lineare Suche
Binäre Suche
n
n
2/n
( ) 1log 2 −n
n
n2log ( )nO log
( )nO
( )⋅O
Hinweis : Für die Komplexitätsabschätzung bei der Bestimmung der oberen Schranke wird mittels der O-Notation eine Klasse von Funktionen für große Werte von n bestimmt. Wg. der Relation
gilt , da ( )( ) ( )( )nOnO 2loglog =
( ) ( )ngcnf ⋅≤
( ) ( ) ( )( )nOn log10loglog 22 ⋅=
c=
Häufig auftretende Komplexitäts-Klassen
Bezeichnung 10 100 1000 104 105 106
konstant
logarithmisch
1
n
( )ng
nlog
n2log
n
nn log⋅2/3n
2n3nn2
linear
log-linear
quadratisch
kubisch
exponentiell
1 1 1 1 1 1
3 7 10 13 17 20
10 50 100 170 300 400
3 10 30 100 300 1000
10 100 1000 104 105 106
30 700 104 105 2·106 2·107
30 1000 3·104 106 3·107 109
100 104 106 108 1010 1012
1000 106 109 1012 1015 1018
1000 1030 10300 103000 1030000 10300000
Hinweise : 1. Komplexitäten der Form N2, N3, N4, ... nennt man polynomial
2. Elementare Unterschiede gibt es zwischen exponentiellem und polynomialem
Laufzeitverhalten
§ Lösungen für ein gestelltes Problem können, je nach Strategie, einen unterschiedlichen Berechnungsaufwand haben; zur Bestimmung des „im Mittel“ oder maximal auftretenden Verarbeitungsaufwands analysiert man die Zeitkomplexität eines Algorithmus
§ Für die Bestimmung des Verarbeitungsaufwands ist die Größe der Eingabedatenmenge (Anzahl der Elemente n) die bestimmende Größe
§ Häufig ist man an dem im ungünstigsten Fall auftretenden Berechnungsaufwand für große Datenmengen, d.h. n →→ (sehr) großinteressiert; zur Abschätzung einer oberen Schranke dieses Aufwands bedient man sich der O-Notation
§ Häufig auftretenden Komplexitäts-Klassen sind Algorithmen mit konstantem , logarithmischem , l inearem , polynomialem sowie exponentiel lem Aufwand