3. Inkrementelle Algorithmen Definition 3.1: Bei einem inkrementellen Algorithmus wird sukzessive die Teillösung für die ersten i Objekte aus der bereits bekannten Teillösung für die ersten i-1 Objekte berechnet, i=1,…,n. Beispiel Min-Search: Objekte sind Einträge des Eingabearrays. Teilproblem bestehend aus ersten i Objekten bedeutet Minimum im Teilarray A[1..i] bestimmen. SS 2006 Datenstrukturen und Algorithmen 3. Inkrementelle Algorithmen 1 Sortieren und inkrementelle Algorithmen Eingabe bei Sortieren : Folge von n Zahlen (a1, a 2 ,K, an ). Ausgabe bei Sortieren : Umordnung (b1, b 2 ,K, bn ) der Eingabefol ge, so dass b1 ≤ b 2 ≤ L ≤ bn . Sortieralgorithmus : Verfahren, das zu jeder Folge (a1, a 2 ,K, an ) sortierte Umordnung (b1, b 2 ,K, bn ) berechnet. Eingabe : (31,41,59, 26,51,48) Ausgabe : (26,31,41, 48,51,59) SS 2006 Datenstrukturen und Algorithmen 3. Inkrementelle Algorithmen 2 Insertion-Sort Idee: Sukzessive wird eine Sortierung der Teilarrays A[1..i], 1≤i ≤length(A) berechnet. Insertion - Sort( A ) 1 for j ← 2 to length( A ) 2 do key ← A[ j ] 3 > Füge A[ j ] in die sortierte Folge A[1..j − 1] ein. 4 i ← j −1 5 while i > 0 and A[i ] > key 6 do A[i + 1] ← A[i ] 7 i ← i −1 8 A[i + 1] ← key SS 2006 Datenstrukturen und Algorithmen 3. Inkrementelle Algorithmen 3 Invariante bei Insertion-Sort Invariante: Vor Durchlauf der for-Schleife (Zeilen 1-8) für Index j gilt, dass A[1..j-1] die j-1 Eingabezahlen in sortierter Reihenfolge enthält. Initialisierung: j=2 erste Index und A[1] ist sortiert, da es nur eine Zahl enthält. Erhaltung: while-Schleife (Zeilen 5-7) zusammen mit Zeile 8 sortiert A[j] korrekt ein. Terminierung: Vor Durchlauf mit length(A)+1 ist A[1. . length(A)] sortiert. SS 2006 Datenstrukturen und Algorithmen 3. Inkrementelle Algorithmen 4 Insertion-Sort – Analyse (1) Insertion - Sort( A ) cost times 1 for j ← 2 to length(A) 2 do key ← A[ j ] 3 > Einfügen von A[ j ] . 4 i ← j −1 c1 c2 n n-1 c4 n-1 5 6 7 8 while i > 0 and A[i ] > key do A[i + 1] ← A[i ] i ← i −1 A[i + 1] ← key c5 c6 c7 c8 ∑ ∑ ∑ n t j =2 j n j =2 n (t j − 1) j =2 (t j − 1) n-1 Hierbei ist t j die Anzahl der Durchläufe der Abfrage in Zeile 5. SS 2006 Datenstrukturen und Algorithmen 3. Inkrementelle Algorithmen 5 Insertion-Sort – Analyse (2) Satz 3.2. Insertion-Sort besitzt Laufzeit Θ(n ). 2 Zum Beweis wird gezeigt: 1. Es gibt ein c 2 , so dass die Laufzeit von Insertion - Sort bei allen Eingaben der Größe n immer höchstens c 2 n 2 ist. 2. Es gibt ein c1, so dass für alle n eine Eingabe In der Größe n existiert bei der Insertion - Sort mindestens Laufzeit c1n 2 besitzt. SS 2006 Datenstrukturen und Algorithmen 3. Inkrementelle Algorithmen 6