Title: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
1Datenstrukturen, Algorithmen und Programmierung 2
(DAP2)
2Organisatorisches
- Vorlesung DAP2
- Dienstag 12-14 c.t.
- Donnerstag 14-16 c.t.
- Zu meiner Person
- Christian Sohler
- Fachgebiet Komplexitätstheorie und effiziente
Algorithmen - Lehrstuhl 2, Informatik
3Organisatorisches
- Übungen
- Montag 14-16, 16-18
- Dienstag 10-12, 14-16, 16-18
- Mittwoch 12-14, 14-16, 16-18
- Donnerstag 12-14, 16-18
- Zum Teil mehrere parallele Gruppen
- Anmeldung über AsSESS
- Beginn der Anmeldung Dienstag im Laufe des Tages
- Anmeldeschluss Donnerstag, 18 Uhr
- Änderungen der Übungsgruppe Bis Montag 10 Uhr
4Organisatorisches
- Übungen
- Präsenzübungen/ Heimübungen abwechselnd
- Abgabe Heimübung Freitag 10 Uhr Briefkästen im
Pav.6 - Zulassung zur Klausur (Studienleistung Übung
Teil 1) - Teilnahme an den Übungen - 50 der
Übungspunkte - Max. 3 Personen pro Übungsblatt
5Organisatorisches
- Übungen Praktikum
- Für Studierende des Bachelorstudiengangs
verpflichtend - Bachelor Elektrotechnik/Informationstechnik und
Informations- und Kommunikationstechnik hat
eigenes Praktikum - Termine
- Mittwoch 12-14, 14-16, 16-18
- Donnerstag 8-10, 10-12, 12-14
- Freitag 8-10, 10-12
- Anmeldung über AsSESS (ab Dienstag
Anmeldeschluss Do. 18 Uhr Änderungen bis Montag
10 Uhr)
6Organisatorisches
- Übungen Praktikum
- Heimübungen, Präsenzübungen
- Zulassung zur Klausur (Studienleistung
Praktikum) - 8 von insgesamt 14 Punkten bei den 7
Präsenzaufgaben - 7 von insgesamt 12 Punkten bei den 6 Heimaufgaben
- Anwesenheit bei den Übungen
- Sonstiges
- Schüler -gt Tobias Marschall
- Poolräume können außerhalb der Veranstaltungszeite
n immer genutzt werden - Weitere Informationen auf der Webseite
http//ls11-www.cs.uni-dortmund.de/teaching/dap2p
raktikum
7Organisatorisches
- Tests
- 1. Test 18. Mai
- 2. Test mal schauen
- Einer der beiden Test muss mit 50 der Punkte
bestanden werden(Studienleistung Übung Teil 2)
8Organisatorisches
- Bei Fragen
- Meine Sprechzeiten Mo 14-15 Uhr oder nach der
Vorlesung - Organisatorische Fragen an
- Vorlesung
- Melanie Schmidt (melanie.schmidt_at_tu-dor
tmund.de) - Christiane Lammersen (christiane.lammersen_at_tu-dor
tmund.de) - Praktikum
- Tobias Marshall (tobias.marschall_at_tu-d
ortmund.de) - Außerdem INPUD Forum
9Organisatorisches
- Klausurtermine
- 10.8. 17-21 Uhr
- 21.9. 17-21 Uhr
- Weitere Infos
- Vorlesungsseite http//ls2-www.cs.tu-dortmund.de/
lehre/sommer2010/dap2/ - Oder von der Startseite des LS 2 -gt Teaching -gt
DAP2
10Einige Hinweise/Regeln
- Klausur
- Eine Korrelation mit den Übungsaufgaben ist zu
erwarten - Laptops
- Sind in der Vorlesung nicht zugelassen
11Literatur
- Skripte
- Kein Vorlesungsskript
- Skripte der vergangenen Jahre
- Bücher
- Cormen, Leisserson, Rivest Introduction to
Algorithms, MIT Press - Kleinberg, Tardos Algorithm Design, Addison
Wesley - WWW
- Kurs Introduction to Algorithms am MIT. Online
Material (Folien, Video und Audio Files!) - http//ocw.mit.edu/OcwWeb/Electrical-Engineering-a
nd-Computer-Science/6-046JFall-2005/CourseHome/
12Was ist ein Algorithmus?
- Informale Definition
- Ein Algorithmus ist eine eindeutige
Handlungsvorschrift zur Lösung von Instanzen
eines Problems in endlich vielen Schritten. - Bemerkung
- Es gibt viele Beschreibungen desselben
Algorithmus - Algorithmus ist unabhängig von der
Programmiersprache!!! - Die Definition wird im nächsten Semester
formalisiert
13Was ist ein Algorithmus?
- Beispiel
- Problem Maximumsuche
- Instanz Menge Aa ,,a von n Zahlen (als
Feld A gegeben) - Ausgabe Index i der größten Zahl in A
- Algorithmus-Max-Search(Array A)
- 1. max ? 1
- 2. for j ? 2 to length(A) do
- 3. if Aj gt Amax then
max ? j - 4. return max
1
n
14Was ist eine Datenstruktur?
- Informale Definition
- Eine Datenstruktur ist eine Anordnung von Daten,
die die Ausführung von Operationen (z.B. Suchen,
Einfügen, Löschen) unterstützt. - Einfache Beispiele
- Feld
- sortiertes Feld
- Liste
15Lernziele
- Bewertung von Algorithmen und Datenstrukturen-
Laufzeitanalyse- Speicherbedarf-
Korrektheitsbeweise - Kenntnis grundlegender Algorithmen und
Datenstrukturen- Sortieren- Wörterbücher-
Graphalgorithmen - Kenntnis grundlegender Entwurfsmethoden- Teile
und Herrsche- gierige Algorithmen- dynamische
Programmierung
16Motivation
- Beispiele für algorithmische Probleme
- Internetsuchmaschinen
- Berechnung von Bahnverbindungen
- Optimierung von Unternehmensabläufen
- Datenkompression
- Computer Spiele
- Datenanalyse
- Alle diese Bereiche sind (immer noch) Stoff
aktueller Forschung im Bereich Datenstrukturen
und Algorithmen
17Motivation
- Problembeschreibung
- Ein m x n- Gitter heißt c-färbbar, wenn man seine
Knoten mit c Farben so färben kann, dass kein am
Gitter orientiertes achsenparalleles Rechteck
alle Eckknoten in derselben Farbe hat - Aufgabe Finde eine 4-Färbung für ein 17x17
Gitter (289 Problem) - Beispiel(4x4 Gitter)
- http//blog.computationalcomplexity.org/2009/11/17
x17-challenge-worth-28900-this-is-not.html
18Motivation
- Problembeschreibung
- Ein m x n- Gitter heißt c-färbbar, wenn man seine
Knoten mit c Farben so färben kann, dass kein am
Gitter orientiertes achsenparalleles Rechteck
alle Eckknoten in derselben Farbe hat - Aufgabe Finde eine 4-Färbung für ein 17x17
Gitter (289 Problem) - Beispiel(4x4 Gitter)
- Die vier unterlegten Knotendürfen z.B. nicht
alle dieselbe Farbe haben - http//blog.computationalcomplexity.org/2009/11/17
x17-challenge-worth-28900-this-is-not.html
19Motivation
- Problembeschreibung
- Ein m x n- Gitter heißt c-färbbar, wenn man seine
Knoten mit c Farben so färben kann, dass kein am
Gitter orientiertes achsenparalleles Rechteck
alle Eckknoten in derselben Farbe hat - Aufgabe Finde eine 4-Färbung für ein 17x17
Gitter (289 Problem) - Beispiel(4x4 Gitter)
- http//blog.computationalcomplexity.org/2009/11/17
x17-challenge-worth-28900-this-is-not.html
4x4 Gitter ist 4-färbbar! Geht es besser?
20Motivation
- Problembeschreibung
- Ein m x n- Gitter heißt c-färbbar, wenn man seine
Knoten mit c Farben so färben kann, dass kein am
Gitter orientiertes achsenparalleles Rechteck
alle Eckknoten in derselben Farbe hat - Aufgabe Finde eine 4-Färbung für ein 17x17
Gitter (289 Problem) - Beispiel(4x4 Gitter)
- http//blog.computationalcomplexity.org/2009/11/17
x17-challenge-worth-28900-this-is-not.html
Ja! 4x4 Gitter ist 2-färbbar!
21Motivation
- 17x17 Problem
- Es ist z.Z. nicht möglich, das 17x17 Problem mit
einem Rechner zu lösen - Warum ist dieses Problem so schwer zu lösen?
- Es gibt sehr viele Färbungen!
- Fragen/Aufgaben
- Können wir die Laufzeit eines Algorithmus
vorhersagen? - Können wir bessere Algorithmen finden?
22Algorithmenentwurf
- Anforderungen
- Korrektheit
- Effizienz (Laufzeit, Speicherplatz)
- Entwurf umfasst
- Beschreibung des Algorithmus/der Datenstruktur
- Korrektheitsbeweis
- Analyse von Laufzeit und Speicherplatz
23Algorithmenentwurf
- Warum mathematische Korrektheitsbeweise?
- Fehler können fatale Auswirkungen haben
(Steuerungssoftware in Flugzeugen, Autos, AKWs) - Fehler können selten auftreten (Austesten
funktioniert nicht) - Der teuerste algorithmische Fehler?
- Pentium bug (gt 400 Mio.)
- Enormer Image Schaden
- Trat relativ selten auf
24Algorithmenentwurf
- Warum Laufzeit/Speicherplatz optimieren?
- Riesige Datenmengen durch Vernetzung (Internet)
- Datenmengen wachsen schneller als Rechenleistung
und Speicher - Physikalische Grenzen
- Schlechte Algorithmen versagen häufig bereits bei
kleinen und mittleren Eingabegrößen
251. Teil der Vorlesung Grundlagen der
Algorithmenanalyse
- Inhalt
- Wie beschreibt man einen Algorithmus?
- Wie beweist man die Korrektheit eines
Algorithmus? - Rechenmodell
- Laufzeitanalyse
26Pseudocode
- Beschreibungssprache ähnlich wie C, Java, Pascal,
etc - Hauptunterschied Wir benutzen immer die klarste
und präziseste Beschreibung - Manchmal kann auch ein vollständiger Satz die
beste Beschreibung sein - Wir ignorieren Software Engineering Aspekte wie-
Modularität- Fehlerbehandlung
27Sortieren
- Problem Sortieren
- Eingabe Folge von n Zahlen (a ,,a )
- Ausgabe Permutation (a ,,a ) von (a ,, a
), so dass a ? a ? ? a - Beispiel
- Eingabe 15, 7, 3, 18, 8, 4
- Ausgabe 3, 4, 7, 8, 15, 18
1
n
1
n
1
n
n
2
1
28Insertion Sort
- InsertionSort(Array A)
- for j ? 2 to lengthA do
- key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
Beschreibung des Algorithmus in Pseudocode
(kein C, Java, etc.)
29Insertion Sort
- InsertionSort(Array A)
- for j ? 2 to lengthA do
- key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
- Pseudocode
- Schleifen (for, while, repeat)
Beschreibung des Algorithmus in Pseudocode
(kein C, Java, etc.)
30Insertion Sort
- InsertionSort(Array A)
- for j ? 2 to lengthA do
- key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
- Pseudocode
- Schleifen (for, while, repeat)
Beschreibung des Algorithmus in Pseudocode
(kein C, Java, etc.)
31Insertion Sort
- InsertionSort(Array A)
- for j ? 2 to lengthA do
- key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
- Pseudocode
- Zuweisungen durch ?
Beschreibung des Algorithmus in Pseudocode
(kein C, Java, etc.)
32Insertion Sort
- InsertionSort(Array A)
- for j ? 2 to lengthA do
- key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
- Pseudocode
- Variablen (z.B. i, j, key) sind lokal definiert
Beschreibung des Algorithmus in Pseudocode
(kein C, Java, etc.)
33Insertion Sort
- InsertionSort(Array A)
- for j ? 2 to lengthA do
- key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
- Pseudocode
- Keine Typdeklaration, wenn Typ klar aus dem
Kontext
Beschreibung des Algorithmus in Pseudocode
(kein C, Java, etc.)
34Insertion Sort
- InsertionSort(Array A)
- for j ? 2 to lengthA do
- key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
- Pseudocode
- Zugriff auf Feldelemente mit .
Beschreibung des Algorithmus in Pseudocode
(kein C, Java, etc.)
35Insertion Sort
- InsertionSort(Array A)
- for j ? 2 to lengthA do
- key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
- Pseudocode
- Verbunddaten sind typischerweise als Objekte
organisiert - Ein Objekt besteht aus Attributen oder
Ausprägungen - Beispiel Feld wird als Objekt mit Attribut Länge
betrachtet
Beschreibung des Algorithmus in Pseudocode
(kein C, Java, etc.)
36Insertion Sort
- InsertionSort(Array A)
- for j ? 2 to lengthA do
- key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
- Pseudocode
- Beispiel Objekt ist Graph G mit Knotenmenge V
- Auf die Ausprägung V von Graph G wird mit VG
zugegriffen
Beschreibung des Algorithmus in Pseudocode
(kein C, Java, etc.)
37Insertion Sort
- InsertionSort(Array A)
- for j ? 2 to lengthA do
- key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
- Pseudocode
- Objekte werden als Zeiger referenziert, d.h. für
alle Ausprägungen f eines Objektes x bewirkt y ?
x das gilt fy fx.
Beschreibung des Algorithmus in Pseudocode
(kein C, Java, etc.)
38Insertion Sort
- InsertionSort(Array A)
- for j ? 2 to lengthA do
- key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
- Pseudocode
- Blockstruktur durch Einrücken
Beschreibung des Algorithmus in Pseudocode
(kein C, Java, etc.)
39Insertion Sort
- InsertionSort(Array A)
- for j ? 2 to lengthA do
- key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
- Pseudocode
- Bedingte Verzweigungen (if then else)
Beschreibung des Algorithmus in Pseudocode
(kein C, Java, etc.)
40Insertion Sort
- InsertionSort(Array A)
- for j ? 2 to lengthA do
- key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
- Pseudocode
- Prozeduren call-by-value jede aufgerufene
Prozedur erhält neue Kopie der übergebenen
Variable - Die lokalen Änderungen sind nicht global sichtbar
- Bei Objekten wird nur der Zeiger kopiert (lokale
Änderungen am Objekt global sichtbar)
Beschreibung des Algorithmus in Pseudocode
(kein C, Java, etc.)
41Insertion Sort
- InsertionSort(Array A)
- for j ? 2 to lengthA do
- key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
- Pseudocode
- Rückgabe von Parametern durch return
Beschreibung des Algorithmus in Pseudocode
(kein C, Java, etc.)
42Insertion Sort
- InsertionSort(Array A)
- for j ? 2 to lengthA do
- key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
- Pseudocode
- Kommentare durch ?
Beschreibung des Algorithmus in Pseudocode
(kein C, Java, etc.)
43Insertion Sort
- InsertionSort(Array A)
- for j ? 2 to lengthA do
- key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
- Beispiel
8 15 3 14 7 6 18 19
44Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
8 15 3 14 7 6 18 19
j
1
n
45Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
key
8 15 3 14 7 6 18 19
j
1
n
46Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
key
8 15 3 14 7 6 18 19
j
i
n
47Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
key
8 15 3 14 7 6 18 19
j
i
n
48Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
key
8 15 3 14 7 6 18 19
j
i
n
49Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
8 15 3 14 7 6 18 19
1
j
n
50Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
key
8 15 3 14 7 6 18 19
1
j
n
51Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
key3
8 15 3 14 7 6 18 19
1
j
n
i
52Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
key3
8 15 3 14 7 6 18 19
1
j
n
i
53Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
key3
8 15 15 14 7 6 18 19
1
j
n
i
54Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
key3
8 15 15 14 7 6 18 19
i
j
n
55Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
key3
8 15 15 14 7 6 18 19
i
j
n
56Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
key3
8 8 15 14 7 6 18 19
i
j
n
57Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
key3
8 8 15 14 7 6 18 19
1
j
i
n
58Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
key3
8 8 15 14 7 6 18 19
1
j
i
n
59Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
key3
3 8 15 14 7 6 18 19
1
j
i
n
60Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
Sortiert
3 8 15 14 7 6 18 19
j
1
n
61Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
Sortiert
key
3 8 15 14 7 6 18 19
j
1
n
62Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
- while igt0 and Aigtkey do
- Ai1 ? Ai
- i ? i-1
- Ai1 ? key
Sortiert
key14
3 8 15 14 7 6 18 19
j
1
n
63Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
Sortiert
key14
3 8 15 14 7 6 18 19
j
1
n
j-1
64Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
Sortiert
key14
3 8 15 14 7 6 18 19
j
1
n
j-1
65Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
key14
3 8 15 15 7 6 18 19
j
1
n
j-1
i
66Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
key14
3 8 15 15 7 6 18 19
j
1
n
i1
i
67Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
? Speichere key in Lücke
key14
3 8 14 15 7 6 18 19
j
1
n
i1
i
68Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
? Speichere key in Lücke
Sortiert
3 8 14 15 7 6 18 19
j
1
n
69Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
? Speichere key in Lücke
Sortiert
key7
3 8 14 15 7 6 18 19
j
1
n
70Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
? Speichere key in Lücke
Sortiert
key7
3 8 14 15 7 6 18 19
j
1
n
71Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
? Speichere key in Lücke
key7
3 8 8 14 15 6 18 19
j
1
n
72Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
? Speichere key in Lücke
key7
3 8 8 14 15 6 18 19
j
1
n
73Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
? Speichere key in Lücke
key7
3 7 8 14 15 6 18 19
j
1
n
74Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
? Speichere key in Lücke
Sortiert
3 7 8 14 15 6 18 19
1
j
n
75Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
? Speichere key in Lücke
Sortiert
key6
3 7 8 14 15 6 18 19
1
j
n
76Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
? Speichere key in Lücke
Sortiert
key6
3 7 8 14 15 6 18 19
1
j
n
77Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
? Speichere key in Lücke
key6
3 7 7 8 14 15 18 19
1
j
n
78Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
? Speichere key in Lücke
key6
3 7 7 8 14 15 18 19
1
j
n
79Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
? Speichere key in Lücke
key6
3 6 7 8 14 15 18 19
1
j
n
80Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
? Speichere key in Lücke
Sortiert
3 6 7 8 14 15 18 19
1
j
n
81Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
? Speichere key in Lücke
3 6 7 8 14 15 18 19
1
j
n
82Insertion Sort
- InsertionSort(Array A)
? Eingabegröße n - for j ? 2 to lengthA do ?
lengthA n - key ? Aj
- i ? j-1
? verschiebe alle Elemente aus - while igt0 and Aigtkey do ?
A1j-1, die größer als key - Ai1 ? Ai
? sind eine Stelle nach rechts - i ? i-1
- Ai1 ? key
? Speichere key in Lücke
Sortiert
3 6 7 8 14 15 18 19
1
n
83InsertionSort
- Wir haben beobachtet, dass Algorithmus
InsertionSort korrekt sortiert - Wie können wir zeigen, dass dies für jede Eingabe
stimmt?-gt Korrektheitsbeweise
84Zusammenfassung
- Es gibt schwierige algorithmische Probleme, die
bzgl. Laufzeit und Speicherbedarf optimierte
Algorithmen benötigen - Korrektheitsanalyse von Algorithmen ist notwendig
- Wir beschreiben Algorithmen in Pseudocode