34
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

Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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

Page 2: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

1. Algorithmen und ihr Berechnungs-aufwand

• Motivation• Beispiel – Finden einer Münze

Page 3: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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)

Page 4: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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

Page 5: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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

Page 6: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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“

Page 7: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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“

Page 8: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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

Page 9: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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“

Page 10: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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

Page 11: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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

Page 12: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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

Page 13: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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 ?

Page 14: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

2. Aufwandsabschätzung – Wachstum von Funktionen

• Asymptotische Notation – O-Notation• Asymptotische Notation in Gleichungen• Analyse von Algorithmen• Regeln für die O-Notation

Page 15: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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 !

Page 16: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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 =

Page 17: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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 !

Page 18: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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

Page 19: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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

Page 20: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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 !

Page 21: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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

Page 22: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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

Page 23: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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 (!)

Page 24: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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“

Page 25: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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

⋅====

⋅+

Page 26: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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 ⋅≥∀

Page 27: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

3. Aufwand von Suchalgorithmen

• Problemstellung – Suche in einem Telephonbuch• Schema der beiden Suchalgorithmen und ihr Aufwand• Häufig auftretende Komplexitäts-Klassen

Page 28: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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)

Page 29: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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

Page 30: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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

Page 31: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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 +=

Page 32: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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=

Page 33: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

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

Page 34: Teil VII : Zeitkomplexität von Algorithmen · (Standardalgorithmus nach Automatenmodell vs. Boyer-Moore-Algorithmus) • Berechnung der Fibonacci-Zahlen (rekursiver vs. iterativer

§ 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