Sortieren durch Mischen (Mergesort; John von Neumann 1945)
|
|
- Christina Tiedeman
- vor 7 Jahren
- Abrufe
Transkript
1 Sortieren durch Mischen (Mergesort; John von Neumann 1945) Gegeben folgendes Feld der Größe Die beiden "Hälften" sind hier bereits vorsortiert! Wir können das Feld sortieren, indem wir jeweils von der ersten oder der zweiten Hälfte ein Element wegnehmen, je nachdem, welches "dran" ist,... und die weggenommenen Elemente in ein anderes Feld kopieren Mischen (Merge) Vorsortierte Teilreihen Falls die beiden Hälften nicht schon sortiert sind, dann müssen sie eben vorher sortiert werden. Wie? Durch Mischen der jeweiligen Hälften (also Viertel). Und wenn die auch nicht schon sortiert sind? Dann werden eben wiederum die jeweiligen Hälften (also Achtel) gemischt, usw. bis man bei Feldern der Größe Eins angelangt ist und die sind ja stets sortiert. Mergesort beruht auf dem "Teile und herrsche" Prinzip
2 Mergesort Mergesort bei der Arbeit algorithm mergesort (F) -> FS Eingabe: eine zu sortierende Folge F Ausgabe: eine sortierte Folge FS if F einelementig then return F else teile F in der Mitte in F1 und F2; F1:= mergesort(f1); Rekursion F2:= mergesort (F2); F:= merge(f1,f2); fi return F;
3 Implementierung in C++ algorithm mergesort (F) -> FS Eingabe: eine zu sortierende Folge F Ausgabe: eine sortierte Folge FS if F einelementig then return F else teile F in der Mitte in F1 und F2; F1:= mergesort(f1); F2:= mergesort (F2); F:= merge(f1,f2); fi return F; void mergesort(int f[],int from,int to ) { // Eingabe: eine zu sortierende Folge f // Ausgabe: eine sortierte Folge fs if (from+1 == to) // einelementig return; else int mid = (from+to)/2; // teile mergesort(f, from, mid); mergesort(f, mid, to); merge(f, from, mid, to); return;
4 Algorithmus merge in Pseudocode procedure merge (F1,F2) -> F Eingabe: zwei zu sortierende Folgen F1, F2 Ausgabe: eine sortierte Folge F F:= leere Folge; while F1 oder F2 nicht leer do Entferne das kleinere der Anfangselemente aus F1 bzw. F2 Füge dieses Element an F an od; Füge die verbliebene nichtleere Folge F1 oder F2 an F an; return F; void merge( int f[], int from, int mid, int to ) { /* Eingabe: 2 Folgen F1:=F[from...mid), F2:=F[mid...to) */ Ausgabe: eine sortierte Folge F vector<int> b; // temporary field b int i1 = from; // next element in F1 int i2 = mid ; // next element in F2 while (i1 < mid && i2 < to) { if (a[i1] < f[i2]) b.push_back(f[i1++]); else b.push_back(f[i2++]); while (i1<mid) b.push_back(f[i1++]); while (i2 < to) b.push_back(f[i2++]); // copy back from the temporary field b for (int j = 0; j < b.size(); j++) f[from + j] = b[j]; return;
5 Mergesort - Komplexität und Eigenschaften void mergesort(int f[],int from,int to ) { if (from+1 == to) return; int mid = (from+to)/2; // sort the first and the second half mergesort(f, from, mid); mergesort(f, mid, to); merge(f, from, mid, to); T(N/2) T(N/2) 3N gesucht: T(N) =? Merge: je Element 1Vergleich 1 Kopieren in Hilfsarray 1 zurück kopieren = 3 N T(2 0 ) = 0 T(2 1 ) = 2 T(2 0 ) = T(2 2 ) = 2 T(2 1 ) = 2(3 2 1 ) = T(2 3 ) = 2 T(2 2 ) = 2 ( ) = T(2 4 ) = 2 T(2 3 ) = 2 ( ) = T(2 k ) = 3 2 k k T(N) 3 N log 2 N Lösung T(N) = 2 T(N/2) + 3 N Eigenschaften Mergesort Zeitkomplexität: Sensibel bzgl. Eingabevertlg: In-situ-Verfahren: Zus.Speicherbedarf: stabil: O(NlogN) nein nein N ja
6 Sortieren durch rekursives Zerlegen - Quick-Sort Quicksort (Nach C.A.R. Hoare, 1960) zerlegt, wie Mergesort, eine Folge rekursiv in Teilfolgen (Prinzip "Teile u. herrsche"), vermeidet dabei aber den Mischvorgang und benötigt dadurch weniger Resourcen Grundidee In einem Feld wird willkürlich ein Referenzelement (Pivot-Element) ausgesucht Alle anderen Elemente werden neu angeordnet: Größere Elemente rechts und kleinere bzw. gleich grosse Elemente links vom Referenzelement. Dadurch wird das Trennelement an die richtige Position gebracht. Danach wird die gleiche Zerlegung rekursiv auf das linke und rechte Teilfeld angewendet, d.h. wieder das Referenzelement aus diesen Teilfeldern an die richtige Stelle gebracht. Dies wird solange wiederholt, bis es nichts mehr zu zerlegen gibt: 0 oder 1 Element im Teilfeld! Zum Schluss ist das Feld vollständig sortiert. Zerlegen des Feldes (partition) Pivot-Element (willkürlich immer rechts aussen) Feld PE vorher linkes Teilfeld PE rechtes Teilfeld nachher
7 Quicksort - Pseudocode algorithm QuickSort( f, li, re ) Eingabe: Eine zu sortierende Folge f, die untere und obere Grenze if re>li+1 then Bestimme Position p des Pivot-Elements pn:= Zerlege(f, li, re, p); QuickSort( f, li, pn); QuickSort( f, pn+1, re ); fi Der Zerlege- Algorithmus (rechts) leistet die eigentliche Sortierarbeit algorithm Zerlege (F,li,re,p) -> pn Eingabe: zu zerlegende Folge F, untere und obere Grenze li, re Position p des Pivot-Elements pn:=li; // neue, vorläufige Position des Pivot-Elements pe:=f[p]; Tausche F[p] und F[re-1]; // Pivot-Element aus dem Arbeitsbereich nehmen for i:=li to re-2 do if F[i]<=pe then Tausche F[pn] und F[i]; pn:=pn+1; fi od Tausche F[re-1] und F[pn]; //Pivot-Element an seine endgültige Stelle return pn;
8 Quicksort bei der Arbeit Pivot-Element (willkürlich immer rechts aussen) linkes Teilfeld Feld PE vorher PE rechtes Teilfeld algorithm Zerlege (F,li,re,p) -> pn Eingabe: zu zerlegende Folge F, untere und obere Grenze li, re Position p des Pivot-Elements pn:=li; // neue, vorläufige Position des PE pe:=f[p]; Tausche F[p] und F[re-1]; for i:=li to re-2 do if F[i]<=pe then Tausche F[pn] und F[i]; pn:=pn+1; fi od Tausche F[re-1] und F[pn]; return pn; nachher Ebene 0 Ebene 1 Ebene 2 Ebene
9 Eigenschaften von Quicksort Quicksort ist ein Teile-und-Herrsche-Verfahren. Verarbeitet Daten "in situ" Ist nicht stabil benötigt im ungünstigsten Fall (=bereits sortiert) ca. N 2 /2 Vergleiche O(N 2 ) Im Idealfall (Halbierung der Teilfelder mit jeder Rekursion) O(N logn) Pivot-Element ist stets Median des Teilfelds nach dem Zerlegen Pivot-Element zufällig 1.39 O(NlogN) also ca. 40% schlechter als Idealfall Zuviel Overhead für kleine Teilfelder Es gibt viele Varianten
10 Sortieralgorithmen der STL STL stellt 3 generische Sortieralgorithmen zur Verfügung: sort, stable_sort und partial_sort. Alle sind als Funktions-Template typunabhängig implementiert. Vorbedingung: physikalisch sequentielle Container (z.b C-Field, string, vector, ) Verwendete Ordnungsrelation: operator< für den Elementtyp (default) oder benutzerdefiniert (Predicate-Objekt; siehe PG2) oder Predicate-Funktion Eigenschaft Zeitkomplexität sort partial_sort stable_sort O(N log N) bis O(N 2 ) O(N log N) O(N log N) bis O(N (log N) 2 ) Speicherkomplexität O(log N) O(1) O(N) in-situ ja ja ja Stabilität nein nein ja Hybrid-Sort (mit Quicksort) heap-sort- Prinzip merge-sort- Prinzip stable_sort ist etwa 40% langsamer als sort
11 Anwendung zu std::sort - Aufsteigend sortieren #include <iostream> #include <algorithm> #include "Time.h" using namespace std; void main() { const int MAX = 10; int iarr[max]; for( int i=0; i<max; ++i ) iarr[i] = i; random_shuffle( &iarr[0], &iarr[max] ); for( int i=0; i<max; ++i ) cout << iarr[i] << ' '; cout << endl; std::sort( &iarr[0], &iarr[max] ); for( int i=0; i<max; ++i ) cout << iarr[i] << ' '; cout << endl; unsortiert 17:05:44 01:27:01 14:55:11 15:36:27 09:02:24 21:22:52 23:38:56 11:06:47 16:09:18 19:19:47 // Adresse des ersten bzw. past-the-end Elements sortiert 01:27:01 09:02:24 11:06:47 14:55:11 15:36:27 16:09:18 17:05:44 19:19:47 21:22:52 23:38:56 Sortieren eines int-c-arrays Rational fractions[max]; for(int i=0; i<max; ++i ) fractions[i] = Rational( rand()%2000, rand()% ); for(int i=0; i<max_i; ++i ) { cout << fractions[i] << endl; cout << endl; std::sort( &fractions[0], &fractions[max_i] ); Sortieren eines Rational-C-Arrays for(int i=0; i<max; ++i ) {cout << fractions[i] << endl; cout << endl; Die Aufrufsyntax für sort und stable_sort ist identisch
12 Absteigend sortieren Alle Sortieralgorithmen brauchen eine Sortierhilfe. Diese ist im Standardfall (aufsteigende Sortierung) der '<'-Operator (s. Beispiel) Standardfall: Aufsteigende Sortierung //Sortieren im Bereich [from,to) void selectionsort( int a[], int from, int to) { int i, j, min; for( i = from; i < to ; ++i) { min = i; for( j=i+1; j < to; ++j) if( a[j] < a[min] ) min = j; swap( a[i], a[min] ); Universelle Sortieralgorithmen verwenden nicht '<' oder '>' sondern eine Vergleichsfunktion (z.b. compare), die ein Vergleichsergebnis vom Typ bool liefert (Predicate-Funktion) bool compare( int a1, int a2 ) { return (a1>a2); Absteigende Sortierung //Sortieren im Bereich [from,to) void selectionsort( int a[], int from, int to) { int i, j, min; max; for( i = from; i < to ; ++i) { min max = i; i; for( j=i+1; j < to; ++j) if( a[j] < > a[min] a[max] )) min max = = j; j; swap( a[i], a[min] a[max] ); ); //Sortieren im Bereich [from,to) void selectionsort( int a[], int from, int to) { int i, j, sel; for( i = from; i < to ; ++i) { sel = i; for( j=i+1; j < to; ++j) if( compare(a[j], a[sel]) ) sel = j; swap( a[i], a[sel] );
13 Anwendung zu std::sort - aufsteigend bzw. absteigend sortieren Es gibt mehrere Möglichkeiten ein Predicate an einen Algorithmus zu übergeben. Die Details werden erst in PG2 besprochen. Hier soll nur die Anwendung gezeigt werden. #include <iostream> #include <algorithm> #include "Rational.h" using namespace std; Gleiches Beispiel wie zuvor! Predicate-Funktionen bool less(const Rational& r1, const Rational& r2 ) { return (r1<r2); bool greater less(const Rational& r1, const Rational& r2 ) { return (r2<r1); void main() { const int MAX = 10; Hier werden nur die Namen der Predicate-Funktionen übergeben Rational fractions[max]; for( int i=0; i<max; ++i ) fractions[i] = Rational().setRandom(0,1); random_shuffle( &fractions[0], &fractions[max] ); for ( i=0; i<max; ++i ) cout << fractions[i] << ' '; cout << endl; std::sort( &fractions[0], &fractions[max], less ); for ( i=0; i<max; ++i ) cout << fractions[i] << ' '; cout << endl; std::sort( &fractions[0], &fractions[max], greater ); for ( i=0; i<max; ++i ) cout << fractions[i] << ' '; cout << endl; Aufsteigend sortieren Absteigend sortieren
14 Vergleich gemessener Laufzeiten N BubbleSort ms ms ms 45 min 76 h InsertionSort ms ms 6081 ms 10 min 17 h SelectionSort ms ms ms 20 min 33 h Mergesort ms ms ms ms ms Heapsort ms ms ms 313 ms 6451 ms Quicksort ms ms ms ms 1823 ms std::sort ms ms ms ms 2249ms Komplexität stabil in situ O(N 2 ) O(N 2 ) O(N 2 ) - O(N logn) - O(N logn) - O(N logn) - O(N logn) - Plattform: Intel X86 Prozessor, 1,66 GHz, Release-Konfiguration
15 Aufgabe: vector-container mit Rational-Objekten sortieren Lösen Sie die Aufgabe "Sortieren eines Rational-Feldes" (siehe oben) mit Hilfe eines vectors
Programmieren - Such- und Sortieralgorithmen -Komplexität von Algorithmen
Programmieren - Such- und Sortieralgorithmen -Komplexität von Algorithmen Reiner Nitsch 8417 r.nitsch@fbi.h-da.de Such-Algorithmen Basis ist die folgende Klasse class Array { enum {MAX=1000; int v[max];
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
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
MehrAlgorithmen und Datenstrukturen (Beispiele in C++)
Algorithmen und Datenstrukturen (Beispiele in C++) Reiner Nitsch 847 reiner.nitsch@h-da.de Such-Algorithmen Lineare Suche Prinzip der linearen Suche: Betrachte jedes Element im Suchbereich Vergleiche jedes
MehrVorlesung Datenstrukturen
Vorlesung Datenstrukturen Sortieren von Feldern (2) Effiziente Sortieralgorithmen Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 124 Quicksort Dr. Frank Seifert Vorlesung Datenstrukturen
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
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
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
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
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
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)
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 2017 Patrick Schäfer, Humboldt-Universität zu Berlin Agenda: Sortierverfahren 1. Schreibtischtest 2. Stabilität 3. Sortierung spezieller Arrays 4. Untere
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):
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
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
MehrGrundlegende Sortieralgorithmen
Grundlegende Sortieralgorithmen Martin Wirsing in Zusammenarbeit mit Michael Barth, Philipp Meier und Gefei Zhang 01/05 2 Ziele Grundlegende Sortieralgorithmen auf Reihungen kennen lernen 3 Klassifizierung
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
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
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
MehrInformatik II, SS 2016
Informatik II - SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 2 (22.4.2016) Sortieren II Algorithmen und Komplexität SelectionSort: Programm Schreiben wir doch das gleich mal als Java/C++ - Programm
MehrElementare Sortierverfahren
Algorithmen und Datenstrukturen I Elementare Sortierverfahren Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 18.03.2018 18:16 Inhaltsverzeichnis Sortieren.......................................
Mehr8. 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
MehrHeapsort, Quicksort, Mergesort. 8. Sortieren II
209 Heapsort, Quicksort, Mergesort 8. Sortieren II 210 8.1 Heapsort [Ottman/Widmayer, Kap. 2.3, Cormen et al, Kap. 6] 211 Heapsort Inspiration von Selectsort: Schnelles Einfügen Inspiration von Insertionsort:
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
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
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.
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
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
MehrHier wird die Verwendung der Standard Template Library (kurz STL) kurz beschrieben. Inhalt 1.Verwendung der STL Grundlagen...
STL Die C++ Bibliothek ist eine Sammlung von standardisierten Klassen und Containern. Zu beachten ist, dass nicht jede C++ Implementierung den ganzen Umfang der Standardbibliothek realisiert hat. Hier
MehrSuchen und Sortieren OOPM, Ralf Lämmel
Unterhaltet Euch mal mit Euren Großeltern wie Sortieren früher funktionierte! Suchen und Sortieren OOPM, Ralf Lämmel 2 Das Such-Problem Eingabe: Ein Feld a mit n Elementen vom Typ t. Ein Wert x vom Typ
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
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
MehrComputergrundkenntnisse und Programmieren, WS 07/08, Übung 11: Klassen der Standardbibliothek 2
Computergrundkenntnisse und Programmieren, WS 07/08, Übung 11: Klassen der Standardbibliothek 2 Neben vector ist list die zweite wichtige Containerklasse. Um unsere Kenntnisse von Containerklassen zu erweitern,
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
MehrKapitel 2. Weitere Beispiele Effizienter Algorithmen
Kapitel 2 Weitere Beispiele Effizienter Algorithmen Sequentielle Suche Gegeben: Array a[1..n] Suche in a nach Element x Ohne weitere Zusatzinformationen: Sequentielle Suche a[1] a[2] a[3] Laufzeit: n Schritte
MehrÜbung Datenstrukturen. Sortieren
Übung Datenstrukturen Sortieren Aufgabe 1 Gegeben sei nebenstehender Sortieralgorithmus für ein Feld a[] ganzer Zahlen mit N Elementen: a) Um welches Sortierverfahren handelt es sich? b) Geben Sie möglichst
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
MehrAbschnitt 19: Sortierverfahren
Abschnitt 19: Sortierverfahren 19. Sortierverfahren 19.1 Allgemeines 19.2 Einfache Sortierverfahren 19.3 Effizientes Sortieren: Quicksort 19.4 Zusammenfassung 19 Sortierverfahren Informatik 2 (SS 07) 758
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
MehrAlgorithms & Data Structures 2
Algorithms & Data Structures 2 Sorting WS2017 B. Anzengruber-Tanase (Institute for Pervasive Computing, JKU Linz) (Institute of Pervasive Computing, JKU Linz) SORTIEREN Sortierproblem Gegeben: Folge von
MehrDatenstrukturen & Algorithmen
Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Übersicht Sortieralgorithmen Einleitung Heapsort Quicksort 2 Motivation Sortieren ist Voraussetzung für viele Anwendungen Nach
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
Mehrin eine Folge ai, so daß bezgl. einer Ordnung gilt: a a, j < n
6. Sortieren Umordnen von Objekten a in eine Folge ai,..., ai n, so daß bezgl. einer Ordnung gilt: a a, j < n Begriffe: ij i j + ) Stabilität : Ein Sortierverfahren heißt stabil, falls die relative Reihenfolge
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
MehrMergesort. Idee. Die folgende Funktion mergesort sortiert eine Folge a vom unteren Index lo bis zum oberen Index hi.
Sortierverfahren Mergesort Das Sortierverfahren Mergesort erzeugt eine sortierte Folge durch Verschmelzen (engl.: to merge) sortierter Teilstücke. Mit einer Zeitkomplexität von (n log(n)) ist das 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
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
MehrProgrammieren - C++ Templates
Programmieren - C++ Templates Reiner Nitsch r.nitsch@fbi.h-da.de Was sind Templates? C++ Templates ermöglichen generische Programmierung. Das ist Programmierung unabhängig vom speziellen Objekt-Typ Templates
MehrAlgorithms & Data Structures 2
Algorithms & Data Structures Digital Sorting WS B. Anzengruber-Tanase (Institute for Pervasive Computing, JKU Linz) (Institute for Pervasive Computing, JKU Linz) WIEDERHOLUNG :: UNTERE SCHRANKE FÜR SORTIEREN
MehrDie C++ Standard Template Library Andreas Obrist
Die C++ Standard Template Library 24. 06. 2004 Andreas Obrist Was dürft Ihr erwarten? 1. Teil Das Wichtigste in Kürze über die Standard Template Library 2. Teil Praktische Beispiele Was dürft Ihr nicht
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:
MehrSortieren Anordnen einer gegebenen Menge von Objekten in einer bestimmten Ordnung.
Informatik II - 195 Kapitel 9 Sortierverfahren Sortieren Anordnen einer gegebenen Menge von Objekten in einer bestimmten Ordnung Sortierte Folgen von Objekten bringen eine deutliche Vereinfachung für den
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 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
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
MehrProf. H. Herbstreith Fachbereich Informatik. Leistungsnachweis. Informatik 1 WS 2001/2002
Prof. H. Herbstreith 30.01.2002 Fachbereich Informatik Leistungsnachweis Informatik 1 WS 2001/2002 Bearbeitungszeit 120 Minuten. Keine Hilfsmittel erlaubt. Aufgabe 1: 20 Punkte Vervollständigen Sie folgende
MehrSortieren und Suchen. Hallo Welt Seminar Jochen Gierling
Sortieren und Suchen Hallo Welt Seminar 2008 Jochen Gierling Übersicht I II III IV V Problem des Sortierens und Suchens, Anwendungen und Motivation Sortieralgorithmen Suchalgorithmen Range Minimum Query
MehrProgrammieren - C++ Funktions-Templates
Programmieren - C++ Funktions-Templates Reiner Nitsch 8471 r.nitsch@fbi.h-da.de Was sind Templates? C++ Templates ermöglichen generische Programmierung. Das ist Programmierung unabhängig vom speziellen
MehrKap 7. Funktionen und Arrays
Kap 7. Funktionen und Arrays Elementare Algorithmen Allgemein Mathematik Text Eingabe ٧ Skalarprodukt wie Allgemein Ausgabe ٧ Länge ersetzen Summation Winkel Laenge Maximum ٧ Polynome berechnen ausschneiden
MehrQuickSort ist ein Sortieralgorithmus, der auf der Idee des Teile & Beherrsche beruht, und das gegebene Array an Ort und Stelle (in place) sortiert
4.3.6 QuickSort QuickSort ist ein Sortieralgorithmus, der auf der Idee des Teile & Beherrsche beruht, und das gegebene Array an Ort und Stelle (in place) sortiert QuickSort teilt das gegebene Array anhand
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
Mehr(Digital) Sorting. October 25, Algorithms & Datastructures 2 Exercises WS 2016
(Digital) Sorting October 2, 2016 Algorithms & Datastructures 2 Exercises WS 2016 Dipl.-Ing. University Linz, Institute for Pervasive Computing Altenberger Straße 69, A-4040 Linz kurz@pervasive.jku.at
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine
MehrPraktische Informatik I - Algorithmen und Datenstrukturen Wintersemester 2006/07
2 Sortieren Untersuchungen haben gezeigt, dass mehr als ein Viertel der kommerziell verbrauchten Rechenzeit auf Sortiervorgänge entfällt. Sortierproblem Gegeben ist eine Folge F von Datensätzen (engl.:
MehrAlgorithmen und Datenstrukturen
1 Algorithmen und Datenstrukturen Wintersemester 2014/15 3. Vorlesung Laufzeitanalyse Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I 2 Recap: Diskutieren Sie mit Ihrer NachbarIn! 1. 2. 3. Was sind
MehrPolymorphismus 179. Function.h. #include <string>
Polymorphismus 179 #include Function.h class Function { public: virtual ~Function() {}; virtual std::string get_name() const = 0; virtual double execute(double x) const = 0; }; // class Function
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
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. Binäre Bäume 2. B-Bäume und Tries 3.
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)
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
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
MehrRekursion. Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren
Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren Mathematische Rekursion o Viele mathematische Funktionen sind sehr natürlich rekursiv definierbar, d.h. o die
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
MehrRekursion. Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren
Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren Mathematische Rekursion o Viele mathematische Funktionen sind sehr natürlich rekursiv definierbar, d.h. o die
MehrProgrammieren - C++ Templates
Programmieren - C++ Templates Reiner Nitsch 8471 reiner.nitsch@h-da.de Was sind Funktionstemplates? C++ unterscheidet zwischen Funktionstemplates (dieses Kapitel) und Klassentemplates (später). Funktionstemplates
MehrEinführung in die STL
1/29 in die STL Florian Adamsky, B. Sc. (PhD cand.) florian.adamsky@iem.thm.de http://florian.adamsky.it/ cbd Softwareentwicklung im WS 2014/15 2/29 Outline 1 3/29 Inhaltsverzeichnis 1 4/29 Typisierung
Mehr5. Behälter und Iteratoren. Programmieren in C++ Überblick. 5.1 Einleitung. Programmieren in C++ Überblick: 5. Behälter und Iteratoren
Programmieren in C++ Überblick 1. Einführung und Überblick 2. Klassen und Objekte: Datenkapselung 3. Erzeugung und Vernichtung von Objekten 4. Ad-hoc Polymorphismus 6. Templates und generische Programmierung
MehrObjektorientierte Programmierung mit C++ SS 2007
Objektorientierte Programmierung mit C++ SS 2007 Andreas F. Borchert Universität Ulm 5. Juni 2007 Polymorphismus #include Function.h class Function { public: virtual ~Function() {}; virtual std::string
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
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
MehrProgrammieren in C++ Überblick
Programmieren in C++ Überblick 1. Einführung und Überblick 2. Klassen und Objekte: Datenkapselung 3. Erzeugung und Vernichtung von Objekten 4. Ad-hoc Polymorphismus 6. Templates und generische Programmierung
MehrA7.1 Untere Schranke. Algorithmen und Datenstrukturen. A7.1 Untere Schranke. Algorithmen und Datenstrukturen. A7.2 Quicksort. A7.
Algorithmen und Datenstrukturen 14. März 2018 A7. III Algorithmen und Datenstrukturen A7. III Marcel Lüthi and Gabriele Röger Universität Basel 14. März 2018 A7.1 Untere Schranke A7.2 Quicksort A7.3 Heapsort
MehrProgrammieren 2 C++ Überblick
Programmieren 2 C++ Überblick 1. Einführung und Überblick 2. Klassen und Objekte: Datenkapselung 3. Erzeugung und Vernichtung von Objekten 4. Ad-hoc Polymorphismus 6. Templates und generische Programmierung
MehrTechnische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen
Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen 186.172 Algorithmen und Datenstrukturen 1 VL 4.0 Übungsblatt 1 für die Übung
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen A3. Sortieren: Selection- und Insertionsort Marcel Lüthi and Gabriele Röger Universität Basel 1. März 2018 Sortieralgorithmen Inhalt dieser Veranstaltung A&D Sortieren Komplexitätsanalyse
Mehr3. Mergesort. [ Zurück zum Inhaltsverzeichnis ]
3.1 Historie/Hintergrund 3. Mergesort [ Zurück zum Inhaltsverzeichnis ] Mergesort, das "Sortieren durch Verschmelzen", ist eines der ältesten und best-untersuchten Sortierverfahren, welches bereits 1945
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 >
Mehra) Erläutern Sie die Vorteile der Konstrukte zur Fehlerbehandlung in Java.
Aufgabe 11 Ausnahmebehandlung a) Erläutern Sie die Vorteile der Konstrukte zur Fehlerbehandlung in Java. Lösungsvorschlag: Wartbarkeit und Übersichtlichkeit des Programmcodes: Durch die Fehlerbehandlung
MehrKapitel 3: Sortierverfahren Gliederung
Gliederung 1. Grundlagen 2. Zahlentheoretische Algorithmen 3. Sortierverfahren 4. Ausgewählte Datenstrukturen 5. Dynamisches Programmieren 6. Graphalgorithmen 7. String-Matching 8. Kombinatorische Algorithmen
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
MehrChristoph Niederseer, Michaela Mayr, Alexander Aichinger, Fabian Küppers. Wissenschaftl. Arbeitstechniken und Präsentation
Christoph Niederseer, Michaela Mayr, Alexander Aichinger, Fabian Küppers 1. Was ist paralleles Programmieren 2. Bitoner Sortieralgorithmus 3. Quicksort a) sequenzielles Quicksort b) paralleles Quicksort
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
MehrAlgorithmen. Sortieren durch Auswählen, Sortieren durch Mischen und Vergleich der Laufzeit. Abschätzung der Laufzeit eines Algorithmus, O-Notation.
Algorithmen Sortieren durch Auswählen, Sortieren durch Mischen und Vergleich der Laufzeit Abschätzung der Laufzeit eines Algorithmus, O-Notation. Rekursion Einführung in die Informatik: Programmierung
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen A7. Sortieren III Marcel Lüthi and Gabriele Röger Universität Basel 14. März 2018 Untere Schranke Sortierverfahren Sortieren Vergleichsbasierte Verfahren Nicht vergleichsbasierte
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
MehrKlausur: Informatik I am 06. Februar 2009 Gruppe: D Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:
Seite 1 von 10 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 12 Pkt.) Was liefert
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:
MehrProgrammieren II Abstrakte Klassen / Virtuelle Methoden. Programmieren II Abstrakte Klassen / Virtuelle Methoden
Einleitende Bemerkungen Einleitende Bemerkungen Aspekte Aufbau von sinnvollen Klassenhierarchien Verwaltung von Objekten unterschiedlichen Typs Mitarbeiter Besonderheiten der Anwendung jeder Angehörige
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
Mehr