Sie sind auf Seite 1von 31

Grundz

uge von Algorithmen und


Datenstrukturen
Andreas Karrenbauer
Max-Planck-Institut f
ur Informatik
Wintersemester 2016/2017

Wozu kann man das u


berhaupt gebrauchen?
Bildrekonstruktion

Original

Eingabe

Ausgabe

Wintersemester 2016/2017

Bevor es richtig losgeht: Organisatorisches

6 CP = 30h Vorlesung + 30h Ubungen


+ 120h Selbststudium
Eine Vorlesung pro Woche (donnerstags 12 bis 14 Uhr)

Theoretische und (optionale) praktische Ubungen


Eins von acht Tutorien pro Woche
Hauptklausur am 16. Februar 2017, Nachklausur am 30. Marz 2017
Bitte besuchen Sie
http://goo.gl/Wf6aVA
und melden sich auf der Mailingliste an!
Achtung
Die Anmeldung auf der Mailingliste ist unverbindlich und
ersetzt nicht die offizielle Anmeldung gema Ihres Studiengangs!
Wintersemester 2016/2017


Ubungsbl
atter und Tutorien

Ubungsbl
atter werden jeweils donnerstags online gestellt.
Sie sind eine Woche spater vor der Vorlesung abzugeben.

Klausurzulassung: 50% der Punkte aus den Ubungsbl


attern.
Zweierteams sind erlaubt vorausgesetzt, dass
jeder alle L
osungen vorrechnen kann.
Die Losungen werden in den Tutorien besprochen.

Der Link zur Registrierung f


ur eine Ubungsgruppe
wird heute um 16 Uhr
auf der Mailingliste ver
offentlicht. Ab dann wird er auch in der
Willkommensnachricht der Liste enthalten sein.

Wintersemester 2016/2017

Feedback
Bitte ermoglichen Sie uns, die Vorlesung laufend zu verbessern!
https:
//halma.mpi-inf.mpg.de/internet/survey.nsf/Survey?OpenForm
Achtung
Die Daten sind so anonym, wie Sie sich durch das Internet bewegen.
Ich habe keinen Zugriff auf IP-Adressen.
Bei strafrechtlicher Relevanz k
onnen die Systemadministratoren gema
Datenschutzgesetz auf u
bermittelte und gespeicherte personenbezogene
Daten zugreifen.

Wintersemester 2016/2017

Regeln der guten wissenschaftlichen Praxis


Sag nein zu Plagiaten!
Wenn Sie eine Losung
ganz oder teilweise
aus dem Internet, von Ihren Kollegen oder von sonst woher
ohne ausreichende Quellenangabe

abgeben, dann werden die Punkte des gesamten Ubungsblatts


annuliert.
Alle Teammitglieder haften gemeinschaftlich.
Wenn Sie jedoch korrekt zitieren, dann bekommen Sie

die Halfte der moglichen Punkte f


ur w
ortliche Ubernahmen
(Korrektheit
vorausgesetzt) und
desto mehr Punkte, je gr
oer Ihr eigener Beitrag ist.
Wintersemester 2016/2017

