Datenstrukturen und Algorithmen. Christian Sohler FG Algorithmen & Komplexität

Ähnliche Dokumente
3. Inkrementelle Algorithmen

Kurzvorstellung und Forschungsinteressen. Datenstrukturen, Algorithmen und Programmierung 2. Motivation. Überblick. Kapitel 1: Einführung.

Asymptotische Notationen

Algorithmen und Datenstrukturen"

Kapitel 10. Rekursion

3 T (d 1, l 2. ) + (6 + 2) falls d > 0 7 sonst. n 2. 4T ( n 2 ) + log 2 (n), falls n > 1 1, sonst

Dynamisches Programmieren Stand

Vorlesung Informatik 2 Algorithmen und Datenstrukturen. (01 Einleitung) Prof. Dr. Susanne Albers

1 Randomisierte Bestimmung des Medians

Übersicht. Datenstrukturen und Algorithmen. Rekursionsgleichungen. Übersicht. Vorlesung 6: Mastertheorem (K4) Joost-Pieter Katoen

Kapitel 11. Rekursion

Kapitel 11. Rekursion

Tutoraufgabe 1 (Rekursionsgleichungen):

Frank Heitmann 2/56. Satz. 3 f (n) Θ(g(n)) lim n. 5 f (n) ω(g(n)) lim n

HEUTE. Beispiele. O-Notation neue Einführung Ideen und Eigenschaften Aufgaben 47 und 52

1. Übungsblatt zu Algorithmen II im WS 2016/2017

2 Asymptotische Schranken

Algorithmen und Datenstrukturen

Info2 Übungsstunde 5. Agenda. Lösungen U4. Java... more insights. Tipps zur Übung 5

Mathematische Rekursion. Rekursion. Rekursion in C++ Mathematische Rekursion. Definition. 1, falls n 1. n! = n (n-1)!, falls n > 1

Teil VII : Zeitkomplexität von Algorithmen

Kombinatorik und Polynommultiplikation

ALP I Induktion und Rekursion

Dynamische Programmierung Matrixkettenprodukt

Quantensuchalgorithmen

Übungen zur Infinitesimalrechnung 2, H.-C. Im Hof 19. März Blatt 4. Abgabe: 26. März 2010, Nachmittag. e x2 dx + e x2 dx = 2 e x2 dx

Musterlösung. Testklausur Vorkurs Informatik, Testklausur Vorkurs Informatik Musterlösung. Seite 1 von 10

Lösungen zu Kapitel 4

AUFGABENSTELLUNG (ZUSAMMENFASSUNG) 2 SPEZIFIKATION 2. Datenfluß und Programmablauf 2. Vorbedingung 3. Nachbedingung 3. Schleifeninvariante 3

3 Elemente der Komplexitätstheorie Definitionen und ein Beispiel Nichtdeterminismus und das P-NP-Problem... 57

Analysis I für M, LaG/M, Ph 4.Übungsblatt

4.1 Dezimalzahlen und Intervallschachtelungen. a) Reelle Zahlen werden meist als Dezimalzahlen dargestellt, etwa

Vorkurs Mathematik für Informatiker Potenzen und Polynome --

Wahrscheinlichkeitstheorie und Statistik vom

Die vollständige Induktion - Lösungen 1. Aufgabe: Sind die folgenden Aussageformen in N allgemeingültig?

Prof. Dr. Wolfgang Konen Mathematik 1, WS Wozu InformatikerInnen Folgen brauchen

Analysis I Lösungsvorschläge zum 3. Übungsblatt Abgabe: Bis Donnerstag, den , um 11:30 Uhr

Empirische Verteilungsfunktion

Lösungsskizzen Mathematik für Informatiker 5. Aufl. Kapitel 3 Peter Hartmann

KAPITEL 11. Ungleichungen. g(x) g(x 0 ) + K 0 (x x 0 ).

Lösungsskizzen Mathematik für Informatiker 6. Aufl. Kapitel 4 Peter Hartmann

TECHNISCHE UNIVERSITÄT MÜNCHEN

Aufgabe G 1.1. [Vollständige Induktion, Teleskopsumme] n k 3 = n N : k(k + 1) = 1 1

Wörterbuchmethoden und Lempel-Ziv-Codierung

Übung 1 Algorithmen II

