Algorithms & Data Structures 2

Größe: px
Ab Seite anzeigen:

Download "Algorithms & Data Structures 2"

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

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

Mehr

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 9. Sortieren

UE 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

Mehr

Kapitel 6 Elementare Sortieralgorithmen

Kapitel 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

Mehr

Das Suchproblem. Gegeben Menge von Datensätzen. Beispiele Telefonverzeichnis, Wörterbuch, Symboltabelle

Das 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.

Mehr

Kap. 3: Sortieren. Überblick. Unser Sortierproblem. Motivation. Laufzeitmessung. Warum soll ich hier bleiben? Sortierverfahren sind WICHTIG!!!

Kap. 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

Mehr

Programmiertechnik II

Programmiertechnik 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

Mehr

Interne Sortierverfahren

Interne 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

Mehr

Algorithmen und Datenstrukturen 1

Algorithmen 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

Mehr

Suchen und Sortieren

Suchen 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

Mehr

JAVA - Suchen - Sortieren

JAVA - 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

Mehr

Grundlegende Sortieralgorithmen

Grundlegende 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.

Mehr

Programmieren I. Kapitel 7. Sortieren und Suchen

Programmieren 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

Mehr

7. Sortieren Lernziele. 7. Sortieren

7. 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

Mehr

Algorithmen und Datenstrukturen Heapsort

Algorithmen 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

Mehr

Algorithmen I. Tutorium 1-3. Sitzung. Dennis Felsing

Algorithmen 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 Ü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

Mehr

8.1.3 Operation Build-Max-Heap Operation zur Konstruktion eines Heaps Eingabe: Feld A[1..n], n = länge(a) BUILD-MAX-HEAP (A)

8.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

Mehr

Technische Universität München

Technische 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

Mehr

Heapsort / 1 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]

Heapsort / 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

Mehr

Tutoraufgabe 1 (Sortieren): Lösung: Datenstrukturen und Algorithmen SS14 Lösung - Übung 4

Tutoraufgabe 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 Ü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

Mehr

Algorithmen 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 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

Mehr

Algorithmen 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 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

Mehr

Algorithmen und Datenstrukturen 1

Algorithmen 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

Mehr

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

Alle 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

Mehr

4. Sortieren 4.1 Vorbemerkungen

4. 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

Mehr

Algorithmen und Datenstrukturen. Kapitel 3: Sortierverfahren. Skript zur Vorlesung. Algorithmen und Datenstrukturen

Algorithmen 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. 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:

Mehr

Datenstrukturen und Algorithmen

Datenstrukturen 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

Mehr

Algorithmen und Datenstrukturen SS09. Foliensatz 15. Michael Brinkmeier. Technische Universität Ilmenau Institut für Theoretische Informatik

Algorithmen 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

Mehr

2. Felder (Arrays) 2.1 Suchen in Feldern. lineares Suchen: siehe Kapitel 1. Binäres Suchen. Vor.: Elemente (z.b. aufsteigend) sortiert

2. 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

Mehr

Gliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen

Gliederung. 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

Mehr

Definition Ein Heap (priority queue) ist eine abstrakte Datenstruktur mit folgenden Kennzeichen:

Definition 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

Ü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)

Ü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

Mehr

Quicksort ist ein Divide-and-Conquer-Verfahren.

Quicksort 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.

Mehr

Suchen und Sortieren (Die klassischen Algorithmen)

Suchen 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

Mehr

Prof. Dr. Margarita Esponda

Prof. 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

Mehr

Abschnitt: Algorithmendesign und Laufzeitanalyse

Abschnitt: 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

Mehr

Kapitel 8 Fortgeschrittene Sortieralgorithmen

Kapitel 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 Ü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:

Mehr

Algorithmen und Datenstrukturen 1-3. Seminar -

Algorithmen 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 Ü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

Mehr

Grundlagen der Programmierung

Grundlagen 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

Mehr

Algorithmen und Datenstrukturen

Algorithmen 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

Mehr

Grundlagen der Programmierung 2. Sortierverfahren

Grundlagen 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

Mehr

Untere Schranke für allgemeine Sortierverfahren

Untere 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

Mehr

Sortieralgorithmen. Jan Pöschko. 18. Januar Problemstellung Definition Warum Sortieren?... 2

Sortieralgorithmen. 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

Mehr

Sortieralgorithmen. 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 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

Mehr

2 Sortieren. Beispiel: Es seien n = 8 und a = i : a i : ϕ(i) : a ϕ(i) :

