Datenstrukturen, Algorithmen und Programmierung 2 (DAP2) - PowerPoint PPT Presentation

1 / 84
About This Presentation
Title:

Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

Description:

Datenstrukturen, Algorithmen und Programmierung 2 (DAP2) – PowerPoint PPT presentation

Number of Views:57
Avg rating:3.0/5.0
Slides: 85
Provided by: mste157
Category:

less

Transcript and Presenter's Notes

Title: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)


1
Datenstrukturen, Algorithmen und Programmierung 2
(DAP2)
2
Organisatorisches
  • 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

3
Organisatorisches
  • Ü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

4
Organisatorisches
  • Ü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

5
Organisatorisches
  • Ü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)

6
Organisatorisches
  • Ü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

7
Organisatorisches
  • Tests
  • 1. Test 18. Mai
  • 2. Test mal schauen
  • Einer der beiden Test muss mit 50 der Punkte
    bestanden werden(Studienleistung Übung Teil 2)

8
Organisatorisches
  • 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

9
Organisatorisches
  • 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

10
Einige Hinweise/Regeln
  • Klausur
  • Eine Korrelation mit den Übungsaufgaben ist zu
    erwarten
  • Laptops
  • Sind in der Vorlesung nicht zugelassen

11
Literatur
  • 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/

12
Was 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

13
Was 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
14
Was 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

15
Lernziele
  • 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

16
Motivation
  • 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

17
Motivation
  • 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

18
Motivation
  • 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

19
Motivation
  • 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?
20
Motivation
  • 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!
21
Motivation
  • 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?

22
Algorithmenentwurf
  • Anforderungen
  • Korrektheit
  • Effizienz (Laufzeit, Speicherplatz)
  • Entwurf umfasst
  • Beschreibung des Algorithmus/der Datenstruktur
  • Korrektheitsbeweis
  • Analyse von Laufzeit und Speicherplatz

23
Algorithmenentwurf
  • 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

24
Algorithmenentwurf
  • 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

25
1. Teil der Vorlesung Grundlagen der
Algorithmenanalyse
  • Inhalt
  • Wie beschreibt man einen Algorithmus?
  • Wie beweist man die Korrektheit eines
    Algorithmus?
  • Rechenmodell
  • Laufzeitanalyse

26
Pseudocode
  • 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

27
Sortieren
  • 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
28
Insertion 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.)
29
Insertion 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.)
30
Insertion 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.)
31
Insertion 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.)
32
Insertion 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.)
33
Insertion 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.)
34
Insertion 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.)
35
Insertion 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.)
36
Insertion 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.)
37
Insertion 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.)
38
Insertion 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.)
39
Insertion 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.)
40
Insertion 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.)
41
Insertion 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.)
42
Insertion 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.)
43
Insertion 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
44
Insertion 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
45
Insertion 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
46
Insertion 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
47
Insertion 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
48
Insertion 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
49
Insertion 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
50
Insertion 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
51
Insertion 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
52
Insertion 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
53
Insertion 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
54
Insertion 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
55
Insertion 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
56
Insertion 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
57
Insertion 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
58
Insertion 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
59
Insertion 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
60
Insertion 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
61
Insertion 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
62
Insertion 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
63
Insertion 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
64
Insertion 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
65
Insertion 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
66
Insertion 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
67
Insertion 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
68
Insertion 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
69
Insertion 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
70
Insertion 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
71
Insertion 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
72
Insertion 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
73
Insertion 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
74
Insertion 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
75
Insertion 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
76
Insertion 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
77
Insertion 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
78
Insertion 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
79
Insertion 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
80
Insertion 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
81
Insertion 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
82
Insertion 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
83
InsertionSort
  • Wir haben beobachtet, dass Algorithmus
    InsertionSort korrekt sortiert
  • Wie können wir zeigen, dass dies für jede Eingabe
    stimmt?-gt Korrektheitsbeweise

84
Zusammenfassung
  • Es gibt schwierige algorithmische Probleme, die
    bzgl. Laufzeit und Speicherbedarf optimierte
    Algorithmen benötigen
  • Korrektheitsanalyse von Algorithmen ist notwendig
  • Wir beschreiben Algorithmen in Pseudocode
Write a Comment
User Comments (0)
About PowerShow.com