2 Vollständige Induktion

Skriptum zur ANALYSIS 1

Reelle Folgen. Definition. Eine reelle Folge ist eine Abbildung f : N R. liefert ( 7 9, 37

8. Übungsblatt Aufgaben mit Lösungen

Algorithmen und Datenstrukturen 1

ÜBUNGSBLATT 4 LÖSUNGEN MAT121/MAT131 ANALYSIS I HERBSTSEMESTER 2010 PROF. DR. CAMILLO DE LELLIS

so spricht man von einer kommutativen Gruppe oder auch abelschen Gruppe.

Prof. Dr. Wolfgang Konen Mathematik 1, WS Wozu InformatikerInnen Folgen brauchen

18 2 Zeichen, Zahlen & Induktion *

II. Grundlagen der Programmierung. Variable: Literale (Konstanten) Operatoren & Ausdrücke. Variablendeklaration:

Kapitel 3: Bedingte Wahrscheinlichkeiten und Unabhängigkeit

Determinante und Resultante Azadeh Pasandi

Höhere Mathematik I (Analysis) für die Fachrichtung Informatik

Kreisabbildungen. S 1 f S 1. Beispiele: (1) f = id, F = id,

Zusammenfassung: Folgen und Konvergenz

Page-Rank: Markov-Ketten als Grundlage für Suchmaschinen im Internet

Informatik II Dynamische Programmierung

Übung zur Vorlesung Einführung in die Algebra Prof. Dr. J. H. Bruinier Stephan Ehlen

Der Satz von Stone-Weierstraß. 1 Approximationssatz von Weierstraß

Übersicht. Algorithmen und Datenstrukturen. Übersicht. Organisation. gic. Organisation. Einführung. Analyse von Algorithmen.

Aufgaben und Lösungen Ausarbeitung der Übungsstunde zur Vorlesung Analysis I

2 Konvergenz von Folgen

Lösungen zum Ferienkurs Analysis 1, Vorlesung 2 Wintersemester 2014/2015

4. Die Menge der Primzahlen. Bertrands Postulat

n=0 f(x) = log(1 + x) = n=1

Satz Ein Boolescher Term t ist eine Tautologie genau dann, wenn t unerfüllbar ist.

Lektion II Grundlagen der Kryptologie

Grundlagen der Mathematik (LPSI/LS-M1)

i=0 a it i das erzeugende Polynome von (a 0,..., a j ).

Sortieren DNA-Array oder DNA-Chip

4 Konvergenz von Folgen

Kapitel 2 Differentialrechnung in einer Variablen. 2.1 Folgen und Grenzwerte

Seminar: Randomisierte Algorithmen Routenplanung in Netzwerken

Recur : Falls Problem elementar : löse dieses mit spezieller Methode Falls Problem nicht elementar : wende Divide rekursiv an

CampusSourceEngine HISLSF

Algorithmen und Datenstrukturen 1 VU Übungstest SS April 2012

Eigenschaften von Texten

9. Primzahltests. Problemstellung: Definition: Satz: Gegeben sei n N, n 0, gilt n P?

Nennenswertes zur Stetigkeit

Definition (Supremum und Infimum). s R heißt Supremum der Menge M R, falls s die kleinste obere Schranke von M ist, d.h.

1 Lösungen zu Analysis 1/ 12.Übung

Merge-Sort und Binäres Suchen

Alle bislang betrachteten Sortieralgorithmen hatten (worst-case) Laufzeit Ω(nlog(n)).

5. Übungsblatt Aufgaben mit Lösungen

Übungsaufgaben zu Analysis 1 Lösungen von Blatt XII vom sin(nx) n sin(x). sin(ax) a sin(x) z = re iϕ = r(cos(ϕ) + i sin(ϕ)) z n = w

Kapitel 6: Quadratisches Wachstum

Effiziente Algorithmen I: Approximationsalgorithmen Motivation und Begriffe

5.7. Aufgaben zu Folgen

1.3 Funktionen. Seien M und N Mengen. f : M N x M : 1 y N : y = f(x) nennt man Funktion oder Abbildung. Beachte: Zuordnung ist eindeutig.

Computer-Graphik II Verallgemeinerte Baryzentrische Koordinaten

mit (a 1 ) (0,0,,0). Dann ist die Menge,,a n,a 2 eine endliche Menge und besitzt ein grösstes Element ggt(a 1

Technische Universität München Zentrum Mathematik. Übungsblatt 14

Folgen und Reihen. 23. Mai 2002

Kapitel 5. Ausrichten

6. Übung - Differenzengleichungen

Transkript:

Datestrukture ud Algorithme Christia Sohler FG Algorithme & Komplexität

Orgaisatorisches Vorlesug: Mo 11:15-12:45 Fr 11:15-12:45 Zetralübug: Mo 13:00 13:45 Begi: Heute (2. Teil der Vorlesug) Übuge: Begi: Heute (Präsezübuge)

Orgaisatorisches Heimübuge: Alle 2 Woche ei Übugsblatt 1. Blatt Diestag ach Oster Keie Bouspukte Klausur: Eie Korrelatio mit de Übugsaufgabe ist zu erwarte Es gab i der Vergageheit eie direkte Zusammehag zwische Übugsteilahme/abgabe ud gutem Abscheide bei Klausure

Orgaisatorisches Sprechzeite: Mi 13:00 14:00 (Raum F1.209; Fürsteallee) Im Aschluß a die Vorlesug bzw. Zetralübug Orgaisatorische Frage a Christiae Lammerse; basilisk@upb.de Marcel Ackerma; mra@upb.de Weitere Iformatioe Webseite der Vorlesug FG Algorithme ud Komplexität Lehre

Was ist ei Algorithmus? Defiitio 1: Ei Algorithmus ist eie eideutige Hadlugsvorschrift zur Lösug vo Istaze eies Problems i edlich viele Schritte. Bemerkug: Es gibt viele Beschreibuge des selbe Algorithmus Die Defiitio wird i EBfS formalisiert

Was ist ei Algorithmus? Beispiel: Problem: Maximumsuche Istaz: Mege A={a,,a } vo Zahle 1 Ausgabe: Idex i der größte Zahl i A Algorithmus-Max-Search(Array A) 1. max 1 2. for j 2 to legth(a) do 3. if A[j] > A[max] the max j 4. retur max

Was ist eie Datestruktur? Defiitio 2: Eie Datestruktur ist eie Aordug vo Date, die die Ausführug vo Operatioe (z.b. Suche, Eifüge, Lösche) uterstützt. Eifache Beispiele: Feld sortiertes Feld Liste

Wozu beötige wir Datestrukture ud Algorithme? Beispiele: Iteretsuchmaschie Berechug vo Bahverbiduge Optimierug vo Uterehmesabläufe Datekompressio Computer Spiele Dateaalyse Alle diese Bereiche sid (immer och) Stoff aktueller Forschug im Bereich Datestrukture ud Algorithme!

Softwareetwicklug (algorithmische Sichtweise) Problem Modellierug Etwicklug vo Algorithmus/Datestruktur Implemetierug

Algorithmeetwurf Aforderuge: Korrektheit Effiziez (Laufzeit, Speicherplatz) Etwurf: 1. Beschreibug des Algorithmus/der Datestruktur 2. Korrektheitsbeweis 3. Aalyse vo Laufzeit ud Speicherplatz

Algorithmeetwurf Warum mathematische Korrektheitsbeweise? Fehler köe fatale Auswirkuge habe (Steuerugssoftware i Flugzeuge, Autos, AKWs) Fehler köe selte auftrete ( Austeste fuktioiert icht) Der teuerste algorithmische Fehler? Petium bug (> $400 Mio.) Eormer Image Schade Trat relativ selte auf

Algorithmeetwurf Warum Laufzeit/Speicherplatz optimiere? Riesige Datemege durch Veretzug (Iteret) Datemege wachse scheller als Recheleistug ud Speicher Physikalische Greze Schlechte Algorithme versage häufig bereits bei kleie ud mittlere Eigabegröße

Ziele der Vorlesug Methodisches Wisse: Selbstädige Etwicklug vo Datestrukture ud Algorithme Aalyse ud Bewertug mit Hilfe mathematischer Methode Faktewisse: Etwurfsmethode Grudlegede Datestrukture ud Algorithme Korrektheitsbeweise ud Effiziezaalyse

Arbeitsmaterial Bücher: Corme, Leisserso, Rivest: Itroductio to Algorithms, MIT Press Kleiberg, Tardos: Algorithm Desig, Addiso Wesley WWW: Kurs Itroductio to Algorithms am MIT. Olie Material (Folie, Video ud Audio Files!) Lik auf der Webseite der Vorlesug

Sortiere Problem: Sortiere Eigabe: Folge vo Zahle (a,,a ) Ausgabe: Permutatio (a,,a ), so dass a a a Beispiel: Eigabe: 15, 7, 3, 18, 8, 4 Ausgabe: 3, 4, 7, 8, 15, 18 1 1 1 2

IsertioSort(Array A) 1. for j 2 to legth(a) do 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Beschreibug des Algorithmus i Pseudocode (kei C, Java, etc.)

IsertioSort(Array A) 1. for j 2 to legth(a) do 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Beschreibug des Algorithmus i Pseudocode (kei C, Java, etc.) Pseudocode: Schleife (for, while, repeat)

IsertioSort(Array A) 1. for j 2 to legth(a) do 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Beschreibug des Algorithmus i Pseudocode (kei C, Java, etc.) Pseudocode: Schleife (for, while, repeat)

IsertioSort(Array A) 1. for j 2 to legth(a) do 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Beschreibug des Algorithmus i Pseudocode (kei C, Java, etc.) Pseudocode: Zuweisuge durch

IsertioSort(Array A) 1. for j 2 to legth(a) do 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Beschreibug des Algorithmus i Pseudocode (kei C, Java, etc.) Pseudocode: Variable (z.b. i,j, key) lokal defiiert

IsertioSort(Array A) 1. for j 2 to legth(a) do 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Beschreibug des Algorithmus i Pseudocode (kei C, Java, etc.) Pseudocode: Keie Typdeklaratio, we klar aus Kotext

IsertioSort(Array A) 1. for j 2 to legth(a) do 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Beschreibug des Algorithmus i Pseudocode (kei C, Java, etc.) Pseudocode: Zugriff auf Feldelemete mit [.]

IsertioSort(Array A) 1. for j 2 to legth(a) do 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Beschreibug des Algorithmus i Pseudocode (kei C, Java, etc.) Pseudocode: Zusammegesetzte Date als Objekte Grudlegede Attribute vorhade (z.b. legth[a])

IsertioSort(Array A) 1. for j 2 to legth(a) do 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Beschreibug des Algorithmus i Pseudocode (kei C, Java, etc.) Pseudocode: Bei Objektzuweisuge wird ur die Referez auf das Objekt kopiert

IsertioSort(Array A) 1. for j 2 to legth(a) do 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Beschreibug des Algorithmus i Pseudocode (kei C, Java, etc.) Pseudocode: Blockstruktur durch Eirücke (keie Klammerug)

IsertioSort(Array A) 1. for j 2 to legth(a) do 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Beschreibug des Algorithmus i Pseudocode (kei C, Java, etc.) Pseudocode: Blockstruktur durch Eirücke (keie Klammerug)

IsertioSort(Array A) 1. for j 2 to legth(a) do 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Beschreibug des Algorithmus i Pseudocode (kei C, Java, etc.) Pseudocode: Bedigte Verzweigug (if-the-else)

IsertioSort(Array A) 1. for j 2 to legth(a) do 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Beschreibug des Algorithmus i Pseudocode (kei C, Java, etc.) Pseudocode: Parameter werde bei Prozeduraufruf kopiert (sid also ur lokal sichtbar)

IsertioSort(Array A) 1. for j 2 to legth(a) do 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Beschreibug des Algorithmus i Pseudocode (kei C, Java, etc.) Pseudocode: Rückgabe vo Parameter durch retur

IsertioSort(Array A) 1. for j 2 to legth(a) do 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Beschreibug des Algorithmus i Pseudocode (kei C, Java, etc.) Pseudocode: Kommetare durch

IsertioSort(Array A) 1. for j 2 to legth(a) do 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Beispiel: 8 15 3 14 7 6 18 19

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Beispiel: 8 15 3 14 7 6 18 19

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key 1 Beispiel: 8 15 3 14 7 6 18 19

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key 1 j Beispiel: 8 15 3 14 7 6 18 19

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key 1 j Beispiel: 8 15 3 14 7 6 18 19 key

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key i j Beispiel: 8 15 3 14 7 6 18 19 key

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key i j Beispiel: 8 15 3 14 7 6 18 19 key

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key i j Beispiel: 8 15 3 14 7 6 18 19 key

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key 1 j Beispiel: 8 15 3 14 7 6 18 19

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key 1 j Beispiel: 8 15 3 14 7 6 18 19 key

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key 1 i j Beispiel: 8 15 3 14 7 6 18 19 key=3

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key 1 i j Beispiel: 8 15 3 14 7 6 18 19 key=3

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key 1 i j Beispiel: 8 15 15 14 7 6 18 19 key=3

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key i Beispiel: 8 15 15 14 7 6 18 19 j key=3

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key i Beispiel: 8 15 15 14 7 6 18 19 j key=3

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key i Beispiel: 8 8 15 14 7 6 18 19 j key=3

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key i 1 j Beispiel: 8 8 15 14 7 6 18 19 key=3

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key i 1 j Beispiel: 8 8 15 14 7 6 18 19 key=3

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key 1 j Beispiel: 3 8 15 14 7 6 18 19 key=3

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key 1 j Beispiel: 3 8 15 14 7 6 18 19 Sortiert

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key 1 j Beispiel: 3 8 15 14 7 6 18 19 Sortiert key

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 4. while i>0 ad A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key 1 j Beispiel: 3 8 15 14 7 6 18 19 Sortiert key=14

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key 1 j-1 j Beispiel: 3 8 15 14 7 6 18 19 Sortiert key=14

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key 1 j-1 j Beispiel: 3 8 15 14 7 6 18 19 Sortiert key=14

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key 1 i j-1 j Beispiel: 3 8 15 15 7 6 18 19 Sortiert key=14

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key 1 i i+1 j Beispiel: 3 8 15 15 7 6 18 19 key=14

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key Speichere key i Lücke 1 i i+1 j Beispiel: 3 8 15 15 7 6 18 19 key=14

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key Speichere key i Lücke 1 i i+1 j Beispiel: 3 8 14 15 7 6 18 19 key=14

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key Speichere key i Lücke 1 j Beispiel: 3 8 14 15 7 6 18 19 Sortiert

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key Speichere key i Lücke 1 j Beispiel: 3 8 14 15 7 6 18 19 Sortiert key=7

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key Speichere key i Lücke 1 j Beispiel: 3 8 14 15 7 6 18 19 Sortiert key=7

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key Speichere key i Lücke 1 j Beispiel: 3 8 8 14 15 6 18 19 key=7

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key Speichere key i Lücke 1 j Beispiel: 3 8 8 14 15 6 18 19 key=7

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key Speichere key i Lücke 1 j Beispiel: 3 7 8 14 15 6 18 19 key=7

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key Speichere key i Lücke 1 j Beispiel: 3 7 8 14 15 6 18 19 Sortiert

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key Speichere key i Lücke 1 j Beispiel: 3 7 8 14 15 6 18 19 Sortiert key=6

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key Speichere key i Lücke 1 j Beispiel: 3 7 8 14 15 6 18 19 key=6

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key Speichere key i Lücke 1 j Beispiel: 3 7 7 8 14 15 18 19 key=6

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key Speichere key i Lücke 1 j Beispiel: 3 7 7 8 14 15 18 19 key=6

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key Speichere key i Lücke 1 j Beispiel: 3 6 7 8 14 15 18 19 key=6

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key Speichere key i Lücke 1 j Beispiel: 3 6 7 8 14 15 18 19 Sortiert

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key Speichere key i Lücke 1 j Beispiel: 3 6 7 8 14 15 18 19

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key Speichere key i Lücke 1 Beispiel: 3 6 7 8 14 15 18 19 Sortiert

IsertioSort(Array A) Eigabegröße 1. for j 2 to legth(a) do (legth(a)=) 3. i j-1 verschiebe alle 4. while i>0 ad A[i]>key do A[1,..,j-1], die größer als 5. A[i+1] A[i] key sid eie Stelle 6. i i-1 ach rechts 7. A[i+1] key Speichere key i Lücke 1 Beispiel: 3 6 7 8 14 15 18 19 Sortiert

Korrektheit Schleife-Ivariate Eigeschaft, die am Afag ud Ede jedes Schleifedurchlaufs erfüllt ist Beispiel: Ivariate der for-schleife vo IsertioSort: Feld A[1,..,j-1] ist aufsteiged sortiert Korrektheitsbeweis: 1 j 3 8 15 14 7 6 18 19 sortiert Iduktio über die Azahl der Schleifedurchläufe

Korrektheit Satz 1 Isertiosort sortiert eie Folge vo Zahle aufsteiged. Beweis: Wir zeige, dass die Schleifeivariate erfüllt ist Da die Schleife mit j=+1 termiiert, folgt aus der Ivariate die Korrektheit des Algorithmus Iduktiosafag (j=2): A[1] ist sortiert Iduktiosaahme(I.A.): Ivariate gilt für j=n

Korrektheit Iduktiosschritt (N N+1): Betrachte Durchlauf mit j=n Isertiosort merkt sich A[N] i Variable key Sei 1 k N-1 der größte Idex mit A[k]>key oder k=n, falls ei solcher icht existiert Der Algorithmus verschiebt A[k,..,N-1] ach A[k+1,..,N] Da wird A[k] auf de Wert key gesetzt Daach gilt: (1) A[1] A[2] A[k-1] ach I.A. (2) A[k-1] A[k] A[k+1] ach Ablauf des Algorithmus (3) A[k+1] A[k+2] A[N] ach I.A. Aus (1)-(3) folgt die Behauptug für N+1

Laufzeit Laufzeit hägt ab vo Größe der Eigabe (Parameter ) Art der Eigabe (Isertiosort ist scheller auf sortierte Eigabe) Aalyse: Parametrisiere Laufzeit als Fuktio der Eigabegröße Fide obere Schrake (Garatie) a die Laufzeit

Laufzeit Worst-Case Aalyse Für jedes defiiere Laufzeit T() = Maximum über alle Eigabe der Größe Garatie für jede Eigabe Stadard Average-Case Aalyse Für jedes defiiere Laufzeit T() = Durchschitt über alle Eigabe der Größe Hägt vo Defiitio des Durchschitts ab (wie sid die Eigabe verteilt)

Laufzeit Laufzeit hägt auch ab vo Hardware (Prozessor, Cache, Pipeliig) Software (Betriebssystem, Programmiersprache, Compiler) Aalyse: Soll uabhägig vo Hard- ud Software gelte

Laufzeit Maschiemodell: Eie Pseudocode-Istruktio braucht eie Zeitschritt Wird eie Istruktio r-mal aufgerufe, werde r Zeitschritte beötigt Formales Modell: Radom Access Machies (RAM Modell) Idee: Igoriere recherabhägige Kostate Betrachte Wachstum vo T() für Asymptotische Aalyse

Laufzeit IsertioSort(Array A) Zeit: 1. for j 2 to legth(a) do -1 3. i j-1-1 4. while i>0 ad A[i]>key do -1 + Σ t 5. A[i+1] A[i] Σ t 6. i i-1 Σ t 7. A[i+1] key -1 5-4 + 3 Σ t t : Azahl Wiederholuge der while-schleife i Rude j j j j j j

Laufzeit Worst-Case Aalyse: t =j-1 für absteiged sortierte Eigabe (schlechtester Fall) Abstraktio vo multiplikative Kostate Θ-Notatio = = + = + = j j j j T 1 2 3 7 5 3 4 5 ) ( 2 14 13 ² 3 2 1) ( 3 7 5 + = + + = j

Θ-Notatio Zur Erierug: Θ(g(x)) = {f(x): es gibt pos. Kostate c,d ud N, so dass 0 c g() f() d g() für alle N} Idee der Θ-Notatio: Lasse Terme iedriger Ordug weg Igoriere multiplikative Kostate Beispiel: 3 3 17 + 150 ² - 3 + 1000 = Θ( )

Laufzeit Satz 2: IsertioSort hat eie Laufzeit vo Θ(²). Beweis: (3²+13-14) /2 = Θ(²) Ist das schell? I Ordug für kleie bis mittlere Eigabe Es gibt viel bessere Methode für große Eigabe

Zusammefassug Algorithmeetwurf Beschreibug Pseudocode Korrektheitsbeweis Techik: Schleifeivariate, Iduktio Laufzeitaalyse Recheruabhägig Worst-Case Aalyse Wachstum für Igoriere vo Kostate; Θ-Notatio