Literatur
Bucher (im Semesterapparat: http://goo.gl/cEvGoK)
Cormen, Leiserson, Rivest, Stein: Algorithmen - Eine Einf
uhrung,
Oldenbourg 2010
Dietzfelbinger, Mehlhorn, Sanders: Algorithmen und Datenstrukturen
- Die Grundwerkzeuge, Springer 2014
Mehlhorn, Sanders: Algorithms and data structures
- The basic toolbox, Springer 2008

Skripte/Folien
Skript von Prof. Blaser (Winter 2015/2016)
http://www-cc.cs.uni-saarland.de/course/50/
Folien von Prof. Seidel (Winter 2014/2015)
http://www-tcs.cs.uni-sb.de/course/60/
Wintersemester 2016/2017

Lernziele
Die Studierenden lernen
die wichtigsten Methoden des Entwurfs von Algorithmen und
Datenstrukturen kennen: Teile-und-Herrsche, Dynamische
Programmierung, inkrementelle Konstruktion, Greedy, Dezimierung,

Hierarchisierung, Randomisierung.
Algorithmen und Datenstrukturen bzgl. Zeit- und Platzverbrauch f
ur das
u
bliche RAM Maschinenmodell zu analysieren und auf Basis dieser
Analysen zu vergleichen.
verschiedene Arten der Analyse (schlechtester Fall, amortisiert, erwartet)
einzusetzen.
wichtige effiziente Datenstrukturen und Algorithmen kennen.

Wintersemester 2016/2017

Kompetenzen
Sie sollen
die Fahigkeit erwerben, vorhandene Methoden durch theoretische
Analysen und Abwagungen f
ur ihre Verwendbarkeit in tatsachlich
auftretenden Szenarien zu pr
ufen.
die Fahigkeit trainieren, Algorithmen und Datenstrukturen unter dem
Aspekt von Performanzgarantien zu entwickeln oder anzupassen.

Aktuelles
Warum Merkel an die Algorithmen will
Spiegel Online, 26.10.16, http://goo.gl/KonnOE
Softwarefehler lie Schiaparelli abst
urzen
Spiegel Online, 26.10.16, http://goo.gl/FMy78m
Wintersemester 2016/2017

Algorithmus
Was sagt Wikipedia dazu?
http://de.wikipedia.org/wiki/Algorithmus
Ein Algorithmus ist eine eindeutige Handlungsvorschrift zur Losung eines
Problems oder einer Klasse von Problemen. Algorithmen bestehen aus
endlich vielen, wohldefinierten Einzelschritten.[1] Somit konnen sie zur
Ausf
uhrung in einem Computerprogramm implementiert, aber auch in
menschlicher Sprache formuliert werden. Bei der Problemlosung wird eine
bestimmte Eingabe in eine bestimmte Ausgabe u
uhrt.[2]
berf
1 Hartley Rogers, Jr.: Theory of Recursive Functions and
Effective Computability, S. 2
2 Cormen, Leiserson, Rivest, Stein: Algorithmen - Eine
Einf
uhrung, S. 5
Wintersemester 2016/2017

Beispiel
Problem 1 (Auswahlproblem)
Bestimme das k-kleinste von n Elementen
gegeben: Elemente a1 , . . . , an mit einer Ordnung sowie ein
k [n] := {1, . . . , n}
gesucht: a(k) f
ur eine Permutation : [n] [n] mit
a(1) a(2) a(n)

Minimumssuche (k = 1), Maximumssuche (k = n), Median (k = b n2 c)

Wintersemester 2016/2017

Das RAM-Modell
Definition 2 (Random Access Machine)
Die Random Access Machine (RAM) ist ein abstraktes Maschinenmodell
mit
abzahlbar unendlich vielen Speicherzellen Si , i Z0 ,
endlich vielen Registern R1 , . . . , Rk und
einer arithmetisch-logischen Einheit (ALU).
Zu Beginn ist R1 = 1 und das Programm steht in S1 , . . . , SR2 .
Das Programm terminiert, wenn R1 auerhalb von [R2 ] liegt.
Ansonsten f
uhrt die ALU die Anweisung in SR1 aus und erhoht R1 um 1
sofern R1 in der Anweisung selbst nicht u
berschrieben wird:
Ri SRj , SRj Ri , Ri Rj Rh
Wintersemester 2016/2017

Komplexit
at

Algorithmen werden charakterisiert durch


Laufzeit: Anzahl der Schritte bis Terminierung
Speicherbedarf: Anzahl benutzter Speicherzellen

Wintersemester 2016/2017

Asymptotische Notation
Definition 3 (Landau-Symbole)
Sei f : Z0 R eine Funktion.
O(f (n)) := {g : Z0 R : c, n0 > 0n n0 : |g(n)| c |f (n)|}
die Menge der Funktionen, die h
ochstens so schnell wachsen wie f .
(f (n)) := {g : Z0 R : c, n0 > 0n n0 : |f (n)| c |g(n)|}
die Menge der Funktionen, die mindestens so schnell wachsen wie f .
(f (n)) := {g : Z0 R : c1,2 , n0 > 0n n0 :
c1 |f (n)| |g(n)| c2 |f (n)|}
die Menge der Funktionen, die genauso so schnell wachsen wie f .
o(f (n)) := {g : Z0 R : c > 0n0 > 0n n0 : |g(n)| c |f (n)|}
die Menge der Funktionen, die gegen
uber f verschwinden.
(f (n)) := {g : Z0 R : c > 0n0 > 0n n0 : |f (n)| c |g(n)|}
die Menge der Funktionen, denen gegen
uber f verschwindet.
Wintersemester 2016/2017

Veranschaulichung

Wintersemester 2016/2017

Eigenschaften
Theorem 4
1. g O(f ) f (g), (f ) = O(f ) (f ), g (f ) f (g).
2. logb n (log2 n) f
ur alle b > 1
3. logd2 (n) o(n ) f
ur alle d 0 und > 0
Beweisskizze
1. Einsetzen der Definitionen
2. Logarithmengesetz: logb a =

logc a
logc b

3. Logarithmengesetz: logd2 (n) = 2d log2 log2 n versus n = 2 log2 n

Wintersemester 2016/2017

Anmerkungen zum ersten Teil des Beweises

Sei g O(f ), d.h. c, n0 > 0n n0 : |g(n)| c |f (n)|, was genau


der Definition von f (g) entspricht. Die R
uckrichtung folgt analog.
Sei g O(f ) (f ). Deshalb existieren c0 , n00 , c00 , n000 > 0, so dass
n n00 : |f (n)| c0 |g(n)| und n n000 : |g(n)| c00 |f (n)|. Wir
definieren c1 := c10 , c2 := c00 , n0 := max{n00 , n000 } und beobachten, dass
n n0 : c1 |f (n)| |g(n)| c2 |f (n)| und deshalb g (f ) ist. Die
Inklusion in der Gegenrichtung ist trivial.
g (f ) f (g) folgt aus der Kombination der beiden vorherigen
Behauptungen.

Wintersemester 2016/2017

Rechnen mit Landau-Symbolen

Wir werden die Notation f = O(g) f


ur f O(g) bzw. O(f ) = O(g) f
ur
O(f ) O(g) einf
uhren.

Theorem 5
F
ur alle n Z0 gilt
P
1. Hn := nk=1 k1 = ln(n) + O(1)

n

2. n! = 2n ne 1 + n1

(harmonische Zahlen)
(Sterlingformel)

Wintersemester 2016/2017

Instanzen und Komplexit


at
Die Komplexitat wird i.d.R. in Abhangigkeit von der Groe der Eingabe
angegeben.
Eine g
ultige Kodierung einer Eingabe f
ur einen Algorithmus/eines
Problems nennen wir Instanz.
size(I) bezeichnet dabei die Kodierungslange einer Instanz I in der
Anzahl der benotigten Bits.
Wir fassen Instanzen ahnlicher Gr
oe in Klassen zusammen.
Sei In die Menge aller Instanzen I (f
ur einen Algorithmus/ein Problem)
mit size(I) = (n)
Ausnahmen; z.B. Gauss-Elimination (LR-Zerlegung), Eingabe n n
Matrix, size(I) = (n2 ), Laufzeit time(I) = O(n3 ) arithm. Op.

Wintersemester 2016/2017

F
alle

Wir unterscheiden bei der Komplexitat den


schlechtesten Fall (worst case): T (n) = max{time(I) : I In }
besten Fall (best case): T (n) = min{time(I) : I In }
P
mittleren Fall (average case): T (n) = |I1n | IIn time(I)
Hinweis
Meistens wird der schlechteste Fall betrachtet. Sofern nicht anders
angegeben, gehen wir davon aus.

Wintersemester 2016/2017

Pseudocode
Es gibt keinen einheitlichen Standard f
ur Pseudocode.

Leitlinien
Pseudocode soll leicht lesbar, aber eindeutig interpretierbar sein.
D.h. von Experten in ein RAM-Programm u
bersetzt werden konnen,
evtl. u
ber den Umweg einer hinreichend hardware-nahen imperativen
Sprache wie z.B. C/C++.
Sinnvoll abstrahieren durch Prozeduren/Funktionen/Klassen.

Aquivalenz
zu RAM-Programmen
Man kann es axiomatisch hinnehmen oder sich induktiv klarmachen,
d.h. Makros bauen: JZ ; while(C){I; }
Wintersemester 2016/2017

Datentypen und Datenstrukturen

Elementare Datentypen werden von den Registern/Speicherzellen des


verwendeten RAM-Model vorgegeben:
beliebige reelle Zahlen ; Real-RAM

beliebige ganze Zahlen


[Ubung]
beschrankte ganze Zahlen ; Word-RAM
Bit ; Bit-Modell

Strukturen: zusammenhangender Block von Speicherzellen

Felder (Arrays): konsekutive indizierte Speicherzellen


(ggf. Vielfache einer Struktur)

Wintersemester 2016/2017

Zusicherungen und Invarianten


Wir verstehen Pseudocode als Beweis f
ur die Existenz eines Algorithmus,
der zu einer Eingabe eine bestimmte Ausgabe produziert.
Das Zusichern von Vor- und Nachbedingungen sowie die Verwendung von
Invarianten erleichtern die Argumentation.
Beispiel: ggT
[Tafel]

Wintersemester 2016/2017

Grundlagen der Algorithmenanalyse


Prinzipien
Abstrahieren weg von den Komplikationen eines realen Rechners,
Gruppieren der Eingaben nach Gr
oen,
Betrachtung des schlechtesten Falls,
Asymptotische Notation,
erlauben die direkte Analyse der Rechenzeit von Pseudocode.

Rechenregeln
Sei Tn (I) die max. Laufzeit der Anweisungen I auf Eingaben der Groe n.
Sequenzielle Anweisungen: Tn (I; J) = Tn (I) + Tn (J)
P`(n)
Tn (while(C){I; }) = Tn (C) + i=1 Tn (I, C, i) mit `(n) als Schranke
an die Interationen und Tn (I, C, i) als Laufzeit von Iteration i mit
anschlieendem Test von C.
Wintersemester 2016/2017

Teile und Herrsche / Rekurrenzen


Beispiel: rekursive binare Suche


T (n) = T ( n/2 ) + O(1) = O(log n)

Simultane Minimums- und Maximumssuche


T (1) = 0
T (2) = 1
T (n) = T (d n2 e) + T (b n2 c) + 2

f
ur n > 2

Wintersemester 2016/2017

Master-Theorem
Theorem 6 (Master-Theorem)
Wenn T : Z R0 die Rekurrenzen
(
a
f
ur n n0 ,
T (n)
s
c n + d T (dn/be + en ) f
ur n > n0
f
ur Konstanten a, c, d > 0, b > 1, s, e 0 und einer Folge von ganzen
Zahlen en mit dn/be < en e f
ur alle n n0 erf
ullt, dann gilt

f
ur d < bs ,
O(n )
T (n) = O(ns log n) f
ur d = bs ,

O(nlogb d )
f
ur d > bs .

Wintersemester 2016/2017

Beweisskizze f
ur das Master-Theorem

Spezialfall en = e und monoton wachsende T


[OBdA, siehe Ubung]
l
m
e+1
Sei N0 = n und Ni = Ni1
+ e f
ur i > 0. Dann gilt Ni bni + 11/b
.
b
Sei n
0 := max{n0 , 2(e + 1)/(1 1/b)} und k := min{i : Ni n
0 }.
2n
Dann gilt Ni < bi f
ur i {0, . . . , k 1} und k logb (2n/
n0 ).
Sei a
:= max{a, T (
n0 )}. Dann gilt
T (n) d T (N1 ) + cN0s dk T (Nk ) + c

k1
X

di Nis

i=0

dk a
+ c2s ns

k1 
X
i=0

Falle
T (n)

d < bs
2s ns
n
s0

s s

c2 n
+ 1d/b
s
= O(ns )

d
bs

i

d = bs
2s ns
n
s0

+ c2s ns logb ( 2n
n
0 )
s
= O(n log n)

d > bs
c2s n
s dk

dk a
+ d/bs01
= O(dk )

Wintersemester 2016/2017

Analyse des mittleren Falls


Beispiel: binarer Zahler
Eingabe : A[] : Feld mit n bits, das eine Zahl a {0, . . . , 2n 1} darstellt
Ausgabe: Feld mit n bits, das die Zahl (a + 1) mod 2n darstellt
i 0;
while i < n und A[i] = 1 do
A[i] 0; i i + 1

//Invariante: 2i +

Pn1
j=0

A[j] 2j

if i < n then
A[i] 1
return A

Laufzeitkomplexitat
worst-case: T (n) := max{time(A) : A In } n
P
average-case: T (n) := |I1n | AIn time(A) 2

In = {0, 1}n
[Tafel]
Wintersemester 2016/2017

Zufallsvariable und Erwartungswert


Wahrscheinlichkeitsraum (, , p)
Ergebnismenge 6= .
Ereignismenge
2 mit , A A := \ A ,
S
A := iI Ai mit Ai f
ur alle i I Z1 gilt A .
Wahrscheinlichkeitsma
p : U
[0, 1] mit p() = 0, p() = 1,
P
p(A) = iI p(Ai ) f
ur A := iI Ai .

reelle Zufallsvariable X : R
Messbarkeitsbedingung: x R : { : X() x}

Erwartungswert E[X]
Sei X eine diskrete, reelle Zufallsvariable,
die die Werte xi , i I Z1 ,
P
annehmen kann, dann ist E[X] := iI xi p(X = xi ).
Wintersemester 2016/2017

Mittlere und erwartete Laufzeit


Beispiel: Zwischenmaxima
Eingabe : M [] : Feld mit n Elementen
Ausgabe: max{M [i 1] : i [n]}
randomPermutation(n);
m M [[0]]; for i [n 1] do if M [[i]] > m then m M [[i]];
return m

= S(n), die Menge aller Permutation , = 2S(n) , p() = 1/n!


Binare Zufallsvariable X1 = 1, wenn M [[i]] > M [[j]] f
ur alle
j {0, . . . , i 1}, ansonsten Xi = 0.
1
E[Xi ] = p(Xi = 1) = 1+i
.
Pn1
P
Pn1
S := i=0 Xi ; E[S] = n1
i=0 E[Xi ] =
i=0

1
1+i

= Hn 1 + ln n

Wintersemester 2016/2017

Las-Vegas- und Monte-Carlo-Algorithmen

Las-Vegas-Algorithmus
berechnet immer das richtige Ergebnis,
aber die Laufzeit ist eine Zufallsvariable.

Monte-Carlo-Algorithmus
immer die gleiche Laufzeit,
aber das Ergebnis kann mit einer durch eine Konstanten c < 1
beschrankte Wahrscheinlichkeit falsch sein.

Wintersemester 2016/2017

Das könnte Ihnen auch gefallen