Datenstrukturen und Algorithmen VO INF.02031UF B-Sort: Sortieren mit (2-4)-Bäumen D&A: B-Sort [email protected] 1 Gibt es ein Sortierverfahren das adaptiv und worst-case optimal ist? in-place stabil adaptiv Best-case Avg.-case Worst-case O(n2) O(n2) InsertionSort O(n) MergeSort O(n log n) O(n log n) O(n log n) QuickSort O(n log n) O(n log n) HeapSort O(n log n) O(n log n) O(n log n) D&A: B-Sort [email protected] O(n2) 2 Recap: Insertion-Sort Arbeitet in n-1 (= Anzahl der Zahlen-1) Durchgängen Nach dem i-ten Durchgang sind die Zahlen 1..i+1 sortiert. Im i-ten Durchgang wird die (i+1)-te Zahl von links betrachtet und – solange nach links verschoben bis sie in die Sortierung passt D&A: B-Sort [email protected] 3 Recap: Insertion-Sort Arbeitet in n-1 (= Anzahl der Zahlen-1) Durchgängen Nach dem i-ten Durchgang sind die Zahlen 1..i+1 sortiert. Im i-ten Durchgang wird die (i+1)-te Zahl von links betrachtet und – solange nach links verschoben bis sie in die Sortierung passt Idee: Sortiertes Einfügen in 2-4 Bäumen ist effizient! D&A: B-Sort [email protected] 4 B-Sort (“Baumsortieren”) • B-Sort ist adaptiv und worst-case optimal • Maß für Sortiertheit: #Fehlstände – sei a1, …, an eine (unsortierte) Zahlenfolge – 𝑓𝑖 = # Fehlstände für ai 𝑓𝑖 = |{𝑎𝑗 |𝑗 > 𝑖, 𝑎𝑗 < 𝑎𝑖 }| – Fehlstände der Zahlenfolge: 𝐹 = σ𝑛𝑖=1 𝑓𝑖 – Es gilt: 0 ≤ 𝐹 ≤ D&A: B-Sort 𝑛 𝑛−1 2 = 𝑛 2 [email protected] 5 B-Sort (“Baumsortieren”) • Sortieren durch Einfügen von an, an-1,…, a1 in (anfangs leeren) (2-4)-Baum (verkehrte Reihenfolge!) • Blätter in (2-4)-Baum sind ai‘s • Innere Knoten speichern nur Maximum im Teilbaum. D&A: B-Sort [email protected] 6 B-Sort (“Baumsortieren”) Allgemeine Situation: – 𝑎𝑛 , … , 𝑎𝑖+1 sei bereits eingefügt (sind sortiert im Baum) – 𝑎𝑖+1 wird jetzt eingefügt Folge: 𝑎1 … 𝑎𝑖 𝑎𝑖+1 … 𝑎𝑛 𝑏𝑒𝑟𝑒𝑖𝑡𝑠 𝑒𝑖𝑛𝑔𝑒𝑓ü𝑔𝑡, 𝑑𝑎𝑣𝑜𝑛 𝑓𝑖 𝑍𝑎ℎ𝑙𝑒𝑛<𝑎𝑖 Es folgt: 𝑎𝑖 wird im Baum an der Stelle 𝑓𝑖 + 1 von links eingefügt. D&A: B-Sort [email protected] 7 B-Sort (“Baumsortieren”) D&A: B-Sort [email protected] 8 B-Sort (“Baumsortieren”) w’…Wurzel von T’ Idee: Wenn fi klein, liegt w’ tief. Einfügen bottom up: – Starte bei linkestem Blatt – Laufe bis zu w’, d.i. erster innerer Knoten mit Max>ai. – Füge ai in Teilbaum ein. →Anhängen von ai in θ(log fi) Zeit. D&A: B-Sort [email protected] 9 Beispiel Bottom-Up Einfügen D&A: B-Sort [email protected] 10 B-Sort ist adaptiv und wc-optimal Laufzeit B-Sort: 𝐹 𝑇 𝑛 = 𝑂 𝑛 log +𝑛 𝑛 F…Anzahl der Fehlstände in Zahlenfolge • F=O(n) → T(n) = O(n) • F=O(n2) → T(n) = O(n log n) D&A: B-Sort [email protected] 11