Algorithms & Data Structures 2
|
|
- Robert Abel
- vor 6 Jahren
- Abrufe
Transkript
1 Algorithms & Data Structures 2 Sorting WS2017 B. Anzengruber-Tanase (Institute for Pervasive Computing, JKU Linz) (Institute of Pervasive Computing, JKU Linz)
2 SORTIEREN Sortierproblem Gegeben: Folge von Datensätzen (items) a 1, a 2,..., a N Jedes ai besitzt Schlu ssel (key) k i (meist vom Typ integer) Gesucht: Permutation π, so dass k π(1) k π(2) k π(n) z.b.: aufsteigend sortieren, d.h. für alle i, 1 < i < N muss gelten: a[i].key a[i+1].key Interne Sortierverfahren: alle Datensätze im Hauptspeicher Externe Sortierverfahren: Nutzung eines Externspeichers In-place Sortierverfahren: brauchen wenig zusätzlichen Speicherplatz Maße für die Laufzeit: Anzahl der Schlüsselvergleiche C (Comparisons) Anzahl der Zuweisungen von Datensätzen M (Moves) C min, C max, C avg jeweils minimale, maximale, M min, M max, M avg und durchschnittliche Anzahl Algorithms & Datastructures 2 // 2017W // 2
3 BEISPIEL :: ARRAY Vor dem Sortieren k a [k] A S O R T I N G E X A M P L E [k] Algorithms & Datastructures 2 // 2017W // 3
4 BEISPIEL :: ARRAY Vor dem Sortieren k a [k] [k] A S O R T I N G E X A M P L E Nach dem Sortieren k a [k] [k] A S O R T I N G E X A M P L E Algorithms & Datastructures 2 // 2017W // 4
5 BEISPIEL :: ARRAY Vor dem Sortieren k a [k] [k] A S O R T I N G E X A M P L E Nach dem Sortieren k a [k] [k] A S O R T I N G E X A M P L E Nach dem Permutieren k a [k] [k] A A E E G I L M N O P R S T X Algorithms & Datastructures 2 // 2017W // 5
6 ALGORITHMENANIMATION :: Algorithms & Datastructures 2 // 2017W // 6
7 BUBBLE SORT Methode: Jeweils 2 benachbarte Schlüssel werden verglichen. Ist a[i].key > a[i+1].key, so werden items vertauscht. Kleinstes Element wandert wie eine bubble nach vorne. Terminierung, wenn keine Vertauschung mehr erfolgt ist, oder spätestens nach N-1 Durchläufen. Algorithms & Datastructures 2 // 2017W // 8
8 BUBBLE SORT Methode: Jeweils 2 benachbarte Schlüssel werden verglichen. Ist a[i].key > a[i+1].key, so werden items vertauscht. Kleinstes Element wandert wie eine bubble nach vorne. Terminierung, wenn keine Vertauschung mehr erfolgt ist, oder spätestens nach N-1 Durchläufen. Analyse: C min (N) = N-1 C max (N) = N*(N-1) = Q(N 2 ) M min (N) = 0 M max (N) = = Q(N 2 ) Algorithms & Datastructures 2 // 2017W // 9
9 BUBBLE SORT Methode: Jeweils 2 benachbarte Schlüssel werden verglichen. Ist a[i].key > a[i+1].key, so werden items vertauscht. Kleinstes Element wandert wie eine bubble nach vorne. Terminierung, wenn keine Vertauschung mehr erfolgt ist, oder spätestens nach N-1 Durchläufen. Analyse: C min (N) = N-1 C max (N) = N*(N-1) = Q(N 2 ) M min (N) = 0 M max (N) = = Q(N 2 ) Abschätzungen: C avg C max / 2 M avg M max / 2 => (d.h. Q(N 2 ) ) Algorithms & Datastructures 2 // 2017W // 10
10 BUBBLE SORT public <T extends Comparable<T>> void sort(t[] list) { // repeat list.length - 1 times: // move smallest element like a bubble to front for (int i = 0; i < list.length - 1; i++) for (int j = list.length - 1; j > i; j--) if (list[j].compareto(list[j - 1]) < 0) swap(list, j, j - 1); } Bei vorsortierten Listen sind weniger als N-1 Wiederholungen nötig. Besser: Nur so lange wiederholen, bis keine Vertauschung mehr auftritt Visualisierung: at.jku.pervasive.ad2.vo03.bubblesort.java Algorithms & Datastructures 2 // 2017W // 11
11 SELECTION SORT (SORTIEREN DURCH AUSWAHL) Methode: Finde zuerst das kleinste Element und tausche es gegen das an erster Stelle befindliche Element aus, finde danach das zweitkleinste Element und tausche es gegen das an zweiter Stelle befindliche Element aus, und fahre in dieser Weise fort bis das gesamte Feld sortiert ist. Für jedes i = 1,..., N-1 tausche a[i] gegen das kleinste Element in a[i],..., a[n] aus Algorithms & Datastructures 2 // 2017W // 12
12 SELECTION SORT (SORTIEREN DURCH AUSWAHL) Methode: Finde zuerst das kleinste Element und tausche es gegen das an erster Stelle befindliche Element aus, finde danach das zweitkleinste Element und tausche es gegen das an zweiter Stelle befindliche Element aus, und fahre in dieser Weise fort bis das gesamte Feld sortiert ist. Für jedes i = 1,..., N-1 tausche a[i] gegen das kleinste Element in a[i],..., a[n] aus Analyse: C avg = C min = C max : = Q (N 2 ) M avg = M min = M max : 3(N-1) Algorithms & Datastructures 2 // 2017W // 13
13 SELECTION SORT (SORTIEREN DURCH AUSWAHL) public <T extends Comparable<T>> void sort(t[] list) { // repeat for each element except the last one for (int i = 0; i < list.length-1; i++) { // find smallest element // in remaining list int min = i; for (int j = i+1; j < list.length; j++) if (list[j].compareto(list[min]) < 0) min = j; // swap smallest element // to first position swap(list, i, min); } } Visualisierung: at.jku.pervasive.ad2.vo03.selectionsort.java Algorithms & Datastructures 2 // 2017W // 14
14 INSERTION SORT (SORTIEREN DURCH EINFÜGEN) Methode: Betrachte die Elemente eines nach dem anderen und füge jedes an seinen richtigen Platz zwischen den bereits betrachteten ein. Das gerade betrachtete Element wird eingefügt, indem die größeren Elemente einfach um eine Position nach rechts bewegt werden und das Element dann auf dem frei gewordenen Platz eingefügt wird. Für jedes i von 2 bis N werden die Elemente a[1],..., a[i] sortiert, indem a[i] an die entsprechende Stelle in der sortierten Liste von Elementen in a[1],..., a[i-1] gesetzt wird. Algorithms & Datastructures 2 // 2017W // 15
15 INSERTION SORT (SORTIEREN DURCH EINFÜGEN) Methode: Betrachte die Elemente eines nach dem anderen und füge jedes an seinen richtigen Platz zwischen den bereits betrachteten ein. Das gerade betrachtete Element wird eingefügt, indem die größeren Elemente einfach um eine Position nach rechts bewegt werden und das Element dann auf dem frei gewordenen Platz eingefügt wird. Für jedes i von 2 bis N werden die Elemente a[1],..., a[i] sortiert, indem a[i] an die entsprechende Stelle in der sortierten Liste von Elementen in a[1],..., a[i-1] gesetzt wird. Analyse: C min (N) = N-1 C max (N) = = Q(N 2 ) M min (N) = 2(N-1) M max (N) = = Q(N 2 ) Algorithms & Datastructures 2 // 2017W // 16
16 INSERTION SORT (SORTIEREN DURCH EINFÜGEN) public <T extends Comparable<T>> void sort(t[] list) { // extend sorted range step by step: // [0..1], [0..2], [0..3],... for (int i = 1; i < list.length; i++) { int j = i; T elem = list[i]; // move elements to the right until elem // is at correct position while (j >= 1 && elem.compareto(list[j - 1]) < 0) { list[j] = list[j - 1]; j--; } list[j] = elem; } } Visualisierung: at.jku.pervasive.ad2.vo03.insertionsort.java Algorithms & Datastructures 2 // 2017W // 17
17 VERGLEICH ELEMENTARER SORTIERVERFAHREN Algorithmus Vergleiche Bewegungen Bubble Sort N 2 / 2 N 2 / 2 Selection Sort N 2 / 2 N Insertion Sort N 2 / 4 N 2 / 8 Daten fast vorsortiert: Bubble Sort und Insertion Sort beinahe linear Sortierverfahren über mehrere Schlüssel (keys): Sortiere nach 1., dann nach 2. key wenn bei Gleichheit im 2. die Sortierreihenfolge im 1. erhalten bleibt so spricht man von eine stabilen Verfahren ( stable sort ) Sortieren großer Records: Referenzen (oder Indizes) anstatt Records swappen Algorithms & Datastructures 2 // 2017W // 18
18 DONALD A. SHELL (1959)
19 DONALD A. SHELL (1959) Algorithms & Datastructures 2 // 2017W // 20
20 SHELL SORT Voraussetzung: n-sortierung teile Folge in n Teilfelder beginnend beim 1., 2., 3., usw. sortiere Teilfelder nach Insertion Sort Beispiel: 4-Sortierung Algorithms & Datastructures 2 // 2017W // 21
21 SHELL SORT Methode: Ermögliche Vertauschungen über größere Abstände. (=> Schrittweite ) Dazu abnehmende Folge von Inkrementen h t,..., h 1 definiert (mit h 1 = 1), z.b.: 7, 5, 3, 1 Eine Folge k 1,..., k N heißt h-sortiert, wenn für alle i, 1 i N-h: k i k i+h Array a wird nun mit Insertion Sort h t sortiert, dann h t-x sortiert usw. bis a 1-sortiert und damit sortiert ist. Algorithms & Datastructures 2 // 2017W // 22
22 SHELL SORT Methode: Ermögliche Vertauschungen über größere Abstände. (=> Schrittweite ) Dazu abnehmende Folge von Inkrementen h t,..., h 1 definiert (mit h 1 = 1), z.b.: 7, 5, 3, 1 Eine Folge k 1,..., k N heißt h-sortiert, wenn für alle i, 1 i N-h: k i k i+h Array a wird nun mit Insertion Sort h t sortiert, dann h t-x sortiert usw. bis a 1-sortiert und damit sortiert ist. Beispiel: Inkremente 4,2, : 4-Sortieren 3 Zuweisungen Zuweisungen : 2-Sortieren 3 Zuweisungen Zuweisungen : 1-Sortieren 3 Zuweisungen Zuweisungen Zuweisungen Algorithms & Datastructures 2 // 2017W // 23
23 SHELL SORT Vgl. Insertion-Sort: Zuweisungen Zuweisungen Zuweisungen Zuweisungen Zuweisungen gezählt jeweils 1 Zuweisung an Hilfsspeicher, 1 Zuweisung pro Stelle mit neuem Wert. Problem: Wie wählt man Inkremente h i richtig? (viele Resultate) Worst Case (subquadratisch!!): O(N log 2 N) falls h i {2 p 3 q < N} Sequenz Beispiel (Shell): 1 = h 1 < h 2 <... h t mit h t = N/2, h k = h k+1 /2 Q(N 2 ) Sequenz Beispiel (Hibbard): 1, 3, 7, 15, 2 i -1 Q(N 3/2 ) Sequenz Beispiel (Sedgewick): wenige moves: , , , 86961, 33936, 13776, 4592, 1968, 861, 336, 112, 48, 21, 7, 3, 1 oder: 9*4 i -9*2 i +1 oder 4 i 3*2 i + 1, z.b. 1, 5, 19, 41, 109,...beste bekannte Sequenz mit O(N 7/6 ) Algorithms & Datastructures 2 // 2017W // 24
24 Insertion Sort SHELL SORT public <T extends Comparable<T>> void sort(t[] list) { // sequence proposed by Sedgewick: int h = 1; while (h <= (list.length - 1) / 9) h = 3 * h + 1; // repeat for each distance, from high to low for (; h > 0; h /= 3) { // the following loop is identical to insertion sort with h = 1 for (int i = h; i < list.length; i++) { int j = i; T elem = list[i]; while (j >= h && elem.compareto(list[j - h]) < 0) { list[j] = list[j - h]; j -= h; } list[j] = elem; } } } Visualisierung: at.jku.pervasive.ad2.vo03.shellsort.java Algorithms & Datastructures 2 // 2017W // 25
25 HEAP SORT Methode: 1. Ordne die N zu sortierenden Elemente in einem binären Heap an 2. Führe N removemin() Operationen aus 3. Füge die jeweils entfernten Elemente in neues Array ein Algorithm HeapSort Baue einen Heap auf mit Schlüsseln a 1,..., a N do { entferne Wurzel; // = Minimum reorganisiere Heap; } while (Heap ist nicht leer); Beachte: verwendet zusätzliches Array, daher doppelter Speicheraufwand Idee für reorganisieren nach Wurzelentfernen entferne letzten Knoten im Heap und schreibe seinen Schlu ssel in Wurzel vertausche solange Knoten mit kleinerem Sohn, bis Heapbedingung erfu llt: ( versickern lassen, downheap) Algorithms & Datastructures 2 // 2017W // 26
26 HEAP SORT Heap als Array implementiert: Nummeriere Knoten wie folgt Wurzel: Nummer 0 left Child von Knoten i: Nummer (2i+1) right Child von Knoten i: Nummer (2i+2) Im array double[] a = new double[n]; (in a[i] der Schlüssel von Knoten i) Vorteil: Parent/Child-Beziehung ist aus Knotenindex berechenbar public static int parent(int i) { // liefert Index des Parents zu i return (i - 1) / 2; // (Spezialfall: parent(0)==0) } Algorithms & Datastructures 2 // 2017W // 27
27 HEAP SORT Strategie zur Vermeidung eines zweiten Arrays: verwende Lu cken die durch removemin() entstehen zum Speichern der sortierten Elemente Ergebnis ist dann absteigend sortiert (im ersten Schritt wird Minimum auf Position N gespeichert, im zweiten das Minimum des verbleibenden Heaps auf Position N-1,...) kann vermieden werden, in dem Heap als Max-Heap (anstatt als Min-Heap wie bisher) implementiert wird Algorithms & Datastructures 2 // 2017W // 28
28 HEAP SORT Analyse: Aufbau des Heaps: O(N) => siehe Bottom-up Heap Konstruktion Begründung: h=höhe und N-1 = 2 h -1 Anzahl der Elemente Ebene Sickertiefe Anzahl h-1 1 N/2 h-2 2 N/4 h-3 3 N/ h N/2 h = 1 Aufwand:, da 1/2+2/4+3/8+... < 2 Aufwand für einmaliges removemin(): O(log N) (Begründung siehe Kapitel Heaps) wird N mal ausgeführt, daher: O(N log N) Aufwand Gesamt (Worst Case): O(N) + O(N log N) = O(N log N) Algorithms & Datastructures 2 // 2017W // 29
29 RÜCKBLICK :: SORTIERVERFAHREN AUF BASIS PQ Selection Sort verwendet Priority Queue P, implementiert als unsortierte Sequenz Phase 1: Einfügen von N Elementen in P: O(N) Phase 2: Entnahme von N Elementen (jeweils min) aus P: O(N 2 ) Gesamtkomplexität: O(N 2 ) Insertion Sort verwendet Priority Queue P, implementiert als sortierte Sequenz Phase 1: Einfügen von N Elementen in P: O(N 2 ) Phase 2: Entnahme von N Elementen (jeweils min) aus P: O(N) Gesamtkomplexität: O(N 2 ) Heap Sort verwendet Priority Queue P, implementiert als unsortierter Heap Phase 1: Einfügen von N Elementen in P: O(N log N) Phase 2: Entnahme von N Elementen (jeweils min) aus P: O(N log N) Gesamtkomplexität: O(N log N) Algorithms & Datastructures 2 // 2017W // 32
30 DIVIDE & CONQUER Grundprinzip für viele effiziente Algorithmen Besteht aus drei Phasen: Divide: wenn die Problemgröße zu groß ist, zerlege das Problem in zwei oder mehr Teilprobleme Rekursion: Wende Divide-and-Conquer auf Teilprobleme an (rekursives Lösen der Teilprobleme) Conquer: Füge die Lösungen der Teilprobleme zu einer Lösung des Gesamtproblems zusammen Algorithms & Datastructures 2 // 2017W // 33
31 MERGE SORT Rekursive Methode: Betrachte die Elemente a[1],..., a[n] als Sequenz S Falls S leer oder 1-elementig => fertig Sonst: Divide: Teile S in 2 möglichst gleichgroße Hälften S1 und S2 Conquer: Sortiere S1 und S2 mittels Mergesort (rekursive Anwendung). Merge: Verschmelze die sortierten Teillisten zu sortierter Liste. Iterative Methode: Verschmelzen kann durch 2 Zeiger erfolgen, die die sortierten Teillisten durchwandern. Zeigen zunächst auf erstes Element, vergleichen Schlüssel, tragen kleineres Element in neu konstruierte Sequenz ein und bewegen den Zeiger auf dieses Element um eine Position weiter. John von Neumann, 1945 Algorithms & Datastructures 2 // 2017W // 34
32 MERGE SORT Visualisierung als Binärbaum T (Merge-Sort Tree): jeder interne Knoten entspricht einem Rekursionsaufruf zu jedem Knoten ist zu bearbeitende Sequenz assoziiert Externe Knoten sind mit einzelnen Elementen von S assoziiert Algorithms & Datastructures 2 // 2017W // 35
33 MERGE SORT Visualisierung als Binärbaum T (Merge-Sort Tree): Mischen der sortierten Teilsequenzen Algorithms & Datastructures 2 // 2017W // 36
34 MERGE SORT Pseudo-Code für Merge-Phase Algorithm merge (S1, S2, S): Input: Sequenzen S1 und S2, sortiert in nicht-absteigender Reihenfolge, leere Sequenz S Output: Sequenz S, enthält Vereinigung der Elemente von S1 und S2 in nicht-absteigender Reihenfolge while S1 is not empty and S2 is not empty do if S1.first().element() S2.first().element() then { move first element of S1 at end of S } S.insertLast(S1.remove(S1.first())) else { move first element of S2 at end of S } S.insertLast(S2.remove(S2.first())) while S1 is not empty do S.insertLast(S1.remove(S1.first())) while S2 is not empty do S.insertLast(S2.remove(S2.first())) at.jku.pervasive.ad2.vo03.mergesortvector.java at.jku.pervasive.ad2.vo03.mergesort.java Algorithms & Datastructures 2 // 2017W // 37
35 LAUFZEIT VON MERGE SORT Merge-Sort-Baum für eine Sequenz von N Elementen hat Höhe log N Behauptung: Mergesort sortiert N Elemente in Laufzeit O(N log N) Begründung: Annahme: Zugriff auf erstes und letztes Element (sowie insert und delete) jeder Sequenz ist in O(1) möglich die Zeit, die im Knoten v eines Merge-Sort-Baumes T verbracht wird, ohne die Dauer der rekursiven Aufrufe der Kinder, sei mit Laufzeit des rekursiven Aufrufes bezeichnet Sei i die Tiefe des Knoten v in T, so ist die Laufzeit des rekursiven Aufrufes O(N/2 i ), da die Länge der zugehörigen Sequenz N/2 i ist T hat exakt 2 i Knoten auf Tiefe i, daher ist die Zeit, die auf Tiefe i insgesamt verbracht wird O(2 i N/2 i ) = O(N) Da Baum Höhe von log N hat, ist Gesamtkomplexität O( N log N ) Beim Mischen Q(N) Schlüsselvergleiche Rekursionstiefe logarithmisch beschränkt, Q(N log N) Schlüsselvergleiche Anzahl Bewegungen (Moves) ist Q(N log N). O(N log N) (immer) Algorithms & Datastructures 2 // 2017W // 38
36 LAUFZEIT VON MERGE SORT Höhe N Laufzeit pro Level O(N) N/2 N/2 O(N) log (N) N/4 N/4 N/4 N/4 O(N) N/8 N/8 N/8 N/8 N/8 N/8 N/8 N/8 O(N) O(N) Gesamtkomplexität: O(N log N) Algorithms & Datastructures 2 // 2017W // 41
37 MERGE SORT (ARRAYS, REKURSIV) private Object[] buffer; public synchronized <T extends Comparable<T>> void sort(t[] list) { // create buffer with equal length to list, used by the merge method. // merge is not recursive, so a single buffer is sufficient and reduces // memory requirements. drawback: the method needs to be synchronized buffer = java.util.arrays.copyof(list, list.length); // start mergesort mergesort(list, 0, list.length - 1); } /** Sort list from l to r. */ private <T extends Comparable<T>> void mergesort(t[] list, int l, int r) { if (r > l) { // center element int m = (r + l) / 2; // divide: recursive sorting of left and right half mergesort(list, l, m); mergesort(list, m + 1, r); // conquer: merge both halfs merge(list, l, m, r); } } at.jku.pervasive.ad2.vo03.mergesortvector.java at.jku.pervasive.ad2.vo03.mergesort.java Algorithms & Datastructures 2 // 2017W // 42
38 MERGE SORT (ARRAYS, REKURSIV) /** Merge two lists, contained in array list from [l.. m] and [m+1.. r]. * This method requires the private buffer to be initialized to an array * of equal length to list. */ <T extends Comparable<T>> void merge(t[] list, int l, int m, int r) T[] aux = (T[]) buffer; // use buffer int i, j; // move both lists to aux for (i = m + 1; i > l; i--) aux[i - 1] = list[i - 1]; for (j = m; j < r; j++) aux[r + m - j] = list[j + 1]; // sort both lists back to list for (int k = l; k <= r; k++) if (aux[j].compareto(aux[i]) < 0) list[k] = aux[j--]; else list[k] = aux[i++]; } Algorithms & Datastructures 2 // 2017W // 43
39 QUICK SORT Divide and Conquer Sicht: 1. Divide: Falls zu sortierende Sequenz S mehr als 1 Element hat, so wähle beliebiges Element x aus S als Pivotelement Entferne alle Elemente aus S und teile sie in drei Teile: S L : enthält alle Elemente aus S, die kleiner als x sind S E : enthält alle Elemente aus S, die gleich x sind S R : enthält alle Elemente aus S, die größer als x sind 2. Rekursion: sortiere S L und S R rekursiv 3. Conquer: Füge Elemente wieder in S ein, wobei zuerst die Elemente aus S L genommen werden, dann aus S E, dann aus S R C.A.R. Hoare, 1962 Algorithms & Datastructures 2 // 2017W // 44
40 QUICK SORT Visualisierung in Baumstruktur (Quick-Sort Tree) Divide: Algorithms & Datastructures 2 // 2017W // 45
41 QUICK SORT Visualisierung in Baumstruktur (Quick-Sort Tree) Conquer: Algorithms & Datastructures 2 // 2017W // 46
42 QUICK SORT Methode: Betrachte (wieder) die Elemente a[1],..., a[n] als Sequenz S Zerlege die Sequenz S = a[1],..., a[n] in S1 und S2, so dass gilt: Für jeden Schlüsselwert k i1 von S 1 und jeden Schlüsselwert k i2 von S 2 gilt die Beziehung k i1 < k i2, d.h. jedes Element der ersten Teilfolge ist kleiner als jedes Element der zweiten Teilfolge. Führe diese Zerlegung wiederum für S 1 und S 2 durch, usw. Das Verfahren bricht für eine einelementige Teilsequenz ab Nach dem Abbruch des Verfahrens ist S sortiert Algorithms & Datastructures 2 // 2017W // 47
43 QUICK SORT Arrays: Vorgang des Zerlegens und Zusammensetzens: (i) (ii) (iii) (iv) (v) Wähle Pivotelement x aus der Folge a[1],..., a[n], etwa x=a[1]; Durchsuche die Folge von links, bis ein Element a[i] mit x < a[i] gefunden wurde. Durchsuche die Folge von rechts, bis ein Element a[j] mit a[j] < x gefunden wurde. Vertausche beide Elemente. Wiederhole (ii), (iii) und (iv) so lange, bis i >= j gilt. Anschließend wird das Element x = a[1] mit a[j] vertauscht und es gilt für die neue Folge a[1],...,a[j-1], x, a[j+1],...,a[n]: a[i 1 ] < x < a[i 2 ], für alle i 1 {1,...,j-1}, i 2 {j+1,...,n} Daraufhin wird der gesamte Prozess für die Teilfolgen a[1],...,a[j-1] und a[j+1],..., a[n] durchgeführt, und es ist kein Zusammensetzen der Ergebnisse mehr erforderlich. Algorithms & Datastructures 2 // 2017W // 48
44 QUICK SORT BEISPIEL Betrachten die Folge i j und sortieren sie bezüglich der Ordnung <=. Erstes Vergleichselement gewählt: x = a[1] = 44 Mit der Variablen i von links so weit laufen, bis wir auf ein Element stoßen das größer ist als 44. Mit der Variablen j von rechts so weit laufen, bis ein Element gefunden wird, das kleiner ist als x, a[i] und a[j] werden nun vertauscht und wir erhalten: i j Algorithms & Datastructures 2 // 2017W // 49
45 QUICK SORT BEISPIEL Mit i anschließend auf das Element a[5] = 94 und mit j auf a[6] = 6 gestoßen. Wiederum werden beide vertauscht: j i Mit i >= j ist das Abbruchkriterium der Zerlegung erreicht. Jetzt werden a[1] und a[j] vertauscht, und wir erhalten: Jetzt gilt: Alle Elemente der linken Teilfolge sind kleiner oder gleich x, und jedes Element der rechten Teilfolge ist größer oder gleich x. Das Verfahren wird nun auf beide Teilfolgen angewendet: und Algorithms & Datastructures 2 // 2017W // 50
46 QUICK SORT <T extends Comparable<T>> void quicksort(t[] list, int left, int right) { if (left >= right) return; } // partitioning T pivot = list[(left + right) / 2]; int i = left, j = right; do { while (list[i].compareto(pivot) < 0) i++; while (list[j].compareto(pivot) > 0) j--; if (i <= j) swap(list, i++, j--); } while (i <= j); quicksort(list, left, j); quicksort(list, i, right); Visualisierung: at.jku.pervasive.ad2.vo03.quicksort.java Algorithms & Datastructures 2 // 2017W // 51
47 IN-PLACE QUICK SORT Divide-Schritt: l durchsucht Sequenz von links nach rechts, r umgekehrt l r falls l auf größeres Element zeigt, als r, dann SWAP l r Pivot Pivot r l im letzten Schritt: SWAP mit Pivot-Element r l Algorithms & Datastructures 2 // 2017W // 52
48 ANALYSE QUICK SORT Betrachte Quick-Sort Baum T Sei s i (N) die Anzahl der Elemente der Knoten der Tiefe i in T Es gilt: s 0 (N) = N, da Wurzel mit gesamter zu sortierender Sequenz assoziiert ist s 1 (N) N-1, da Pivot-Element nicht mehr betrachtet werden muss s 2 (N) N-2 (oder sogar N-3 (falls einer der Knoten leer ist)) s i (N) N-i Daraus folgt Komplexität im schlechtesten Fall: Laufzeit im besten Fall: Bester Fall bedeutet, dass bei jeder Teilung S L und S R gleich groß sind s i (N) = N - ( i -1) = N - 2 i + 1 somit hat T Höhe O(log N) Daher Komplexität im besten Fall O(N log N) Algorithms & Datastructures 2 // 2017W // 53
49 ANALYSE QUICK SORT Best Case Pivot-Element teilt Liste in gleich große Teile N ld(n) ld(n) Ebenen in jeder Ebene N Vergleiche mit Pivot-Element O(N log N) Algorithms & Datastructures 2 // 2017W // 54
50 ANALYSE QUICK SORT Best Case Pivot-Element teilt Liste in gleich große Teile N Worst Case Pivot-Element trennt ein Element von der Liste N ld(n) N ld(n) Ebenen in jeder Ebene N Vergleiche mit Pivot-Element N Ebenen in jeder Ebene N Vergleiche mit Pivot-Element O(N log N) O(N 2 ) Algorithms & Datastructures 2 // 2017W // 55
51 ANALYSE QUICK SORT Average Case (in etwa gleich der Laufzeit im best case) Folgende Annahmen/Überlegungen werden vorausgesetzt: N Schlüssel paarweise verschieden (keys sind also die Zahlen 1 N) jeder der N! möglichen Anordnungen gleich wahrscheinlich für eine Folge k 1,,k N folgt, dass jede Zahl k, (1 k N) mit gleicher Wahrscheinlichkeit 1/N an Position N auftritt und damit als Pivotelement gewählt wird Wird k als Pivot gewählt, entstehen zwei Folgen mit den Längen (k-1) und (N-k) jeweils rek. Aufruf von Quicksort Teilfolgen zufällig wenn ursprüngliche Folge zufällig war Durch Aufteilung sämtlicher Folgen k 1,..., k N mit k N = k erhält man wieder sämtliche Folgen von k-1 und (N-k) Elementen Dadurch ergibt sich eine Rekurrenzformel für die mittlere Laufzeit T(N): Algorithms & Datastructures 2 // 2017W // 56
52 ANALYSE QUICK SORT Average Case (in etwa gleich der Laufzeit im best case) für N 2 folgt (da T(0) = 0): per Induktion zeigen, dass hieraus folgt (für N 2, mit einer hinreichend großen Konstanten c): T(N) c * N log N Sei nun N 3, und setzen wir für alle i < N voraus, dass bereits T(i) c*i*log i gilt. Dann folgt: für c 4b folgt: T(N) c * N log N Algorithms & Datastructures 2 // 2017W // 57
53 MEDIAN-OF-THREE QUICK SORT Wähle Pivot als Median von drei Elementen im aufzuteilenden Bereich Auswahl des Pivotelementes (Median-of-3 Strategie) Variante (a): m = (l+r)/2 oder Variante (b): m = l+1 Pivot: mittleres Element von {a[l],a[m],a[r]} Bemerkung: Median von 3 Objekten kann in durchschnittlich 8/3 Vergleichen gefunden werden => Divide im Mittel N /3 = N - 1/3 Vergleiche Tausche a[r] mit Pivot Rest wie bisher Worst Case: verschwindet in Variante (a) für auf- bzw. absteigende Sortierung existiert in Variante (b) immer noch Praktischer Hinweis: Insertion Sort bei kleinem N besser als Quicksort Übergang bei N < 20 auf Insertion Sort Algorithms & Datastructures 2 // 2017W // 58
54 MEDIAN-OF-THREE QUICK SORT <T extends Comparable<T>> void quicksort(t[] list, int left, int right) { if (left >= right) return; if (right - left < 20) insertionsort(list, left, right); else { // put median element at middle position int middle = (left + right) / 2; if (list[middle].compareto(list[left]) < 0) swap(list, left, middle); if (list[right].compareto(list[left]) < 0) swap(list, left, right); if (list[right].compareto(list[middle]) < 0) swap(list, middle, right); // partitioning T pivot = list[middle]; int i = left + 1, j = right - 1; do { while (list[i].compareto(pivot) < 0) i++; while (list[j].compareto(pivot) > 0) j--; if (i <= j) swap(list, i++, j--); } while (i <= j); unter 20 Elemente Insertion Sort Median von left, middle und right als Pivot-Element } } quicksort(list, left, j); // sort smaller elements quicksort(list, i, right); // sort larger elements at.jku.pervasive.ad2.vo03.motquicksort.java Algorithms & Datastructures 2 // 2017W // 59
55 MEDIAN-OF-THREE QUICK SORT Wahrscheinlichkeit, dass x an Position k steht ist da k-1 Positionen für das kleinere und n-k Positionen für das größere Objekt möglich sind Schlüsselvergleiche im Mittel: C ave (N) N log N 2.55N + O(log N) = O(N log N) Algorithms & Datastructures 2 // 2017W // 60
56 VERGLEICH VON SORTIERALGORITHMEN Algorithmus Worst Case Best Case Avg. Case BubbleSort O(N 2 ) O(N) O(N 2 ) InsertionSort O(N 2 ) O(N) O(N 2 ) SelectionSort O(N 2 ) O(N 2 ) O(N 2 ) HeapSort O(N log N) O(N log N) O(N log N) MergeSort O(N log N) O(N log N) O(N log N) QuickSort O(N 2 ) O(N log N) O(N log N) Algorithms & Datastructures 2 // 2017W // 61
57 UNTERE SCHRANKE FÜR SORTIEREN DURCH VERGLEICHEN Entscheidungsbaum ist Binärbaum, in jedem internen Knoten wird ein Vergleich durchgeführt, in den externen Knoten stehen die möglichen Anordnungen der Elemente entsprechend dem Ausgang der Vergleiche Entscheidungsbaum zur Sortierung von 3 Elementen A, B, C: A < B ja nein B < C C < B A B C A < C C B A C < A A C B C A B B C A B A C Algorithms & Datastructures 2 // 2017W // 62
58 UNTERE SCHRANKE FÜR SORTIEREN DURCH VERGLEICHEN Erinnere: Ein Binärbaum der Tiefe d hat höchstens 2 d Blätter. Beweis durch Induktion: Fall d=0, Anzahl Blätter = 1 = 2 0 Falls d>0, so existiert Wurzel mit linkem und rechtem Subbaum als Kinder, deren Tiefe d-1 ist, daher haben sie höchstens 2 d-1 Blätter. Daher Gesamtzahl der Blätter 2 d. Analog gilt: Ein Binärbaum mit L Blättern hat zumindest eine Höhe von log(l) Anwendung auf Entscheidungsbaum: Entscheidungsbaum zur Sortierung von N Elementen hat N! Blätter (Anzahl der unterschiedlichen Permutationen der N Elemente) und somit eine Höhe von zumindest log (N!) Daher gilt: Ein vergleichsbasierter Sortieralgorithmus benötigt zumindest log (N!) Vergleichsoperationen (worst case) Algorithms & Datastructures 2 // 2017W // 63
59 UNTERE SCHRANKE FÜR SORTIEREN DURCH VERGLEICHEN Jeder Sortieralgorithmus, der auf Vergleichen beruht, hat als Laufzeit mindestens O (N log N). Dies ist eine (informations-theoretische) untere Schranke! Verallgemeinerung: Wenn P mögliche Fälle unterschieden werden und als Ja/Nein Entscheidungen auftreten, dann sind von einem beliebigen Algorithmus zur Lösung des Problems zumindest log P solcher Entscheidungsfragen zu beantworten Algorithms & Datastructures 2 // 2017W // 64
60 ALGORITHMENANIMATION :: Algorithms & Datastructures 2 // 2017W // 66
61 Algorithms & Data Structures 2 Sorting WS2017 B. Anzengruber-Tanase (Institute for Pervasive Computing, JKU Linz) (Institute of Pervasive Computing, JKU Linz)
8. Sortieren II. 8.1 Heapsort. Heapsort. [Max-]Heap 6. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften
Heapsort, Quicksort, Mergesort 8. Sortieren II 8.1 Heapsort [Ottman/Widmayer, Kap. 2.3, Cormen et al, Kap. 6] 9 210 Heapsort [Max-]Heap 6 Inspiration von Selectsort: Schnelles Einfügen Binärer Baum mit
MehrUE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 9. Sortieren
UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1 Übung 9 Sortieren Institut für Pervasive Computing Johannes Kepler Universität Linz Altenberger Straße 69, A-4040 Linz Sortieren :: Problemstellung
MehrKapitel 6 Elementare Sortieralgorithmen
Kapitel 6 Elementare Sortieralgorithmen Ziel: Kennenlernen elementarer Sortierverfahren und deren Effizienz Zur Erinnerung: Das Sortier-Problem Gegeben: Folge A von n Elementen a 1, a 2,..., a n ; Eine
MehrDas Suchproblem. Gegeben Menge von Datensätzen. Beispiele Telefonverzeichnis, Wörterbuch, Symboltabelle
122 4. Suchen Lineare Suche, Binäre Suche, Interpolationssuche, Untere Schranken [Ottman/Widmayer, Kap. 3.2, Cormen et al, Kap. 2: Problems 2.1-3,2.2-3,2.3-5] 123 Das Suchproblem Gegeben Menge von Datensätzen.
MehrKap. 3: Sortieren. Überblick. Unser Sortierproblem. Motivation. Laufzeitmessung. Warum soll ich hier bleiben? Sortierverfahren sind WICHTIG!!!
Kap. 3: Sortieren Professor Dr. Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund Überblick Einführung in das Sortierproblem Insertion-Sort Selection-Sort Merge-Sort 4. VO
MehrProgrammiertechnik II
Sortieren: Einfache Algorithmen Sortieren Abstrakte Operation geg: Menge von items (Elemente) jedes Element besitzt Sortierschlüssel Schlüssel unterliegen einer Ordnung eventuell sind doppelte Schlüssel
MehrInterne Sortierverfahren
Angewandte Datentechnik Interne Sortierverfahren Interne Sortierverfahren Ausarbeitung einer Maturafrage aus dem Fach A n g e w a n d t e D a t e n t e c h n i k Andreas Hechenblaickner 5CDH HTBLA Kaindorf/Sulm
MehrAlgorithmen und Datenstrukturen 1
Algorithmen und Datenstrukturen 1 4. Vorlesung Peter F. Stadler Universität Leipzig Institut für Informatik studla@bioinf.uni-leipzig.de 4. Sortierverfahren Elementare Sortierverfahren - Sortieren durch
MehrSuchen und Sortieren
Suchen und Sortieren Suchen Sortieren Mischen Zeitmessungen Bewertung von Sortier-Verfahren Seite 1 Suchverfahren Begriffe Suchen = Bestimmen der Position (Adresse) eines Wertes in einer Datenfolge Sequentielles
MehrJAVA - Suchen - Sortieren
Übungen Informatik I JAVA - Suchen - Sortieren http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/tutorial Übungen Informatik 1 Folie 1 Inhalt Suchen/Sortieren binary search mergesort bubblesort Übungen Informatik
MehrGrundlegende Sortieralgorithmen
Grundlegende Sortieralgorithmen Martin Wirsing in Zusammenarbeit mit Matthias Hölzl und Nora Koch Sortieren in Java Man kann Sortierverfahren in einem imperativem oder einem objektorientierten Stil programmieren.
MehrProgrammieren I. Kapitel 7. Sortieren und Suchen
Programmieren I Kapitel 7. Sortieren und Suchen Kapitel 7: Sortieren und Suchen Ziel: Varianten der häufigsten Anwendung kennenlernen Ordnung Suchen lineares Suchen Binärsuche oder Bisektionssuche Sortieren
Mehr7. Sortieren Lernziele. 7. Sortieren
7. Sortieren Lernziele 7. Sortieren Lernziele: Die wichtigsten Sortierverfahren kennen und einsetzen können, Aufwand und weitere Eigenschaften der Sortierverfahren kennen, das Problemlösungsparadigma Teile-und-herrsche
MehrAlgorithmen und Datenstrukturen Heapsort
Algorithmen und Datenstrukturen 2 5 Heapsort In diesem Kapitel wird Heapsort, ein weiterer Sortieralgorithmus, vorgestellt. Dieser besitzt wie MERGE-SORT eine Laufzeit von O(n log n), sortiert jedoch das
MehrAlgorithmen I. Tutorium 1-3. Sitzung. Dennis Felsing
Algorithmen I Tutorium 1-3. Sitzung Dennis Felsing dennis.felsing@student.kit.edu www.stud.uni-karlsruhe.de/~ubcqr/algo 2011-05-02 Überblick 1 Sortieren und Suchen 2 Mastertheorem 3 Datenstrukturen 4 Kreativaufgabe
MehrÜbung: Algorithmen und Datenstrukturen SS 2007
Übung: Algorithmen und Datenstrukturen SS 2007 Prof. Lengauer Sven Apel, Michael Claÿen, Christoph Zengler, Christof König Blatt 5 Votierung in der Woche vom 04.06.0708.06.07 Aufgabe 12 Manuelle Sortierung
Mehr8.1.3 Operation Build-Max-Heap Operation zur Konstruktion eines Heaps Eingabe: Feld A[1..n], n = länge(a) BUILD-MAX-HEAP (A)
Stand der Vorlesung: Datenstruktur Heap: fast vollständiger Binärbaum MaxHeap: sortierter Heap, größtes Element an Wurzel Sortierverfahren: HeapSort: Sortieren eines Feldes A[1.. n] Idee: in place: Feld
MehrTechnische Universität München
Stand der Vorlesung: Datenstruktur Heap: fast vollständiger Binärbaum MaxHeap: sortierter Heap, größtes Element an Wurzel Sortierverfahren: HeapSort: Sortieren eines Feldes A[1.. n] Idee: in place: Feld
MehrHeapsort / 1 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]
Heapsort / 1 Heap: Ein Array heißt Heap, falls A [i] A [2i] und A[i] A [2i + 1] (für 2i n bzw. 2i + 1 n) gilt. Beispiel: A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] Heapsort / 2 Darstellung eines Heaps als
MehrTutoraufgabe 1 (Sortieren): Lösung: Datenstrukturen und Algorithmen SS14 Lösung - Übung 4
Prof. aa Dr. E. Ábrahám Datenstrukturen und Algorithmen SS Lösung - Übung F. Corzilius, S. Schupp, T. Ströder Tutoraufgabe (Sortieren): a) Sortieren Sie das folgende Array durch Anwendung des Selectionsort-Algorithmus.
MehrÜbung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 2016 Patrick Schäfer, Humboldt-Universität zu Berlin Agenda 1. Vorstellen des vierten Übungsblatts 2. Vorbereitende Aufgaben für das vierte Übungsblatt
MehrAlgorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Einfache Sortierverfahren Autor: Stefan Edelkamp
Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Einfache Sortierverfahren Autor: Stefan Edelkamp Institut für Informatik Georges-Köhler-Allee Albert-Ludwigs-Universität Freiburg 1
MehrAlgorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Suchverfahren Autor: Stefan Edelkamp / Sven Schuierer
Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Suchverfahren Autor: Stefan Edelkamp / Sven Schuierer Institut für Informatik Georges-Köhler-Allee Albert-Ludwigs-Universität Freiburg
MehrAlgorithmen und Datenstrukturen 1
Algorithmen und Datenstrukturen 1 6. Vorlesung Martin Middendorf / Universität Leipzig Institut für Informatik middendorf@informatik.uni-leipzig.de studla@bioinf.uni-leipzig.de Merge-Sort Anwendbar für
MehrAlle bislang betrachteten Sortieralgorithmen hatten (worst-case) Laufzeit Ω(nlog(n)).
8. Untere Schranken für Sortieren Alle bislang betrachteten Sortieralgorithmen hatten (worst-case) Laufzeit Ω(nlog(n)). Werden nun gemeinsame Eigenschaften dieser Algorithmen untersuchen. Fassen gemeinsame
Mehr4. Sortieren 4.1 Vorbemerkungen
. Seite 1/21 4. Sortieren 4.1 Vorbemerkungen allgemeines Sortierproblem spezielle Sortierprobleme Ordne a 1,..., a n so um, dass Elemente in aufsteigender Reihenfolge stehen. Die a i stammen aus vollständig
MehrAlgorithmen und Datenstrukturen. Kapitel 3: Sortierverfahren. Skript zur Vorlesung. Algorithmen und Datenstrukturen
LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS DATABASE Algorithmen und Datenstrukturen Kapitel 3: Sortierverfahren Skript zur Vorlesung Algorithmen und Datenstrukturen Sommersemester
MehrÜbersicht. Einfache Verfahren MergeSort Untere Schranke QuickSort Selektieren Schnelleres Sortieren Externes Sortieren. 6 Sortieren.
Übersicht 6 Sortieren Einfache Verfahren MergeSort Untere Schranke QuickSort Selektieren Schnelleres Sortieren Externes Sortieren H. Täubig (TUM) GAD SS 14 221 Statisches Wörterbuch Sortieren Lösungsmöglichkeiten:
MehrDatenstrukturen und Algorithmen
Joost-Pieter Katoen Datenstrukturen und Algorithmen 1/32 Datenstrukturen und Algorithmen Vorlesung 7: Sortieren (K2) Joost-Pieter Katoen Lehrstuhl für Informatik 2 Software Modeling and Verification Group
MehrAlgorithmen und Datenstrukturen SS09. Foliensatz 15. Michael Brinkmeier. Technische Universität Ilmenau Institut für Theoretische Informatik
Foliensatz 15 Michael Brinkmeier Technische Universität Ilmenau Institut für Theoretische Informatik Sommersemester 2009 TU Ilmenau Seite 1 / 16 Untere Schranken für das Vergleichsbasierte Sortieren TU
Mehr2. Felder (Arrays) 2.1 Suchen in Feldern. lineares Suchen: siehe Kapitel 1. Binäres Suchen. Vor.: Elemente (z.b. aufsteigend) sortiert
10 2.1 Suchen in Feldern 2. Felder (Arrays) lineares Suchen: siehe Kapitel 1 Binäres Suchen Vor.: Elemente (z.b. aufsteigend) sortiert ( später) Idee: Divide & Conquer (teile und herrsche) public
MehrGliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen
5. Compiler Gliederung 1. Struktur eines Compilers 2. Syntaxanalyse durch rekursiven Abstieg 3. Ausnahmebehandlung 4. Arrays und Strings 6. Sortieren und Suchen 1. Grundlegende Datenstrukturen 2. Bäume
MehrDefinition Ein Heap (priority queue) ist eine abstrakte Datenstruktur mit folgenden Kennzeichen:
HeapSort Allgemeines Sortieralgorithmen gehören zu den am häufigsten angewendeten Algorithmen in der Datenverarbeitung. Man hatte daher bereits früh ein großes Interesse an der Entwicklung möglichst effizienter
MehrÜbersicht. Datenstrukturen und Algorithmen. Übersicht. Heaps. Vorlesung 8: Heapsort (K6) Joost-Pieter Katoen. 7. Mai 2015
Datenstrukturen und Algorithmen Vorlesung 8: (K6) 1 Joost-Pieter Katoen Lehrstuhl für Informatik Software Modeling and Verification Group http://moves.rwth-aachen.de/teaching/ss-15/dsal/ 7. Mai 015 3 Joost-Pieter
MehrÜbersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)
Datenstrukturen und Algorithmen Vorlesung 9: (K7) Joost-Pieter Katoen Lehrstuhl für Informatik 2 Software Modeling and Verification Group http://www-i2.rwth-aachen.de/i2/dsal0/ Algorithmus 8. Mai 200 Joost-Pieter
MehrQuicksort ist ein Divide-and-Conquer-Verfahren.
. Quicksort Wie bei vielen anderen Sortierverfahren (Bubblesort, Mergesort, usw.) ist auch bei Quicksort die Aufgabe, die Elemente eines Array a[..n] zu sortieren. Quicksort ist ein Divide-and-Conquer-Verfahren.
MehrSuchen und Sortieren (Die klassischen Algorithmen)
Suchen und Sortieren (Die klassischen Algorithmen) Lineare Suche und Binäre Suche (Vorbedingung und Komplexität) Sortieralgorithmen (allgemein) Direkte Sortierverfahren (einfach aber langsam) Schnelle
MehrProf. Dr. Margarita Esponda
Algorithmen und Programmieren II Sortieralgorithmen imperativ Teil I Prof. Dr. Margarita Esponda Freie Universität Berlin Sortieralgorithmen Bubble-Sort Insert-Sort Selection-Sort Vergleichsalgorithmen
MehrAbschnitt: Algorithmendesign und Laufzeitanalyse
Abschnitt: Algorithmendesign und Laufzeitanalyse Definition Divide-and-Conquer Paradigma Divide-and-Conquer Algorithmen verwenden die Strategien 1 Divide: Teile das Problem rekursiv in Subproblem gleicher
MehrKapitel 8 Fortgeschrittene Sortieralgorithmen
Kapitel 8 Fortgeschrittene Sortieralgorithmen Zur Erinnerung: in Kapitel 6 Elementare Sortierverfahren Sortierverfahren, die auf Vergleichen von Werten basieren. Aufwand zum Sortieren von Feldern von n
MehrÜbung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 2017 Patrick Schäfer, Humboldt-Universität zu Berlin Agenda: Kürzeste Wege, Heaps, Hashing Heute: Kürzeste Wege: Dijkstra Heaps: Binäre Min-Heaps Hashing:
MehrAlgorithmen und Datenstrukturen 1-3. Seminar -
Algorithmen und Datenstrukturen 1-3. Seminar - Dominic Rose Bioinformatics Group, University of Leipzig Wintersemester 2009/10 Outline Spezielle Listen: Stacks, Queues Sortierverfahren 3. Übungsserie Wiederholung:
MehrÜbung Algorithmen I
Übung Algorithmen I 20.5.15 Christoph Striecks Christoph.Striecks@kit.edu (Mit Folien von Julian Arz, Timo Bingmann und Sebastian Schlag.) Roadmap Organisation Mergesort, Quicksort Dual Pivot Quicksort
MehrGrundlagen der Programmierung
Grundlagen der Programmierung Algorithmen und Datenstrukturen Die Inhalte der Vorlesung wurden primär auf Basis der angegebenen Literatur erstellt. Darüber hinaus sind viele Teile direkt aus der Vorlesung
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Prof. Martin Lercher Institut für Informatik Heinrich-Heine-Universität Düsseldorf Algorithmen und Datenstrukturen Teil 3 Suchen in Listen Version vom: 15. November 2016
MehrGrundlagen der Programmierung 2. Sortierverfahren
Grundlagen der Programmierung 2 Sortierverfahren Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 30. Mai 2006 Sortieren Ziel: Bringe Folge von Objekten in eine Reihenfolge
MehrUntere Schranke für allgemeine Sortierverfahren
Untere Schranke für allgemeine Sortierverfahren Prinzipielle Frage: wie schnell kann ein Algorithmus (im worst case) überhaupt sein? Satz: Zum einer Folge von n Keys mit einem allgemeinen Sortierverfahren
MehrSortieralgorithmen. Jan Pöschko. 18. Januar Problemstellung Definition Warum Sortieren?... 2
Jan Pöschko 18. Januar 2007 Inhaltsverzeichnis 1 Problemstellung 2 1.1 Definition................................... 2 1.2 Warum Sortieren?.............................. 2 2 Einfache Sortieralgorithmen
MehrSortieralgorithmen. Direkte Sortierverfahren & Shellsort, Quicksort, Heapsort. Vorlesung Algorithmen und Datenstrukturen 2 im SS 2004
Sortieralgorithmen Direkte Sortierverfahren & Shellsort, Quicksort, Heapsort Vorlesung Algorithmen und Datenstrukturen 2 im SS 2004 Prof. Dr. W. P. Kowalk Universität Oldenburg Algorithmen und Datenstrukturen
Mehr2 Sortieren. Beispiel: Es seien n = 8 und a = i : a i : ϕ(i) : a ϕ(i) :
2 Sortieren Das Sortieren einer Datenfolge ist eines der am leichtesten zu verstehenden und am häufigsten auftretenden algorithmischen Probleme. In seiner einfachsten Form besteht das Problem darin, eine
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen 11. Übung Verkettete Listen, Sortieren Insertionsort, Mergesort, Radixsort, Quicksort Clemens Lang Übungen zu AuD 19. Januar 2010 Clemens Lang (Übungen zu AuD) Algorithmen
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Prof. Martin Lercher Institut für Informatik Heinrich-Heine-Universität Düsseldorf Algorithmen und Datenstrukturen Teil 2 Sortieren Version vom: 7. Dezember 2016 1 / 94
MehrSortieralgorithmen. Selection Sort
intuitivster Suchalgorithmus Sortieralgorithmen Selection Sort In jedem Schritt wird das kleinste Element im noch unsortierten Array gesucht und ans Ende des bisher sortierten Teilarrays gehangen 3 1 4
MehrÜbungsblatt 1. f(n) = f(n) = O(g(n)) g(n) = O(f(n)) Zeigen oder widerlegen Sie: 3 n = Θ(2 n ) Aufgabe 1.2 Gegeben sei die folgende Funktion:
Übungsblatt 1 Aufgabe 1.1 Beweisen oder widerlegen Sie, dass für die im Folgenden definierte Funktion f(n) die Beziehung f(n) = Θ(n 4 ) gilt. Beachten Sie, dass zu einem vollständigen Beweis gegebenenfalls
Mehr8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.
8. A & D - Heapsort Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können. Genauer werden wir immer wieder benötigte Operationen durch Datenstrukturen unterstützen.
MehrÜbung Algorithmen I
Übung Algorithmen I 18.5.16 Lukas Barth lukas.barth@kit.edu (Mit Folien von Julian Arz, Timo Bingmann, Sebastian Schlag und Christoph Striecks) Roadmap Sortieren Kleine Wiederholung Visualisierungen Adaptives
MehrTutoraufgabe 1 (Sortieralgorithmus):
Prof. aa Dr. Ir. Joost-Pieter Katoen Datenstrukturen und Algorithmen SS Tutoriumslösung - Übung 4 (Abgabe 2..2) Christian Dehnert, Friedrich Gretz, Benjamin Kaminski, Thomas Ströder Tutoraufgabe (Sortieralgorithmus):
Mehrdamit hätten wir nach Ende der Schleife: "a[0 n-1] enthält nur Elemente aus a[0 n-1], aber in sortierter Reihenfolge".
Korrektheit Invariante: a[0 k-1] enthält nur Elemente aus a[0 k-1], aber in sortierter Reihenfolge Terminierung: Die Schleife endet mit k=n def insertionsort(a): for k in range( 1, len(a) ): while i >
MehrDatenstrukturen und Algorithmen
Datenstrukturen und Algorithmen VO 708.031 27.10.2011 stefan.klampfl@tugraz.at 1 Wiederholung Wir vergleichen Algorithmen anhand des ordnungsmäßigen Wachstums von T(n), S(n), Asymptotische Schranken: O-Notation:
MehrAlgo-Animation. Konstruktion der Partition: eigentliche Kunst / Arbeit bei Quicksort. Resultat: Partition A=A 1 WA 2 A 1 W A 2.
Algo-Animation Konstruktion der Partition: eigentliche Kunst / Arbeit bei Quicksort 1. Wahl eines Elementes W im Array (heißt Pivot-Element) 2. Suchen eines i von links mit A[i]>W 3. Suchen eines j von
MehrProgrammiertechnik II
2007 Martin v. Löwis Sortieren: Quicksort und Mergesort Charles Antony Richard Hoare 2007 Martin v. Löwis Geboren 11. 1. 1934 in Colombo (Sri Lanka) Studium in Oxford (Philosophie, Latein, Griechisch)
Mehr2.2 Allgemeine (vergleichsbasierte) Sortierverfahren
. Allgemeine (vergleichsbasierte) Sortierverfahren Vergleichsbaum: Der Aufbau des Verbleichsbaum ist für jeden Algorithmus und jede Eingabelänge n gleich. Jede Permutation der Eingabe, muss zu einem anderen
MehrSortierverfahren. Sortierverfahren für eindimensionale Arrays
Sortierverfahren Sortierverfahren Sortieren durch Einfügen Sortieren durch Auswählen Sortieren durch Vertauschen (Bubblesort) Quicksort Sortierverfahren für eindimensionale Arrays 1 Gegeben ist eine beliebige
MehrInformatik II, SS 2014
Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 11 (4.6.2014) Binäre Suchbäume II Algorithmen und Komplexität Binäre Suchbäume Binäre Suchbäume müssen nicht immer so schön symmetrisch sein
MehrProgrammiertechnik II
2007 Martin v. Löwis Priority Queues and Heapsort 2007 Martin v. Löwis 2 Priority Queue Abstrakter Datentyp Inhalt: Elemente mit Priorität Operationen: Einfügen: Angabe des Elements und seiner Priorität
Mehr11. Elementare Datenstrukturen
11. Elementare Datenstrukturen Definition 11.1: Eine dynamische Menge ist gegeben durch eine oder mehrer Mengen von Objekten sowie Operationen auf diesen Mengen und den Objekten der Mengen. Dynamische
MehrSortieren durch Mischen (Mergesort; John von Neumann 1945)
Sortieren durch Mischen (Mergesort; John von Neumann 1945) Gegeben folgendes Feld der Größe 10. 3 8 9 11 18 1 7 10 22 32 Die beiden "Hälften" sind hier bereits vorsortiert! Wir können das Feld sortieren,
MehrInformatik II, SS 2014
Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 4 (7.5.2014) Asymptotische Analyse, Sortieren IV Algorithmen und Komplexität Erfahrungen 1. Übung C++ / Java sind komplett ungewohnt Struktur
MehrBeispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5
Robert Elsässer Paderborn, den 15. Mai 2008 u.v.a. Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5 AUFGABE 1 (6 Punkte): Nehmen wir an, Anfang bezeichne in einer normalen
Mehr2.3.1 Einleitung Einfache Sortierverfahren Höhere Sortierverfahren Komplexität von Sortierverfahren Spezielle Sortierverfahren
2.3 Sortieren 2.3.1 Einleitung 2.3.2 Einfache Sortierverfahren 2.3.3 Höhere Sortierverfahren 2.3.4 Komplexität von Sortierverfahren 2.3.5 Spezielle Sortierverfahren 1 Selection-Sort Idee: Suche kleinstes
MehrVorlesung Datenstrukturen
Vorlesung Datenstrukturen Heaps Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 469 Prioritätswarteschlange Problem Häufig ist das Prinzip einer einfachen Warteschlangen-Datenstruktur
MehrData Structures and Algorithm Design
- University of Applied Sciences - Data Structures and Algorithm Design - CSCI 340 - Friedhelm Seutter Institut für Angewandte Informatik Contents 1. Analyzing Algorithms and Problems 2. Data Abstraction
MehrPro Informatik 2009: Objektorientierte Programmierung Tag 17. Marco Block-Berlitz, Miao Wang Freie Universität Berlin, Institut für Informatik
Tag 17 Marco Block-Berlitz, Miao Wang Freie Universität Berlin, Institut für Informatik 08.09.2009 Agenda Tag 16 Datenstrukturen Abstrakte Datentypen, ADT Folge: Stack, Queue, Liste, ADT Menge: Bäume:
MehrDenition: Rang eines Elements e einer Folge s = Position von e in sort(s) (angefangen bei 1). Frage: warum ist r nicht notwendig eindeutig?
207 Auswahl (Selection) Denition: Rang eines Elements e einer Folge s = Position von e in sort(s) (angefangen bei 1). Frage: warum ist r nicht notwendig eindeutig? // return an element of s with rank k
MehrÜbung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 2017 Patrick Schäfer, Humboldt-Universität zu Berlin Agenda 1. Sortierte Listen 2. Stacks & Queues 3. Teile und Herrsche Nächste Woche: Vorrechnen (first-come-first-served)
Mehr6. Sich selbst organisierende Datenstrukturen
6. Sich selbst organisierende Datenstrukturen 6.1 Motivation einfach, wenig Verwaltungsoverhead effizient im amortisierten Sinn EADS 6.1 Motivation 201/598 6.2 Sich selbst organisierende lineare Listen
Mehrlim log 2n n = > 0 Da es einen Limes gibt, gibt es auch einen Limes inferior, der gleich diesem Limes ist.
Prof. aa Dr. Ir. Joost-Pieter Katoen Christian Dehnert, Jonathan Heinen, Thomas Ströder, Sabrina von Styp Aufgabe 1 (O-Notation): Beweisen oder widerlegen Sie die folgenden Aussagen: (3 + 3 + 4 = 10 Punkte)
Mehrf 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2
Prof. aa Dr. E. Ábrahám Datenstrukturen und Algorithmen SS Lösung - Präsenzübung.05.0 F. Corzilius, S. Schupp, T. Ströder Aufgabe (Asymptotische Komplexität): (6 + 0 + 6 = Punkte) a) Geben Sie eine formale
MehrAbstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.
Abstrakte Datentypen und Datenstrukturen/ Einfache Beispiele Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken. Datenstruktur (DS): Realisierung
MehrSortierverfahren für Felder (Listen)
Sortierverfahren für Felder (Listen) Generell geht es um die Sortierung von Daten nach einem bestimmten Sortierschlüssel. Es ist auch möglich, daß verschiedene Daten denselben Sortierschlüssel haben. Es
Mehr7 Weitere Baumstrukturen und Heapstrukturen
7 Weitere Baumstrukturen und Heapstrukturen Man kann kurze Suchzeiten in Baumstrukturen erreichen durch Rebalancierung bei Einfügungen und Löschungen (AVL Bäume, gewichtsbalancierte Bäume, Bruderbäume,
MehrBuild-Max-Heap. Build-Max-HeappAq. Satz Nach Ablauf von Build-Max-Heap ist A ein Heap. Build-Max-Heap hat Laufzeit Opnq.
C. Komusiewicz 3.1 Sortieren und Selektion: Heap-Sort 45 Build-Max-Heap Aufgabe: Baue unsortiertes Array A der Länge n in einen Max-Heap um Idee: Blätter stehen in Artn{2u ` 1..ns und sind bereits zu Beginn
MehrKapitel 9. Komplexität von Algorithmen und Sortieralgorithmen
Kapitel 9 Komplexität von Algorithmen und Sortieralgorithmen Arrays 1 Ziele Komplexität von Algorithmen bestimmen können (in Bezug auf Laufzeit und auf Speicherplatzbedarf) Sortieralgorithmen kennenlernen:
MehrInformatik II Vorlesung am D-BAUG der ETH Zürich
Informatik II Vorlesung am D-BAUG der ETH Zürich Vorlesung 9, 2.5.2016 [Nachtrag zu Vorlesung : Numerische Integration, Zusammenfassung Objektorientierte Programmierung] Dynamische Datenstrukturen II:
MehrInformatik II Sortieralgorithmen
lausthal Informatik II Sortieralgorithmen lausthal University, ermany zach@in.tu-clausthal.de Motivation Preprocessing fürs Suchen Sind für kommerzielle Anwendungen häufig die Programmteile, die die meiste
Mehr7. Übung zu Algorithmen I 1. Juni 2016
7. Übung zu Algorithmen I 1. Juni 2016 Lukas Barth lukas.barth@kit.edu (mit Folien von Lisa Kohl) Roadmap Ganzzahliges Sortieren mit reellen Zahlen Schnellere Priority Queues Bucket Queue Radix Heap Organisatorisches
Mehr4. Sortierverfahren. Anwendungen
4. Sortierverfahren Einführung Elementare Sortierverfahren - Sortieren durch direktes Auswählen (Straight Selection Sort) - Sortieren durch Vertauschen (Bubble Sort) - Sortieren durch Einfügen (Insertion
Mehr4. Sortierverfahren. Anwendungen. Sortierverfahren. Sortierverfahren (2)
4. Sortierverfahren Einführung Elementare Sortierverfahren - Sortieren durch direktes Auswählen (Straight Selection Sort) - Sortieren durch Vertauschen (Bubble Sort) - Sortieren durch Einfügen (Insertion
MehrInformatik II Prüfungsvorbereitungskurs
Informatik II Prüfungsvorbereitungskurs Tag 4, 9.6.2017 Giuseppe Accaputo g@accaputo.ch 1 Aufbau des PVK Tag 1: Java Teil 1 Tag 2: Java Teil 2 Tag 3: Algorithmen & Komplexität Tag 4: Dynamische Datenstrukturen,
MehrInformatik II, SS 2016
Informatik II - SS 2016 (Algorithmen & Datenstrukturen) Vorlesung 10 (27.5.2016) Binäre Suchbäume II Algorithmen und Komplexität Zusätzliche Dictionary Operationen Dictionary: Zusätzliche mögliche Operationen:
MehrErster Sortier-Algorithmus: Bubblesort
Erster Sortier-Algorithmus: Bubblesort Die Idee des Algo: Vergleiche von links nach rechts jeweils zwei Nachbarelemente und vertausche deren Inhalt, falls sie in der falschen Reihenfolge stehen; Wiederhole
MehrVorlesung Informatik 2 Algorithmen und Datenstrukturen. (25 Sortieren vorsortierter Daten)
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (25 Sortieren vorsortierter Daten) 1 Untere Schranke für allgemeine Sortierverfahren Satz Zum Sortieren einer Folge von n Schlüsseln mit einem allgemeinen
MehrPriority Queues and Heapsort
19. ovember 2012 Prioritätswarteschlangen und Priority Queues and Ferd van denhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software ngineering 19. ovember 2012 D/FHTBM Priority Queues and 19.
MehrKapitel 9. Komplexität von Algorithmen und Sortieralgorithmen
1 Kapitel 9 Komplexität von Algorithmen und Sortieralgorithmen Ziele 2 Komplexität von Algorithmen bestimmen können (in Bezug auf Laufzeit und auf Speicherplatzbedarf) Sortieralgorithmen kennenlernen:
MehrAlgorithmen und Datenstrukturen
1 Algorithmen und Datenstrukturen Wintersemester 01/13 6. Vorlesung Prioritäten setzen Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I Guten Morgen! Tipps für unseren ersten Test am 0. November: Lesen
MehrKurs 1663 Datenstrukturen" Musterlösungen zur Klausur vom Seite 1. Musterlösungen zur Hauptklausur Kurs 1663 Datenstrukturen 15.
Kurs 1663 Datenstrukturen" Musterlösungen zur Klausur vom 15.08.98 Seite 1 Musterlösungen zur Hauptklausur Kurs 1663 Datenstrukturen 15. August 1998 Kurs 1663 Datenstrukturen" Musterlösungen zur Klausur
Mehr1 Raumwechsel: Gr. 15 (Do 10-12, F-235) ab sofort in G Studie zum Arbeitsverhalten von Studierenden unter Leitung
Organisatorisches Algorithmen und Datenstrukturen Kapitel 3: Divide & Conquer Frank Heitmann heitmann@informatik.uni-hamburg.de 1 Raumwechsel: Gr. 15 (Do 10-12, F-235) ab sofort in G-021. 2 Studie zum
MehrSuchen und Sortieren Sortieren. Heaps
Suchen und Heaps (Folie 245, Seite 63 im Skript) 3 7 21 10 17 31 49 28 14 35 24 42 38 Definition Ein Heap ist ein Binärbaum, der die Heapeigenschaft hat (Kinder sind größer als der Vater), bis auf die
MehrAufgabe (Schreibtischtest, Algorithmenanalyse)
Aufgabe (Schreibtischtest, Algorithmenanalyse) Führen Sie einen Schreibtischtest für den Algorithmus Positionsort für das folgende Eingabe-Array durch. Geben Sie nach jedem Durchlauf der for-schleife mit
MehrTermine für Übungstests. Kap. 3 Sortieren HeapSort ff Priority Queues. Motivation. Überblick. Analyse SiftDown
Kap. Sortieren..5 HeapSort ff..6 Priority Queues Professor Dr. Vorlesung am Do 7.5. entfällt wegen FVV um Uhr Lehrstuhl für Algorithm Engineering, LS Fakultät für nformatik, TU Dortmund 7. VO DAP SS 009
Mehr