2 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

Mehr

Algorithmen und Datenstrukturen

Algorithmen 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

Mehr

Algorithmen und Datenstrukturen

Algorithmen 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

Mehr

Sortieralgorithmen. Selection Sort

Sortieralgorithmen. 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. 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

Mehr

8. 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. 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 Ü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

Mehr

Tutoraufgabe 1 (Sortieralgorithmus):

Tutoraufgabe 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):

Mehr

damit hätten wir nach Ende der Schleife: "a[0 n-1] enthält nur Elemente aus a[0 n-1], aber in sortierter Reihenfolge".

damit 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 >

Mehr

Datenstrukturen und Algorithmen

Datenstrukturen 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:

Mehr

Algo-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. 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

Mehr

Programmiertechnik II

Programmiertechnik 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)

Mehr

2.2 Allgemeine (vergleichsbasierte) Sortierverfahren

2.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

Mehr

Sortierverfahren. Sortierverfahren für eindimensionale Arrays

Sortierverfahren. 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

Mehr

Informatik II, SS 2014

Informatik 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

Mehr

Programmiertechnik II

Programmiertechnik 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

Mehr

11. Elementare Datenstrukturen

11. 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

Mehr

Sortieren durch Mischen (Mergesort; John von Neumann 1945)

Sortieren 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,

Mehr

Informatik II, SS 2014

Informatik 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

Mehr

Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5

Beispiellö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

Mehr

2.3.1 Einleitung Einfache Sortierverfahren Höhere Sortierverfahren Komplexität von Sortierverfahren Spezielle Sortierverfahren

2.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

Mehr

Vorlesung Datenstrukturen

Vorlesung 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

Mehr

Data Structures and Algorithm Design

Data 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

Mehr

Pro Informatik 2009: Objektorientierte Programmierung Tag 17. Marco Block-Berlitz, Miao Wang Freie Universität Berlin, Institut für Informatik

Pro 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:

Mehr

Denition: Rang eines Elements e einer Folge s = Position von e in sort(s) (angefangen bei 1). Frage: warum ist r nicht notwendig eindeutig?

Denition: 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 Ü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)

Mehr

6. Sich selbst organisierende Datenstrukturen

6. 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

Mehr

lim log 2n n = > 0 Da es einen Limes gibt, gibt es auch einen Limes inferior, der gleich diesem Limes ist.

lim 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)

Mehr

f 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

f 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

Mehr

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.

Abstrakter 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

Mehr

Sortierverfahren für Felder (Listen)

Sortierverfahren 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

Mehr

7 Weitere Baumstrukturen und Heapstrukturen

7 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,

Mehr

Build-Max-Heap. Build-Max-HeappAq. Satz Nach Ablauf von Build-Max-Heap ist A ein Heap. Build-Max-Heap hat Laufzeit Opnq.

Build-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

Mehr

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Kapitel 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:

Mehr

Informatik II Vorlesung am D-BAUG der ETH Zürich

Informatik 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:

Mehr

Informatik II Sortieralgorithmen

Informatik 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

Mehr

7. Übung zu Algorithmen I 1. Juni 2016

7. Ü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

Mehr

4. Sortierverfahren. Anwendungen

4. 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

Mehr

4. Sortierverfahren. Anwendungen. Sortierverfahren. Sortierverfahren (2)

4. 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

Mehr

Informatik II Prüfungsvorbereitungskurs

Informatik 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,

Mehr

Informatik II, SS 2016

Informatik 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:

Mehr

Erster Sortier-Algorithmus: Bubblesort

Erster 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

Mehr

Vorlesung Informatik 2 Algorithmen und Datenstrukturen. (25 Sortieren vorsortierter Daten)

Vorlesung 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

Mehr

Priority Queues and Heapsort

Priority 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.

Mehr

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Kapitel 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:

Mehr

Algorithmen und Datenstrukturen

Algorithmen 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

Mehr

Kurs 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 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

Mehr

1 Raumwechsel: Gr. 15 (Do 10-12, F-235) ab sofort in G Studie zum Arbeitsverhalten von Studierenden unter Leitung

1 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

Mehr

Suchen und Sortieren Sortieren. Heaps

Suchen 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

Mehr

Aufgabe (Schreibtischtest, Algorithmenanalyse)

Aufgabe (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

Mehr

Termine für Übungstests. Kap. 3 Sortieren HeapSort ff Priority Queues. Motivation. Überblick. Analyse SiftDown

Termine 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