PDF_4 - TU Graz

Werbung
Organisatorisches
• VO (708.031) & UE (708.032)
• Homepage:
Datenstrukturen und
Algorithmen
http://www.igi.tugraz.at/lehre/D&A/WS09/index.html
• Newsgroup: tu-graz.lv.datenalgo
• Unterlagen: Folien, Hilfsblätter, Literatur
• Vortragende:
VO 708.031
– VO: DI Stefan Klampfl ([email protected])
– UE: Dr. Robert Legenstein
([email protected])
08.10.2009
[email protected]
1
08.10.2009
Worum geht es?
[email protected]
Algorithmen
• Ein Algorithmus (Methode, Verfahren, Rezept)
nimmt bestimmte Daten als Input und
transformiert diese nach festen Regeln in
einen Output
• Dabei greift der Algorithmus auf Daten zu, die
in einer Datenstruktur organisiert sind
• Datenstrukturen und Algorithmen können
nicht getrennt voneinander betrachtet
werden
• Ein Algorithmus ist ein Verfahren zur Lösung
eines Problems (im Unterschied zu seiner
Implementation!)
• Versuch einer Definition:
08.10.2009
08.10.2009
[email protected]
2
3
Ein Algorithmus ist eine endliche Folge von Anweisungen,
die die Lösung eines bestimmten Problems erlaubt. Jede
Anweisung hat eine klare Bedeutung und kann mit
endlichem Aufwand und in endlicher Zeit ausgeführt
werden.
[email protected]
4
Algorithmen
Datenstrukturen
• Beispiele:
Eine Datenstruktur ist eine bestimmte Art Daten zu
verwalten und zu verknüpfen, damit man in geeigneter
Art und Weise auf sie zugreifen und diese manipulieren
kann.
Sortieren
Suchen
Codieren
Optimieren
Algorithmen zur Manipulation von Datenstrukturen
(z.B.: Einfügen, Entfernen, Maximum, etc.)
– Kombinationen daraus (z.B.: zuerst Sortieren und
dann Suchen)
–
–
–
–
–
Immer verbunden mit speziellen Operationen
(z.B.: Einfügen, Entfernen, Sortieren, Maximum,
Nachfolger,…)
• Wichtige Eigenschaft: modular, können daher
kombiniert werden
08.10.2009
[email protected]
= wieder Algorithmen
5
08.10.2009
Datenstrukturen
Wir wollen Algorithmen und Datenstrukturen
systematisch analysieren und vergleichen.
– Lineare Felder (arrays)
– Stapel (stacks)
– Schlangen (queues)
– Halden (heaps)
– Bäume (trees)
– Hashtabellen
– Kombinationen daraus (z.B.: Baum aus Halden,
Schlange aus Bäumen, etc.)
[email protected]
6
Worum geht es?
• Beispiele:
08.10.2009
[email protected]
Was ist ein guter Algorithmus?
• Er muss korrekt sein, d.h. das richtige Ergebnis für alle
möglichen Inputs liefern.
• Er muss „schnell“ sein.
• Er soll wenig Ressourcen (Zeit, Speicher, Bandbreite,
CPUs, logische Gatter, …) benötigen.
7
08.10.2009
[email protected]
8
Analyse von Algorithmen
Ein erstes Beispiel
• Sortieren:
Wir wollen wissen wie viel Zeit (allg.: Ressourcen) der
Algorithmus in Abhängigkeit der Inputgröße benötigt.
Input: eine Sequenz von n Zahlen a1 , a2 ,K, an
Output: eine Permutation der Inputsequenz a1′, a2′ ,K, an′
sodass a1′ ≤ a′2 ≤ L ≤ an′
Abstraktion des Algorithmus (und der Datenstruktur)
(Unabhängig von der eigentlichen Implementation –
Sprache, OS, Protokolle, Hardware etc.)
• Instanz des Sortierproblems:
Input: 31,41,59,26,41,58
Output: 26,31,41,41,58,59
Mathematische Werkzeuge:
Ein Algorithmus ist korrekt, wenn er für jede Instanz des
Inputs einen korrekten Output liefert.
O-Notation, Kombinatorik,
Wahrscheinlichkeitstheorie, etc.
08.10.2009
[email protected]
9
08.10.2009
Ein erstes Beispiel
[email protected]
10
Ein erstes Beispiel
• Sortieren durch Einfügen (Insertion-Sort)
• Sortieren durch Einfügen (Insertion-Sort)
Pseudocode:
Input: lineares Feld A[1..n]
INSERTION-SORT(A)
1: FOR i=2 TO n
2:
h=A[i]
3:
j=i-1
4:
WHILE A[j]>h AND j>0 DO
5:
A[j+1]=A[j]
6:
j=j-1
7:
A[j+1]=h
08.10.2009
[email protected]
11
08.10.2009
[email protected]
12
Ein erstes Beispiel
Analyse der Laufzeit
• Uns interessiert die Laufzeit in Abhängigkeit der Größe
des Inputs
• Inputgröße: hängt vom Problem ab (z.B.: Länge des
Arrays, Anzahl der Inputbits)
• Laufzeit: Zählen der elementaren Schritte:
• Warum ist Insertion-Sort korrekt?
INSERTION-SORT(A)
1: FOR i=2 TO n
2:
h=A[i]
3:
j=i-1
4:
WHILE A[j]>h AND j>0 DO
5:
A[j+1]=A[j]
6:
j=j-1
7:
A[j+1]=h
–
–
–
–
–
• Nach jedem Durchlauf der FOR-Schleife sind die ersten i
Zahlen sortiert (Schleifeninvariante)
• Korrektheitsbeweis durch Induktion
08.10.2009
• Alle Schritte brauchen dabei bestimmte, aber
konstante Zeiten
[email protected]
13
08.10.2009
Laufzeit von Insertion-Sort
Pseudocode
Zeit-Kosten
INSERTION-SORT (A)
1: FOR i=2 TO n
2: h=A[i]
3: j=i-1
4: WHILE A[j]>h AND j>0 DO
5:
A[j+1]=A[j]
6:
j=j-1
7: A[j+1]=h
08.10.2009
[email protected]
[email protected]
14
Laufzeit von Insertion-Sort
Anzahl
c1
n
c2
n-1
c3
c4
c5
c6
n-1
∑
c7
Zuweisung: a=b, c=3.0
Arithmetische Operationen: +, -, *, /
Einfache Funktionen: sqrt(x), ln(x), swap(x,y)
Vergleiche: ==, <, >, ≤, ≥
Indirekte Adressierung: A[i], B[k+1]
• Laufzeit hängt von der Vorsortierung des Arrays ab
(ti … Anzahl der WHILE-Abfragen für das i-te Element)
• Fallunterscheidungen:
n
i= 2 i
∑
n
i=2
t
(ti − 1)
n
∑ (t
n-1
i =2
i
− 1)
15
– Best case: Array bereits sortiert
T(n) ist eine lineare Funktion von n
– Worst case: Array umgekehrt sortiert
T(n) ist eine quadratische Funktion von n
– Average case: T(n) ist quadratische Funktion von n
• Wir sind vor allem an der Ordnung interessiert, mit der
die Laufzeit in Abhängigkeit der Inputgröße wächst
08.10.2009
[email protected]
16
Fallunterscheidungen
Vergleich zweier Ordnungen
• Gründe für worst-case Analyse:
–
–
–
–
Entspricht der oberen Schranke – keine Überraschungen
Kommt häufig vor (z.B.: Suchen nach nicht gespeicherten Daten)
Mittlerer Fall oft ordnungsmäßig nicht besser
Oft sehr einfach am Pseudocode ablesbar
• Sortieren von 300.000 Einträgen (z.B. Grazer
Telefonbuch):
– Alter PC (1 MIPS):
Insertion-Sort: T(n) ≈ n2
90 Milliarden Schritte
90.000 sec ≈ 25 h > 1 Tag
• Gründe für best-case Analyse:
– Entspricht der unteren Schranke
– Sinnvoll, wenn der beste Fall wahrscheinlicher ist
– Supercomputer (500 Mflops):
• Gründe für average-case Analyse:
–
–
–
–
Um eine durchschnittliche Performance zu analysieren
Wenn der worst case sehr selten ist
Zusätzlich Wissen über die Verteilung der Inputs nötig
Meist komplizierter in der Analyse
08.10.2009
[email protected]
Besserer Sortieralgorithmus: T(n) ≈ n*ld(n)
≈ 5,5 Millionen Schritte
5,5 sec!!!
Insertion-Sort: T(n) ≈ n2
90 Milliarden Schritte
180 sec = 3 min
17
08.10.2009
[email protected]
18
Vergleich zweier Ordnungen
• Sortieren von 8.000.000 Einträgen (z.B. NYC
Telefonbuch):
– Alter PC (1 MIPS):
Insertion-Sort: T(n) ≈ n2
6.4*1013 Schritte
416.67 Tage
Besserer Sortieralgorithmus: T(n) ≈ n*ld(n)
≈ 183 Millionen Schritte
183 sec!!!
Danke für Ihre Aufmerksamkeit!
Bis zum nächsten Mal.
(Donnerstag, 15. Okt. 2009, 11:15, i13)
– Supercomputer (500 Mflops):
Insertion-Sort: T(n) ≈ n2
6.4*1013 Schritte
35 Stunden
08.10.2009
[email protected]
19
08.10.2009
[email protected]
20
Herunterladen