YZ X W V U TSRQPONMLKJIHGFEDCBA9876
5 4 23 1 0 4C T S P V 6O0EKJ5Z2I1HRD8QGY9U3FAM7NBWLX
VORLESUNG: ALGORITHMEN UND DATENSTRUKTUREN
Eine Einführung
26. März 2014
Prof. Dr. Steffen Reith
Studienbereich Angewandte Informatik HochschuleRheinMain
TERMINE
Vorlesung: Donnerstag1415-1545im Hörsaal B002 PraktikaWirtschaftsinformatik:
Mo 1145-1315 Gruppe A Werntges C413 Di 1145-1315 Gruppe B Werntges C413 Do 1000-1130 Gruppe C Werntges C213 PraktikaAngewandte Informatik:
Di 815-945 Gruppe A Kaiser C213 Di 1000-1130 Gruppe B Kaiser C213 Mi 1145-1315 Gruppe C Igler C001 Do 815-945 Gruppe D Reith C213 Do 1145-1315 Gruppe E Reith C213 Do 1145-1315 Gruppe F Reith C001
2
ÜBER DEN DOZENTEN
→ Prof. Dr. Steffen Reith, geboren ja1968, verheiratet, ein Kind
→ Seit Sommersemester 2006 an der Hochschule RheinMain
→ Vorher: Softwareentwickler für kryptographische und mathematische Algorithmen für tief eingebettete System in KFZs.
→ Spezialgebiete: Komplexitätstheorie, Logik in der Informatik, Kryptographie und Zahlentheorie / Algebra
→ Bachelorarbeiten: z.B. Kryptographie, Mathematik, (parallele) Algorithmen und theoretische Informatik
EMail:
Steffen.Reith@hs-rm.de Skype:
Steffen.Reith
Büro:
Raum C202
Sprechstunde nach Vereinbarung (EMail) oder via Skype
3
WEITERE INFORMATIONEN ZUR VORLESUNG
Webseite:http://www.cs.hs-rm.de/~reith Literatur:
→ Gunter Saake und Kai-Uwe Sattler, Algorithmen und Datenstrukturen, dpunkt.verlag, 2005
→ Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest und Clifford Stein, Introduction to Algorithms, MIT Press, 2001
→ Robert Sedgewick, Algorithmen in C, Addison-Wesley, 1997
→ Uwe Schöning, Algorithmik, Spektrum Verlag, 2001
4
Notizen
Notizen
Notizen
Notizen
WEITERE INFORMATIONEN ZUR VORLESUNG (II) Ersatztermine:
Werden dienstags stattnden Skript:
Wird in unregelmäßigen Abständen auf der Webseite der Vorlesung veröffentlicht (Eine alte Variante steht bereits auf der Webseite zur Verfügung). user: algo / pw: fun
Folien:
Einzelne (kleine) Teile der Vorlesung werden in Folienform zur Verfügung stehen. Folien, die vom Skript abweichen, werden auf der Webseite (nachträglich) zur Verfügung stehen.
Eine eigene Mitschrift sollteangefertigtwerden!
5
LERNEN
Ein Student von Euklid fragte:”Aber was werde ich davon haben, wenn ich all' dies gelernt habe?“
Euklid rief seinen Sklaven und sagte ihm
”Gib ihm drei Oboli, der Mann muss etwas davon haben, dass er was lernt.“
6
EIN ROTER FADEN
In der Vorlesung werden die folgenden Themen untersucht:
1. Grundlagen und Notationen
2. Die Korrektheit von Algorithmen - ein Beispiel 3. Suchen
4. Insertion Sort, Laufzeitanalyse und die O-Notation 5. Merge Sort
6. Eine untere Schranke für Sortierverfahren 7. Andere Sortierverfahren
8. Dyn. Datenstrukturen - Stacks, Warteschlangen und Listen 9. Bäume & Algorithmen zur Traversierung
10. AVL - Bäume 11. Hashing
12. Graphenalgorithmen 13. Grundlagen der P/NP-Theorie
7
SPIELREGELN
→ Rechnerund Handys sind zu Beginn der Veranstaltungaus
→ Wir (Dozent + Hörer) sindpünktlich
→ Esredet nur eine Person
→ Bei Fragen und Problemensofort melden / fragen
→ Es wird Eigeninitiative und selbstständiges Arbeiten erwartet
→ Eine Vorlesung ist keine (wöchentliche) Fernsehserie!
→ Eine Vorlesung wird vonden Hörern und vom Dozenten gestaltet
→ aktive Mitarbeit erwünscht und erforderlich
→ Der Dozent will motiviert werden
→ Umfangreiche Vor- und Nachbereitung notwendig
→ Lernen nur kurz vor der Klausur ist tödlich! (kontinuierliches Lernen)
→ Vergessen Sie den (angeblichen) Konikt von Theorie und Praxis
Was wünschen Sie sich?
Notizen
Notizen
Notizen
Notizen
PRAKTIKUM
Start des Praktikums: heute geht es los
→ Auf der Webseite zur Vorlesung werden Siejede Woche Aufgabenblätter für das Praktikum nden.
→ In jeder Praktikumsstunde werden ca. dreizufällig
ausgewählteTeilnehmer ihre Lösungen vorstellen und Noten erhalten.
→ AI verwendetCals Programmiersprache. IDEs sind verboten!
Wählen Sie einen Editor nach Ihrem Geschmack. Übersetzt wird mit Hilfe von Shellkommandos oder Makeles.
→ WI verwendetRuby. Näheres erläutert Herr Werntges.
Regelmäßige Anwesenheit im Praktikum ist erforderlich! (75% Regel)
9
WAS IST EIN ALGORITHMUS?
Denition”Algorithmus“(informell): Ein Algorithmus ist eine eindeutige (Berechnungs-)Vorschrift, die beschreibt wie man Eingabeobjekte in Ausgabeobjekte umwandelt.
"Kochen harter Eier nach P. Bocuse (1977)":
1. In einem ausreichend großen Topf Wasser zum Kochen bringen
2. Das Ei in ein Sieb mit groben Löchern legen 3. Das Sieb in das kochende Wasser legen
4. Wenn das Ei mittelgroß ist, dann9Minuten kochen 5. Wenn das Ei groß ist, dann10Minuten kochen 6. Sieb aus dem kochenden Wasser nehmen 7. Sieb in kaltes Wasser tauchen
10
WAS IST EIN ALGORITHMUS? (II)
"Berechnen des größten gemeinsamen Teilers nach Euklid (ca. 300 v. Chr.)":
Eingaben: Zwei Zahlenaundb
1. Wennagrößer alsb, dann tausche beide Zahlen 2. Teileb(ganzzahlig) durchamit Restr
3. Setzebauf den Wert vonaundaauf den Wert vonr 4. Istrgrößer0arbeite bei Schritt2weiter
5. Gibbaus (ist der größte gemeinsame Teiler vonaundb) Zusätzlich fordern wir: Eine solche Vorschrift muss von einem mechanischen oder elektronischen Gerät, dem Prozessor, ausgeführt werden können.
11
(BERECHNUNGS-) PROBLEME
Algorithmen lösen (Berechnungs-)Probleme. Um solche Probleme formal besser darstellen zu können, benutzen wir folgende Notation:
Problem: EIERKOCHEN Eingabe: Ein Ei
Ausgabe: Ein hartgekochtes Ei Problem: GGT
Eingabe: Zwei natürliche Zahlenaundb
Ausgabe: Der größte gemeinsame Teiler vonaundb
Eine konkrete Eingabe eines Problems wollen wirInstanznennen.
12
Notizen
Notizen
Notizen
Notizen
EINIGE ANFORDERUNGEN AN ALGORITHMEN
Ein Algorithmus sollte folgenden Anforderungen genügen:
→ Endlichkeit- Der Algorithmus muss eineendliche Beschreibung(
”Befehle“) haben.
→ Determiniertheit- Jeder Eingabewert in den Algorithmus führt zu einemeindeutigen Resultat. Verarbeitet der Algorithmus diesen Wert erneut, so muss er dasgleiche Ergebnis liefern.
→ Vollständigkeit- Ein Algorithmushältfür jede zulässige Eingabe nachendlich vielen Schrittenan (=terminiert).
→ Universalität- Alle (zulässigen) Eingabedaten werden korrektverarbeitet.
→ Nachvollziehbarkeit- Ein Algorithmus muss von Dritten nachvollzogen / überprüftwerden können.
13
EINIGE ANFORDERUNGEN AN ALGORITHMEN (II) Erfüllt der Algorithmus von Bocuse diese Eigenschaften?
→ Endlichkeit- Offensichtlich”ja“, da die Beschreibung aus7 Zeilen besteht.
→ Determiniertheit-
”Jaein“, da nicht klar ist, ob jedes große Ei wirklich hart gekocht wird.
→ Vollständigkeit-”Jaein“, da nicht klar ist, ob das Programm hält, denn das Ei bleibt ja im kalten Wasser liegen.
→ Universalität-
”Nein“, da das Programm nicht mit kleinen Eiern umgehen kann (evtl. kleine Eier nicht als Eingabe zulassen).
→ Nachvollziehbarkeit-
”Jaein“, da nicht jedem klar ist, was ein
”ausreichend großer Topf“,
”ein Sieb mit großen Löchern“
oder ein”mittelgroßes Ei ist“.
14
EINIGE ANFORDERUNGEN AN ALGORITHMEN (III)
Die meisten Algorithmen des täglichen Lebens genügen unseren Anforderungen nicht!
(vgl.Aufbauanleitungeneines großenschwedischen Möbelhauses)
Um Algorithmenpräzise aufschreibenzu können, brauchen wir spezielle Notationen:
→ ”Pseudocode“- Eine an eine Programmiersprache (bei uns:
C / Ruby) angelehnte (verbale) Beschreibung
→ ”Nassi-Shneiderman Diagramme“- Graphische Darstellung von Algorithmen
Wir werdenalleAlgorithmen mit den im folgenden beschriebenen Grundelementen konstruieren.
Stichwort:Strukturierte Programmierung
15
SEQUENZ
Die einzelnen Teilalgorithmen werden hintereinander in der Reihenfolge ausgeführt, in der sie aufgeschrieben sind:
In Pseudocode:
Anweisung1;
Anweisung2;
Anweisung3;
Als Nassi-Shneiderman Diagramm:
Anweisung 1 Anweisung 2 Anweisung 3
Notizen
Notizen
Notizen
Notizen
VERZWEIGUNG
Wenn die BedingungBerfüllt ist, so wird der
”ja“-Teilalgorithmus ausgeführt, sonst der
”nein“-Teilalgorithmus.
In Pseudocode:
if (B) then
ja-Teilalgorithmus;
else
nein-Teilalgorithmus;
endif
17
VERZWEIGUNG (II)
Als Nassi-Shneiderman Diagramm:
Teil−
algorithmus
"nein"
Teil−
algorithmus
"ja"
ja nein
B
18
FALLUNTERSCHEIDUNG
Wenn der AusdruckAden Wertiannimmt, dann führen wir den Teilalgorithmusiaus. Wenn kein passender Teilalgorithmusi existiert, dann wird der Teilalgorithmus”default“ausgeführt.
In Pseudocode:
switch (A) { case1:
{Teilalgorithmus1;}
break;
case2:
{Teilalgorithmus2;}
break;
default:
{Default-Teilalgorithmus;}
}
19
FALLUNTERSCHEIDUNG (II)
Als Nassi-Shneiderman Diagramm:
Teil−
algorithmus 1 Teil−
algorithmus 2 Teil−
algorithmus 3 "default"
Teilalgorithmus 1
2
3 default
A
20
Notizen
Notizen
Notizen
Notizen
ABWEISENDE SCHLEIFE
Solange die BedingungBerfüllt ist, wird der TeilalgorithmusS ausgeführt:
while (B) do TeilalgorithmusS;
endwhile
Als Nassi-Shneiderman Diagramm:
Teilalgorithmus S B
21
NICHT ABWEISENDE SCHLEIFE
Führe den TeilalgorithmusSaus, solange bis die BedingungB nicht mehr zutrifft.
do {
TeilalgorithmusS;
} while (B);
Als Nassi-Shneiderman Diagramm:
Teilalgorithmus S
B
22
ZÄHLSCHLEIFE
Der Schleifenindexiwird vom Startwert zum Endwert inkrementiert, dabei wird der TeilalgorithmusSjedesmal durchlaufen.
for (i = Start to Ende) do TeilalgorithmusS;
endfor
Als Nassi-Shneiderman Diagramm:
Teilalgorithmus S for i = Start To End
23
EIN BEISPIEL
Algorithmus 1: merge-Operation Data: Zwei sortierte FolgenF1undF2
Result: Sortierte FolgeF, bestehend aus Elementen vonF1undF2
F=leere Folge;
while((F1nicht leer) && (F2nicht leer))do
if(Anfangselement vonF1ist kleiner als Anfangselement vonF2) then
t=Anfangselement vonF1; lösche Anfangselement vonF1; else
t=Anfangselement vonF2; lösche Anfangselement vonF2; endhängetanFan;
end
hänge eine evtl. verbliebene Restfolge anFan;
returnF;
Notizen
Notizen
Notizen
Notizen