Quicksort. Referat am in Proseminar "Grundlagen der Programmierung" Inhalt. 1. Geschichte und Hintergründe des Sortierproblems

Größe: px
Ab Seite anzeigen:

Download "Quicksort. Referat am 18.11.1996 in Proseminar "Grundlagen der Programmierung" Inhalt. 1. Geschichte und Hintergründe des Sortierproblems"

Transkript

1 Quicksort Referat am in Proseminar "Grundlagen der Programmierung" Inhalt 1. Geschichte und Hintergründe des Sortierproblems 2. Theoretische Grundlagen 2.1 Das Sortierproblem (lat. sors, -tis = Rang, Ordnung) 2.2 Definition einiger Fachbegriffe 3. Elementare Sortieralgorithmen 3.1 Bubblesort 3.2 Sortieren durch direktes Einfügen: Insertionsort 3.3 Shell-Metzner-Sort 4. Quicksort 4.1 Grundidee 4.2. Algorithmus 4.3 Analyse von Quicksort 4.4 Verbesserungen von Quicksort 5. Vergleich der Algorithmen Anhang: Literaturverzeichnis 1. Geschichte und Hintergründe des Sortierproblems Erste Betätigungen im Bereich des Sortierens gehen auf das Amerika im 19. Jahrhundert zurück. Damals war es üblich alle zehn Jahre eine Volkszählung durchzuführen. Mit den daraus gewonnenen Daten wuchs auch das Interesse an verschiedenen Statistiken. Für diese Erhebungen mußte das Datenmaterial nach verschiedenen Gesichtspunkten sortiert werden, was anfangs noch in mühevoller Handarbeit geschah. Daraus fand schließlich Hermann Hollerith mit der, nach ihm benannten, batteriebetriebenen Hollerith-Sortiermaschine einen Ausweg. Mit ihr wurde es möglich, Daten der Volkszählung, die auf Lochkarten gestanzt wurden, zu sortieren. In einer Presse wurden mit Nadeln die einzelnen Löcher abgetastet. Traf eine Nadel auf ein Loch, wurde über die Nadel zum metallischen Untergrund ein elektrischer Kontakt hergstellt, der über einen entsprechenden Mechanismus eine Klappe öffnete und so die Dateikarte auf den jeweiligen Stapel sortierte. Ein Angestellter konnte so an seinem secheinhalb Stunden Arbeitstag Karten bearbeiten. Mit steigenden Bevölkerungszahlen gingen stetig ansteigende Datenmassen einher, so daß man 1901 Sortiermaschinen mit automatischer Papierzuführung verwendete. Der Durchbruch gelang aber erst 1930 als die ersten programmierbaren Computer aufkammen. Das Interesse am Sortierproblem ist unweigerlich mit der Computerentwicklung und ebenso alt wie

2 Computer selbst. Computer sind aufgrund ihrer Struktur und strengen Arbeitsweise geradezu geschaffen, um Daten so sortieren. Dafür existieren verschiedene Sortieralgorithmen, die im weiteren untersucht werden sollen. 2. Theoretische Grundlagen 2.1 Das Sortierproblem (lat. sors, -tis = Rang, Ordnung) Daten sortieren heißt, sie in bezug auf eine vorher festgelegte Ordnung zu sortieren, zu ordnen. Eine solche Anordnung kann nach Größe (optische Ordnung), Zahlenwerten (z.b. Postleitzahlen) oder definiertem Alphabet geschehen. Ziel des Sortierens ist es, häufig verwendete Daten nach geschickter Sortierung schneller und einfacher wiederzufinden. Das Sortierproblem läßt sich auch mathematisch exakt darstellen: 2.2 Definition einiger Fachbegriffe Bevor nun einige Sortieralgorithmen vorgestellt und untersucht werden sollen, scheint es sinnvoll zur späteren Bewertung der Algorithmen noch einige Begriffe einzuführen. Mit Schlüssel (engl. key) bezeichnet man den Wert eines Elements der zu sortierenden Menge nach dem sortiert wird. Möchte man z.b. eine Händlernachweisliste nach Postleitzahlen sortieren, so sind in diesem Fall die PLZs die Schlüssel. Ein wichtiges Kennzeichen von Sortieralgorithmen ist die Stabilität. Sie sagt aus, daß bei der Sortierung einer Datenmenge die Reihenfolge gleicher Schlüssel erhalten bleibt. Die Inversionszahl dagegen ist ein Maß für die Unordnung, die in einer Permutation enhalten ist, sie ist wie folgt definiert: Die Ordnungsverträglichkeit gibt Auskunft darüber, ob das Sortierverfahren bereits bestehende Teilordnungen bei der Sortierung ausnützt. 3. Elementare Sortieralgorithmen

3 Hier sollen einige elementare Sortieralgorithmen vorgestellt werden. Für kleine Datenmengen sind sie durchaus ausreichend, lassen sich schnell nachvollziehen und rasch realisieren. Zudem könnnen sie sinnvoll mit komplexen Verfahren kombiniert werden und so weitere Geschwindikeitsvorteile bringen. 3.1 Bubblesort Bubblesort ist eines der bekanntesten Sortierfahren. Die Verbreitung des Algorithmuses dürfte allerdings mehr auf der einfachen Methode als der Effizienz beruhen. Der Algorithmus arbeitet mit dem Prinzip des direkten Austauschs, d.h. aufeinander folgende Schlüssel werden verglichen und gegebenenfalls vertauscht. Das Datenfeld wird nun mehrfach durchlaufen, wobei alle kleineren Schlüssel nach links wandern, alle größeren nach rechts. Stellt man sich das Array senkrecht stehend vor, so erklärt sich der Name Bubblesort mit einiger Phantasie. Eine PASCAL Implementierung könnte wie folgt aussehen: PROCEDURE Bubblesort(VAR Daten: Datenfeld; N:Integer); VAR i, j: CARDINAL; hilf: Datentyp; FOR i := 2 TO N DO FOR j := N DOWNTO i DO IF Daten[j - 1] > Daten[j] THEN hilf := Daten[j - 1]; Daten[j - 1] := Daten[j]; Daten[j] := hilf; END; END; END; {Bubblesort} Wenn man sich den Ablauf an Hand einer Tracetabelle vor Augen führt, erkennt man auch gleich ein Manko von Bubblesort. Durch den fast stur wirkenden Durclauf der FOR-Schleife wird das Datenfeld weiter durchlaufen, obwohl bereits bei i=5 die Daten korrekt sortiert sind. Startfeld: i=2: i=3: i=4: i=5: i=6: i=7: Aus dem verschachtelten Schleifenkonstrukt wird schnell ersichtlich, das die Komplexität Bubblesorts von O(n 2 ) ist. Außerdem ist noch zu bemerken, daß von Bubblesort keine Stabilität gewährleistet wird. 3.2 Sortieren durch direktes Einfügen: Insertionsort Diese Sortiermethode ist intuitiv bekannt vom Sortieren beim Kartenspiel. Man betrachtet dabei einen Key nach dem anderen und fügt ihn in die bereits sortierten an der richtigen Stelle ein, wobei deren

4 Reihenfolge unverändert bleibt. Das gerade betrachtete Element wird eingefügt, in dem die größeren Elemente einfach um eine Position nach rechts bewegt werden und das Element auf den freigewordenen Platz eingefügt wird. Das folgende Bild verdeutlicht die Vorgehensweise, die hellen Elemente gelten bereits als sortiert, das vorgehobene Element wird gerade bearbeitet: Nicht unerwähnt darf ein kleiner Schönheitsfehler bleiben. Ist das gerade betrachte Element hilf gerade das kleinste, so würde die WHILE-Schleife in ihrer bisherigen Fassung den zulässigen Bereich des Arrays verlassen. Um dies zu verhindern wurde ein Sentinel, ein Randmarke, eingeführt. Die zugehörige PASCAL-Implementierung sieht dann wie folgt aus: PROCEDURE Insertionsort(VAR Daten: Datenfeld; N:CARDINAL); VAR i, j: CARDINAL; hilf: Datentyp; FOR i := 2 TO N DO hilf := Daten[i] Daten[0] := hilf; {* Sentinel} j := i - 1; WHILE hilf < Daten[j] DO Daten[j + 1] := Daten[j]; {* j-ten Schlüssel nach rechts rutschen} j := j - 1; END; Daten[j + 1] := hilf; END; END; {Insertsort} Die Komplexität von Insertionsort ist, wie die von Bubblesort, von O(n2). Dafür ist Insertionsort aber ein stabiles Sortierverfahren. Zudem sortiert es ordnungsverträglich, sortiert also eine geordnete Menge am schnellsten, eine entgegengesetzt geordnete Datenmenge am schlechsten. 3.3 Shell-Metzner-Sort Dieses Verfahren beruht direkt auf Insertionsort und ist eine wesentliche Verbesserung davon. Der Vergleich der Keys wird nicht, wie bei Insertionsort, direkt nacheinander, sondern mit abnehmender Schritt- bzw. Spannweite vorgenommen, folglich werden Vertauschungen über große Distanzen vorgenommen. Die Distanzen werden durch eine absteigende Folge h, die gegen konvergieren muß,

5 vorgegeben. Anfangs wird das Feld über Spannweiten h>1 vorsortiert und mit kleiner werdendem h immer weiter verfeinert. Bei der Schrittweite h=1 läuft dann schließlich der Standart-Insertionsort-Algorithmus ab, wobei augrund der Vorsortierung nur noch wenige Vertauschungen notwendig sind. Realisierung in PASCAL: PROCEDURE Shellsort(VAR Daten: Datenfeld; N:CARDINAL); VAR i, j, h: CARDINAL; hilf: Datentyp; h := 1; REPEAT h:=h*3+1; UNTIL h>n; REPEAT h := h DIV 3; FOR i := h+1 TO N DO hilf := Daten[i]; Daten[0] := hilf; {* Sentinel} j := i - h; WHILE (hilf < Daten[j]) AND NOT (j < h) DO Daten[j + h] := Daten[j]; j := j - h; END; Daten[j + h] := hilf; END; UNTIL h = 1; END; {Shellsort} {* j-ten Schlüssel nach rechts rutschen} Dieses Verfahren bringt einen enormen Geschwindigkeitsgewinn, da Elemente über weite Strecken transportiert werden. Eine eine Analyse ist bis heute nicht möglich, da ungelöste mathematische Probleme im Wege stehen. Es kann nicht einmal eine Aussage über die Einflußnahme der Folge h auf das Verfahren gemacht werden. Lediglich für die Folge h[k-1] = 3 * h[k] + 1 konnte man empirisch eine Komplexität von O(n 1.25 ) ermitteln. Shell-Metzner-Sort ist damit wesentlich besser als die bisher vor gestellten Verfahren, gilt daher auch als bester einfacher Algorithmus und kann mit komplexeren, so auch mit Quicksort, durchaus konkurrieren. 4. Quicksort Der Algorithmus wurde entdeckt, als Hoare als Austauschstudent nach Moskau kam. Dort erhielt er die Möglichkeit, bei einem neuen Projekt für automatische Übersetzung vom Russischen ins Englische mitzuarbeiten. Damals wurden die Wörterbücher auf Magnetband gespeichert, somit war es notwendig, die Wörter eines Satzes alphabetisch zu sortieren, um dann die Übersetzungen vom Band abrufen zu können. Zwar hielt C.A.R. Hoare später automatische Übersetzungssysteme für unpraktikabel, aber dafür wurde Quicksort geboren. Hoare verfaßte 1962 seinen Artikel über Quicksort. Dort beschrieb er nicht nur seinen Algorithmus sondern analysierte ihn auch ausgiebig. Seine Vorhersagen über die Effizienz seines

6 Verfahrens bestätigten sich später auch in der Praxis. Da Hoare seinen Algorithmus bereits 1962, also noch vor der Einführung von ALGOL, entdeckte, mußte er sich auch noch ausführlich mit der Entrekursivierung des Verfahrens beschäftigten, da sich zu dieser Zeit noch keine Rekursion in Programmiersprachen ausdrücken ließ. 4.1 Grundidee Quicksort ist ein rekursiver Algorithmus. Die Grundidee beruht darauf, das Sortierproblem in kleine Teilprobleme zu zerlegen, bis diese lösbar werden. Auf die zu sortierende Datenmenge angewendet heißt das, die Schlüsselreihe mit einem Schnittelement, auch Pivotelement genannt, in zwei Teilreihen zu zerlegen. In der linken Teilreihe sollen sich dann alle Schlüssel kleiner dem Pivotelement, in der rechten alle größer dem Pivotelement befinden. Diese Teilreihen sollen ihrerseits wieder mit neuen Pivotelementen zerlegt werden, bis die rekursiv gewonnen Partitionen nur noch jeweils ein Element enthalten Algorithmus Die Partionierung, d.h. die Aufteilung des Datensegments in kleinere Teilsegmente, wird, wie bereits bei der Grundidee dargestellt, mit einem Pivotelement realisiert. Die Wahl des Pivotelement ist prinzipiell willkürlich, der Algorithmus funktioniert mit jedem Element als Pivotelement. Jedoch kann, wie später noch gezeigt wird, eine günstige Wahl des Trennelements Effizienzvorteile bringen. Als erstes wird also das Pivotelement, wie auch immer, aus den Schlüsseln bestimmt. Dann durchlaufen zwei Pfeile das Datensegment, der eine von Links startend nach Rechts, der andere von Rechts startend nach Links. Der linke Pfeil startet als erster beim linken Randelement des Datensegments. Dabei wird das Pivotelement mit dem Schlüssel, auf den der linke Pfeil gerade zeigt, verglichen. Ist der aktuelle Schlüssel kleiner dem Pivotelement wandert der linke Pfeil rechts weiter zum nächsten Wert im Datensegement. Ist dagegen der aktuelle Schlüsselwert größer als das Pivotelement wird der rechte Pfeil in Gang gesetzt. Anfangs startet dieser am rechten Datensegmentrand und wandert nach Links auf den linken Pfeil zu. Auch hierbei wird wieder der aktuelle Schlüsselwert mit dem Trennelement verglichen. Ist der Schlüsselwert größer dem Pivotelement, wandert der recht Pfeile links weiter zum nächsten Wert, ansonsten wird die Position des aktuellen Schlüssels mit der des Schlüssels, auf den der linke Pfeil zeigt, vertauscht. Der Vorgang ist dann beendet, wenn sich der linke und rechte Pfeil treffen, oder gar überlagern. Dabei ist zu beachten, daß bei Überlagerung keine Vertauschung mehr stattfindet, da die Schlüssel dann bereits im richtigen Teilsegment liegen. So erhält man nach dieser ersten Partitionierung genau zwei Teilsegmente, wobei die Schlüssel im linken Teilbereich alle kleiner dem Trennelement, im rechten Teilbereich alle größer dem Trennelement sind. Die neu gewonnenen Teilbereiche werden ihrerseits wieder partioniert. Die Rekursion wird erst dann beendet, wenn man nur noch leere oder 1-elementige Teilsegmente erhalten hat. Durch diese rekursive Partionierung erhält man dann eine Sortierung des Datenfelds. Im folgenden Schaubild wird der Sortiervorgang an einem einfachen Zahlenfeld vorgeführt:

7 Wie bereits mehrfach erwähnt, ist Quicksort ein rekursives Verfahren. Hoare mußte Quicksort in seinen damaligen Realisierungen noch mittels eines Stacks entrekursivieren, um es auf einer Maschine laufen lassen zu können. Trotzdem erschwert der rekursive Aufbau erheblich die Suche nach Implementierungsfehlern in Programmtexten. In der Literatur wird daher empfohlen, sich nur bei großen Datenmengen oder Aufnahme des Quicksortalgorithmus in eine Programmbibliothek auf dieses Verfahren zurückzugreifen. Sonst sei man mit Shellsort, das vom Verfahren viel einsichtiger ist, besser bedient. In PASCAL läßt sich Quicksort wie folgt beschreiben: PROCEDURE Quicksort(VAR Daten: Datenfeld; N:CARDINAL); PROCEDURE Partition(Links, Rechts: CARDINAL); VAR UPfeil, OPfeil: CARDINAL; Pivot, hilf: Datentyp; UPfeil := Links; OPfeil := Rechts; Pivot := Daten[(Links + Rechts) DIV 2]; {* mittleres Element: Pivot}; REPEAT WHILE Daten[UPfeil] < Pivot DO UPfeil := UPfeil + 1; WHILE Daten[OPfeil] > Pivot DO OPfeil := OPfeil - 1; IF UPfeil <= OPfeil THEN {* wenn sich beide Pfeile nicht berühren} hilf := Daten[UPfeil]; Daten[UPfeil] := Daten[OPfeil]; Daten[OPfeil] := hilf; UPfeil := UPfeil + 1; OPfeil := OPfeil - 1; END; UNTIL UPfeil > OPfeil; IF Links < OPfeil THEN Partition(Links, OPfeil); {* linkes Segment zerl.} IF Rechts > UPfeil THEN Partition(UPfeil, Rechts); {* rechtes Segment zerl.} END; {Partition} Partition(1, N); END; {Quicksort} Quicksort ist kein stabiles Verfahren.

8 4.3 Analyse von Quicksort Bereits Hoare hat dieses Verfahren ausgiebig mathematisch untersucht. Ziel in diesem Abschnitt ist es, eine Abschätzung über die Komplexität Quicksorts zu erhalten. Bei Quicksort werden, wie bei den anderen Sortierverfahren auch, zwei Methoden angewandt: Vergleiche (C von engl. comparisons) und Vertauschungen (M von engl. movements). Die Zahl der Vergleiche pro Partionierung von N Schlüsseln beträgt ebenfalls N, da ja alle Schlüssel mit dem Pivotelement verglichen werden müssen. Die Zahl der Vertauschungen hängt dagegen in großem Maße von der Art der Wahl des Pivotelements ab. So erhält man den ungünstigsten Fall (worst case), wenn man als Pivotelement immer gerade den größten oder kleinsten Schlüssel des Datensegments erhält. In diesem Fall ist die asymptotische Komplexität von Quicksort von der Ordnung n 2. Folgendes Zahlenbeispiel zeigt, daß in diesem Fall ein Teilsegemtn immer genau ein Element, das andere Segment genau N-1 Elemente enthält, also N Partitionierungen statt finden müssen: und so fort bis Pro Rekursionsstufe findet also nur ein Tausch statt. Um nun die Zahl M der Schlüsselbewegungen zu bestimmen, nimmt man an, daß das Pivotelement zufällig bestimmt wird und gerade dem r größsten Schlüssel der Sortiermenge entspricht. Die Annahme beruht dabei auf dem Prinzip der bedingten Erwartung. Damit existieren in der Datenmenge genau N-r Elemente, die größer als das Pivotelement sind, die Wahrscheinlichkeit, daß ein Schlüssel größer als das Trennelement sein kann ist folglich (N-r) / N. Nun gibt es genau r-1 Positionen, auf denen Schlüssel größer dem Pivotelement stehen können, dann aber, weil auf diesen Positionen nach der Partionierung nur Element kleiner Pivotelement stehen sollen, verschoben werden müssen. In einer Partionierung mit dem r-ten Element als Pivotelement finden demnach genau statt. Bildet man nun den Erwartungswert, d.h. summiert über r und dividiert durch N, so erhält man die absolute Anzahl von Vertauschungen M in einer Partitionierung:

9 In der weiteren Abschätzung in bezug auf M abstrahiert man von den exakten Faktoren und gelangt so nun zu folgendem Ausdruck: Die Variablen a, b, c sind dabei spezifisch für den jeweils verwendeten Computer, wobei z.b. a in etwa ein Faktor für die Abarbeitung von Schleifen sein könnte. Die Zeit, um N Elemente zu sortieren, wird im weiteren mit T N bezeichnet, die Sortierzeit für r Elemente mit T r, die für N-r Elemente mit T N-r. Um N Elemente zu sortieren, benötigt man neben der Zeit der aktuellen Partionierung außerdem noch die Zeit, um r Elemente, das sind die Elemente im linken Teilsegment, und N-r Elemente, die Elemente im rechten Teilsegment, zu sortieren: Dabei wird wieder vorausgesetzt, daß das Pivotelement das r größste war. Geht man wieder davon aus, daß die Wahl des Pivotelements zufällig ist, kann man wieder den Erwartungswert bilden und gelangt zu folgender Gleichung: Die Lösung dieser Gleichung ist nun sehr komplex und außerordentlich kompleziert. Auch Hoare gibt diese Lösung nur an und begründet sie nicht näher. Jedoch scheint es an dieser Stelle nicht nützlich näher auf die Gestalt der Lösung einzugehen. Im weiteren Verlauf greift man den größten Summanden der Lösung heraus, da man ja nur eine Abschätzung will, und gelangt damit zu: Die Analysis begründet den Zusammenhang mit dem Logarithmus. Man faßt dabei das Summenzeichen als numerisches Integral auf und erhält dann den natürlichen Logarithmus, der gerade der Stammfunktion von 1/x entspricht. Somit ist gezeigt, daß die Komplexität von Quicksort von der Ordnung N * log(n) ist. Aus der Informationstheorie ist bekannt, daß bei einer Vertauschung genau -log 2 an Entropie (=Entscheidungsgehalt) verloren geht. Weiter weiß man, daß die Entropie der zu sortierenden Datenmenge -log N! beträgt. Die sortierte Datenmenge hat dann die Entropie 0. Daraus läßt sich folgern, daß die minimale Vertauschung -log N! / -log 2 = log 2 N!, in etwa N * log 2 N entspricht. D.h. will man eine beliebige Datenmenge mit N Elemente mit möglichst wenig Vertauschungen sortieren, so benötigt man im besten Fall immer noch N * log 2 N Vertauschungen. Quicksort ist mit 2N * log N Vertauschungen recht nahe dran, es benötigt damit nur das 1.4 fache des

10 optimalen Wertes. 4.4 Verbesserungen von Quicksort Am Schluß der Analyse wurde gezeigt, daß Quicksort nur um den Faktor 1.4 vom optimalen Wert abweicht. Quicksort ist damit ein sehr gutes Sortierverfahren. Auch wenn es in der Praxis selten vorkommen dürfte, fällt Quicksort im worst case mit einer Komplexität von O(n 2 ) doch wieder weit zurück. Die Wahl des Pivotelements wurde dafür verantwortlich gemacht. Optimieren kann man hier, indem sich drei Schlüssel aus der Datenmenge herausgreift und gerade das größenmäßig in der Mitte liegende der Dreien zum Pivotelement macht. Damit kann gewährleistet werden, daß das Pivotelement nicht das Minimum oder Maximum der Datenmenge ist und so der worst case vermieden wird. Hoare schlägt außerdem vor, Sentinel-Keys einzuführen, um so auf ständigen Zeigertests verzichten zu können. Einen weiteren Geschwindigkeitsvorteil bringt, Quicksort mit anderen Verfahren, z.b. Insertionsort, zu kombinieren. Da sich in der Praxis zeigt, daß Quicksort bei Datenmengen mit N < 10 schlechter abschneidet als manch elementarer Konkurrent. Bei der Kombination mit Insertionsort kann dieser Nachteil wieder wettgemacht werden, indem man Segmente mit weniger als 10 Elementen nicht mehr weiterpartitioniert sondern eben mit Insertionsort sortiert. 5. Vergleich der Algorithmen In diesem Abschnitt sollen die drei Sortieralgorithmen Bubblesort, Insertion und Quicksort miteinander verglichen werden. Dazu wurden die drei Algorithmen jeweils mit bereits sortierten Mengen, günstigster Fall, zufällig sortierten Mengen, durchschnittlicher Fall, und entgegengesetzt sortierten Mengen konfrontiert. Der Aufwand der Sortieralgorithmen im Überblick: In den folgenden Diagrammen wurden dafür die Arbeitszeiten der Algorithmen in Bezug auf die Größe N der Datenmenge aufgezeichnet. Die Zeiten wurden dabei mit der internen Uhr eines Commodore Amiga 500 für Kick-Pascal Implementierungen in Sekunden ermittelt. Die Genauigkeit der Zeiten ist somit von der Verläßlichkeit auf die interne Uhr gekennzeichnet.

11 Die Kurve von Bubblesort verläuft ganz streng der einer Parabel. Im Vergleich zu seinen Konkurrenten ist Bubblesort überdeutlich der langsamste Algorithmus. Überraschenderweise wird aber das favourisierte Quicksort von Insertionsort an Geschwindikeit übertroffen, das, im Gegensatz zu Quicksort, ordnungsverträglich sortiert und so einen Geschwindigkeitsbonuns verbuchen kann.

12 Auch bei zufällig sortierten Datenmengen tut sich Bubblesort wieder als schlechtestes Verfahren hervor. Bereits bei N = 100 benötigt es die über die doppelte Zeit von Insertionsort und gar das Siebenfache von Quicksort. Nahezu Gleichheit zwischen Quicksort und Insertionsort herrscht bei N<20. Wie bei den Verbesserungen von Quicksort bereits erwähnt, wird Quicksort bei kleinen Datenmengen von Insertionsort mitunter geschlagen. Außerdem werden in diesem Bild die quadratischen Komplexitäten von Bubblesort und Insertionsort deutlich. Quicksort kommt, wie bei der Analyse bereits prophezeit, mit zufällig geordneten Daten am besten zurecht.

13 Während Bubblesort und Insertionsort sehr lange brauchen, um die Daten zu sortieren, sprechen die Zeiten von Quicksort sehr deutlich für Hoares Algorithmus. Die Zeitunterschiede zwischen Insertionsort und Quicksort sind zwar hier geringer als in den vorherigen Fällen, doch erweist sich auch hier Bubblesort wieder als das schlechteste Verfahren. Wirth meint zu Bubblesort, daß es außer einem griffigen Namen nichts zu bieten habe... Quicksort schlägt souverän seine Konkurrenten aus dem Rennen und ist in der Praxis damit das schnellste Sortierverfahren. Lediglich ein Vergleich mit Shellsort fällt weniger eindeutig aus. Bei allen Vorzügen sollte man dennoch nicht vergessen, daß Quicksort instabil ist und nicht ordnungsverträglich sortiert. Überhaupt entfaltet Quicksort sein Optimum erst bei großen Datenmengen. Interessanterweise konnte Hoare bereits 1962 diese Kennzeichen und Eigenschaften prophezeien. Anhang: Literaturverzeichnis C. A. R. Hoare: QUICKSORT. BCS Computer Journal, 5(1): 1962 Appelrath, H.J.; Ludwig. J.: Skriptum Informatik - eine konventionelle Einführung. Stuttgart: Teubner, Sedgewick, R.: Algorithmen.

14 Bonn, München u.a.: Addision-Wesley, Wirth, N.: Algorithmen und Datenstrukturen. Stuttgart: Teubner, Frank, H.: Facharbeit aus der Mathematik, Diskussion und Darlegung von Sortieralgorithmen. Weißenburg 1994 (C) by Florian Michahelles 1997

Ü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

Folge 13 - Quicksort

Folge 13 - Quicksort Für Abiturienten Folge 13 - Quicksort 13.1 Grundprinzip des Quicksort Schritt 1 Gegeben ist ein unsortierter Array von ganzen Zahlen. Ein Element des Arrays wird nun besonders behandelt, es wird nämlich

Mehr

1. Grundlagen... 2. 2. Sortieren... 6. 1.1. Vertauschen... 13. 1.2. Selektion... 16. 1.3. Einfügen... 19. 1.4. Quicksort... 22. 3. Suchen...

1. Grundlagen... 2. 2. Sortieren... 6. 1.1. Vertauschen... 13. 1.2. Selektion... 16. 1.3. Einfügen... 19. 1.4. Quicksort... 22. 3. Suchen... Suchen und Sortieren In diesem Kapitel behandeln wir Algorithmen zum Suchen und Sortieren Inhalt 1. Grundlagen... 2 2. Sortieren... 6 1.1. Vertauschen... 13 1.2. Selektion... 16 1.3. Einfügen... 19 1.4.

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

Sortieren. Eine Testmenge erstellen

Sortieren. Eine Testmenge erstellen Sortieren Eine der wohl häufigsten Aufgaben für Computer ist das Sortieren, mit dem wir uns in diesem Abschnitt eingeher beschäftigen wollen. Unser Ziel ist die Entwicklung eines möglichst effizienten

Mehr

Einführung in die Informatik I Kapitel II.3: Sortieren

Einführung in die Informatik I Kapitel II.3: Sortieren 1 Einführung in die Informatik I Kapitel II.3: Sortieren Prof. Dr.-Ing. Marcin Grzegorzek Juniorprofessur für Mustererkennung im Institut für Bildinformatik Department Elektrotechnik und Informatik Fakultät

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

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

Überblick. Lineares Suchen

Überblick. Lineares Suchen Komplexität Was ist das? Die Komplexität eines Algorithmus sei hierbei die Abschätzung des Aufwandes seiner Realisierung bzw. Berechnung auf einem Computer. Sie wird daher auch rechnerische Komplexität

Mehr

Sortieralgorithmen. Inhalt: InsertionSort BubbleSort QuickSort. Marco Block

Sortieralgorithmen. Inhalt: InsertionSort BubbleSort QuickSort. Marco Block Inhalt: InsertionSort BubbleSort QuickSort Block M.: "Java-Intensivkurs - In 14 Tagen lernen Projekte erfolgreich zu realisieren", Springer-Verlag 2007 InsertionSort I Das Problem unsortierte Daten in

Mehr

Programmieren ++ Begleitende Übungen zu Veranstaltungen + Umsetzen des Algorithmus in ein lauffähiges Programm

Programmieren ++ Begleitende Übungen zu Veranstaltungen + Umsetzen des Algorithmus in ein lauffähiges Programm Studienanforderungen Studiengang Maschinenbau Programmieren Begleitende Übungen zu Veranstaltungen Umsetzen des Algorithmus in ein lauffähiges Programm Studiengang Bauingenieurwesen Programmieren Begleitende

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

ALP I. Funktionale Programmierung

ALP I. Funktionale Programmierung ALP I Funktionale Programmierung Sortieren und Suchen (Teil 1) WS 2012/2013 Suchen 8 False unsortiert 21 4 16 7 19 11 12 7 1 5 27 3 8 False sortiert 2 4 6 7 9 11 12 18 21 24 27 36 Suchen in unsortierten

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

Sortieren durch Einfügen. Prof. Dr. W. Kowalk Sortieren durch Einfügen 1

Sortieren durch Einfügen. Prof. Dr. W. Kowalk Sortieren durch Einfügen 1 Sortieren durch Einfügen Prof. Dr. W. Kowalk Sortieren durch Einfügen 1 Schon wieder aufräumen Schon wieder Aufräumen, dabei habe ich doch erst neulich man findet alles schneller wieder Bücher auf Regal

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

Programmiertechnik II

Programmiertechnik II Analyse von Algorithmen Algorithmenentwurf Algorithmen sind oft Teil einer größeren Anwendung operieren auf Daten der Anwendung, sollen aber unabhängig von konkreten Typen sein Darstellung der Algorithmen

Mehr

Gruppenunterricht zum Thema: Sortierverfahren. Berufsschule / Gymnasium

Gruppenunterricht zum Thema: Sortierverfahren. Berufsschule / Gymnasium Gruppenunterricht zum Thema: Sortierverfahren Fach: Schultyp: Schulstufe: Informatik Berufsschule / Gymnasium Grundkurs Informatik Vorkenntnisse: Grundkenntnisse in einer Programmiersprache (nicht unbedingt

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

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

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen Was bisher geschah abstrakter Datentyp : Signatur Σ und Axiome Φ z.b. ADT Menge zur Verwaltung (Finden, Einfügen, Entfernen) mehrerer Elemente desselben Typs Spezifikation einer Schnittstelle Konkreter

Mehr

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1 3.2 Binäre Suche Beispiel 6.5.1: Intervallschachtelung (oder binäre Suche) (Hier ist n die Anzahl der Elemente im Feld!) Ein Feld A: array (1..n) of Integer sei gegeben. Das Feld sei sortiert, d.h.: A(i)

Mehr

Algorithmen & Datenstrukturen 1. Klausur

Algorithmen & Datenstrukturen 1. Klausur Algorithmen & Datenstrukturen 1. Klausur 7. Juli 2010 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 35 2 30 3 30 4 15 5 40 6 30 Gesamt 180 1 Seite 2 von 14 Aufgabe 1) Programm Analyse

Mehr

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20. Übersicht Datenstrukturen und Algorithmen Vorlesung 5: (K4) Joost-Pieter Katoen Lehrstuhl für Informatik 2 Software Modeling and Verification Group http://www-i2.informatik.rwth-aachen.de/i2/dsal12/ 20.

Mehr

Einführung in die Informatik I

Einführung in die Informatik I Einführung in die Informatik I Algorithmen und deren Programmierung Prof. Dr. Nikolaus Wulff Definition Algorithmus Ein Algorithmus ist eine präzise formulierte Handlungsanweisung zur Lösung einer gleichartigen

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Schulinternes Curriculum im Fach Informatik

Schulinternes Curriculum im Fach Informatik Schulinternes Curriculum im Fach Informatik Unterricht in EF : 1. Geschichte der elektronischen Datenverarbeitung (3 Stunden) 2. Einführung in die Nutzung von Informatiksystemen und in grundlegende Begriffe

Mehr

HOCHSCHULE KONSTANZ TECHNIK, WIRTSCHAFT UND GESTALTUNG. Das Luzifer-Rätsel. Prof. Dr. Hartmut Plesske Wintersemester 2008/09. von.

HOCHSCHULE KONSTANZ TECHNIK, WIRTSCHAFT UND GESTALTUNG. Das Luzifer-Rätsel. Prof. Dr. Hartmut Plesske Wintersemester 2008/09. von. HOCHSCHULE KONSTANZ TECHNIK, WIRTSCHAFT UND GESTALTUNG Fakultät Informatik Das Luzifer-Rätsel Prof. Dr. Hartmut Plesske Wintersemester 2008/09 von Max Nagl nagl@fh-konstanz.de Inhaltsverzeichnis Inhaltsverzeichnis

Mehr

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder Programmieren in PASCAL Bäume 1 1. Baumstrukturen Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder 1. die leere Struktur oder 2. ein Knoten vom Typ Element

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

Kapitel 6. Komplexität von Algorithmen. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Kapitel 6. Komplexität von Algorithmen. Xiaoyi Jiang Informatik I Grundlagen der Programmierung Kapitel 6 Komplexität von Algorithmen 1 6.1 Beurteilung von Algorithmen I.d.R. existieren viele Algorithmen, um dieselbe Funktion zu realisieren. Welche Algorithmen sind die besseren? Betrachtung nicht-funktionaler

Mehr

Leitprogramm Bubblesort

Leitprogramm Bubblesort Leitprogramm Bubblesort Dr. Rainer Hauser Inhalt 1 Übersicht...1 2 Input-Block I: Der Sortieralgorithmus Bubblesort...2 3 Input-Block II: Die Effizienz von Bubblesort...6 4 Zusammenfassung...8 5 Lernkontrolle...9

Mehr

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff Programmieren in C Rekursive Funktionen Prof. Dr. Nikolaus Wulff Rekursive Funktionen Jede C Funktion besitzt ihren eigenen lokalen Satz an Variablen. Dies bietet ganze neue Möglichkeiten Funktionen zu

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 20 Einstieg in die Informatik mit Java Rekursion Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 20 1 Überblick 2 Rekursion 3 Rekursive Sortieralgorithmen 4 Backtracking

Mehr

Entwurf von Algorithmen - Kontrollstrukturen

Entwurf von Algorithmen - Kontrollstrukturen Entwurf von Algorithmen - Kontrollstrukturen Eine wichtige Phase in der Entwicklung von Computerprogrammen ist der Entwurf von Algorithmen. Dieser Arbeitsschritt vor dem Schreiben des Programmes in einer

Mehr

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v) Ein Baum T mit Knotengraden 2, dessen Knoten Schlüssel aus einer total geordneten Menge speichern, ist ein binärer Suchbaum (BST), wenn für jeden inneren Knoten v von T die Suchbaumeigenschaft gilt: Der

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens 1 Organisatorisches Freitag, 05. Mai 2006: keine Vorlesung! aber Praktikum von 08.00 11.30 Uhr (Gruppen E, F, G, H; Vortestat für Prototyp)

Mehr

Wie funktioniert das Sortieren einer Reihe von Zufallszahlen mit Quicksort?

Wie funktioniert das Sortieren einer Reihe von Zufallszahlen mit Quicksort? Wie funktioniert das Sortieren einer Reihe von Zufallszahlen mit Quicksort? Seite 1 Sehen wir uns zunächst einmal die grundsätzliche Vorgehensweise des Programmes an, ohne auf Einzelheiten oder Fachtermini

Mehr

SOI 2013. Die Schweizer Informatikolympiade

SOI 2013. Die Schweizer Informatikolympiade SOI Die Schweizer Informatikolympiade Lösung SOI Wie schreibe ich eine gute Lösung? Bevor wir die Aufgaben präsentieren, möchten wir dir einige Tipps geben, wie eine gute Lösung für die theoretischen

Mehr

Kurs 1613 Einführung in die imperative Programmierung

Kurs 1613 Einführung in die imperative Programmierung Aufgabe 1 Gegeben sei die Prozedur BubbleSort: procedure BubbleSort(var iofeld:tfeld); { var hilf:integer; i:tindex; j:tindex; vertauscht:boolean; i:=1; repeat vertauscht := false; for j := 1 to N - i

Mehr

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14 Eidgenössische Technische Hochschule Zürich Ecole polytechnique fédérale de Zurich Politecnico federale di Zurigo Federal Institute of Technology at Zurich Institut für Theoretische Informatik 2. April

Mehr

Kap. 4.2: Binäre Suchbäume

Kap. 4.2: Binäre Suchbäume Kap. 4.2: Binäre Suchbäume Professor Dr. Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund 11. VO DAP2 SS 2009 26. Mai 2009 1 Zusätzliche Lernraumbetreuung Morteza Monemizadeh:

Mehr

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert Inhalt Einführung 1. Arrays 1. Array unsortiert 2. Array sortiert 3. Heap 2. Listen 1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert 3. Bäume

Mehr

Fragen für die Klausuren

Fragen für die Klausuren Fragen für die Klausuren Vom Quellcode zum ausführbaren Programm Was ist ein Quellcode? Ist der Quellcode von einem Programm auf unterschiedlichen Rechner gleich? Nennen Sie drei Programmiersprachen. Was

Mehr

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

Mehr

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Paradigmen im Algorithmenentwurf

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Paradigmen im Algorithmenentwurf Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005 Paradigmen im Algorithmenentwurf Problemlösen Problem definieren Algorithmus entwerfen

Mehr

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete Kapitel 4: Dynamische Datenstrukturen Algorithmen und Datenstrukturen WS 2012/13 Prof. Dr. Sándor Fekete 4.4 Binäre Suche Aufgabenstellung: Rate eine Zahl zwischen 100 und 114! Algorithmus 4.1 INPUT: OUTPUT:

Mehr

4 Algorithmen und Datenstrukturen

4 Algorithmen und Datenstrukturen 4 Algorithmen und Datenstrukturen Algorithmen sind Verfahren zur schrittweisen Lösung von Problemen. Sie können abstrakt, d.h. unabhängig von konkreten Rechnern oder Programmiersprachen, beschrieben werden.

Mehr

Datenstrukturen & Algorithmen

Datenstrukturen & Algorithmen Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Übersicht Binäre Suchbäume Einführung und Begriffe Binäre Suchbäume 2 Binäre Suchbäume Datenstruktur für dynamische Mengen

Mehr

Uebersicht. Webpage & Ilias. Administratives. Lehrbuch. Vorkenntnisse. Datenstrukturen & Algorithmen

Uebersicht. Webpage & Ilias. Administratives. Lehrbuch. Vorkenntnisse. Datenstrukturen & Algorithmen Datenstrukturen & Algorithmen Uebersicht Administratives Einleitung Ein einführendes Beispiel Matthias Zwicker Universität Bern Frühling 2010 2 Administratives Dozent Prof. Zwicker, zwicker@iam.unibe.ch

Mehr

Kostenmaße. F3 03/04 p.188/395

Kostenmaße. F3 03/04 p.188/395 Kostenmaße Bei der TM nur ein Kostenmaß: Ein Schritt (Konfigurationsübergang) kostet eine Zeiteinheit; eine Bandzelle kostet eine Platzeinheit. Bei der RAM zwei Kostenmaße: uniformes Kostenmaß: (wie oben);

Mehr

Über Arrays und verkettete Listen Listen in Delphi

Über Arrays und verkettete Listen Listen in Delphi Über Arrays und verkettete Listen Listen in Delphi Michael Puff mail@michael-puff.de 2010-03-26 Inhaltsverzeichnis Inhaltsverzeichnis 1 Einführung 3 2 Arrays 4 3 Einfach verkettete Listen 7 4 Doppelt verkettete

Mehr

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12 Grundlagen: Folge 19 - Bäume 19.1 Binärbäume - Allgemeines Unter Bäumen versteht man in der Informatik Datenstrukturen, bei denen jedes Element mindestens zwei Nachfolger hat. Bereits in der Folge 17 haben

Mehr

Trendlinien in Diagrammen (Excel 2010)

Trendlinien in Diagrammen (Excel 2010) Trendlinien in Diagrammen (Excel 2010) Trendlinien in Diagrammen (Excel 2010)... 1 Allgemeines... 2 Informationen über Prognosen und das Anzeigen von Trends in Diagrammen... 3 AUSWÄHLEN DES PASSENDEN TRENDLINIETYPS

Mehr

Kapiteltests zum Leitprogramm Binäre Suchbäume

Kapiteltests zum Leitprogramm Binäre Suchbäume Kapiteltests zum Leitprogramm Binäre Suchbäume Björn Steffen Timur Erdag überarbeitet von Christina Class Binäre Suchbäume Kapiteltests für das ETH-Leitprogramm Adressaten und Institutionen Das Leitprogramm

Mehr

KAPITEL III DAS InFORMATIK- KOCHSTUDIO

KAPITEL III DAS InFORMATIK- KOCHSTUDIO Das Informatik- Kochstudio KAPITEL III 48 Das Informatik-Kochstudio Algorithmen Algorithmen III Sortieren Ordnung ist das halbe Leben. Mit diesem Spruch nerven seit Generationen Eltern ihre Kinder. Aber

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

VBA-Programmierung: Zusammenfassung

VBA-Programmierung: Zusammenfassung VBA-Programmierung: Zusammenfassung Programmiersprachen (Definition, Einordnung VBA) Softwareentwicklung-Phasen: 1. Spezifikation 2. Entwurf 3. Implementierung Datentypen (einfach, zusammengesetzt) Programmablaufsteuerung

Mehr

Programmiertechnik II

Programmiertechnik II Bäume Symboltabellen Suche nach Werten (items), die unter einem Schlüssel (key) gefunden werden können Bankkonten: Schlüssel ist Kontonummer Flugreservierung: Schlüssel ist Flugnummer, Reservierungsnummer,...

Mehr

Laufzeit und Komplexität

Laufzeit und Komplexität Laufzeit und Komplexität Laufzeit eines Algorithmus Benchmarking versus Analyse Abstraktion Rechenzeit, Anzahl Schritte Bester, Mittlerer, Schlechtester Fall Beispiel: Lineare Suche Komplexitätsklassen

Mehr

Algorithmen und Datenstrukturen 2

Algorithmen und Datenstrukturen 2 Algorithmen und Datenstrukturen 2 Sommersemester 2007 4. Vorlesung Peter F. Stadler Universität Leipzig Institut für Informatik studla@bioinf.uni-leipzig.de Traversierung Durchlaufen eines Graphen, bei

Mehr

Inhaltsverzeichnis. Was ist Informatik? 5. Programmierung 13. Einleitung. 1 Informatik 7 1.1 Was ist Informatik? 7 1.2 Teilgebiete der Informatik 8

Inhaltsverzeichnis. Was ist Informatik? 5. Programmierung 13. Einleitung. 1 Informatik 7 1.1 Was ist Informatik? 7 1.2 Teilgebiete der Informatik 8 Einleitung Was ist Informatik? 5 1 Informatik 7 1.1 Was ist Informatik? 7 1.2 Teilgebiete der Informatik 8 Programmierung 13 2 Vom Problem über den Algorithmus zum Programm 15 2.1 Vorgehensweise bei der

Mehr

MATHEMATIK 3 STUNDEN. DATUM: 8. Juni 2009

MATHEMATIK 3 STUNDEN. DATUM: 8. Juni 2009 EUROPÄISCHES ABITUR 2009 MATHEMATIK 3 STUNDEN DATUM: 8. Juni 2009 DAUER DES EXAMENS : 3 Stunden (180 Minuten) ZUGELASSENE HILFSMITTEL : Europäische Formelsammlung Nicht graphischer und nicht programmierbarer

Mehr

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek Proseminar C-Programmierung Strukturen Von Marcel Lebek Index 1. Was sind Strukturen?...3 2. Padding 5 3. Vor- und Nachteile von Padding..8 4. Padding gering halten 9 5. Anwendungsgebiete von Strukturen.11

Mehr

JOHANNES BONNEKOH. Analysis. Allgemeine Hochschulreife und Fachabitur

JOHANNES BONNEKOH. Analysis. Allgemeine Hochschulreife und Fachabitur JOHANNES BONNEKOH Analysis Allgemeine Hochschulreife und Fachabitur Vorwort Vorwort Mathematik ist eine Sprache, die uns hilft die Natur und allgemeine naturwissenschaftliche Vorgänge zu beschreiben. Johannes

Mehr

Abgabe: (vor der Vorlesung) Aufgabe 2.1 (P) O-Notation Beweisen Sie die folgenden Aussagen für positive Funktionen f und g:

Abgabe: (vor der Vorlesung) Aufgabe 2.1 (P) O-Notation Beweisen Sie die folgenden Aussagen für positive Funktionen f und g: TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen SS 2009 Grundlagen: Algorithmen und Datenstrukturen Übungsblatt 2 Prof. Dr. Helmut Seidl, S. Pott,

Mehr

Das Briefträgerproblem

Das Briefträgerproblem Das Briefträgerproblem Paul Tabatabai 30. Dezember 2011 Inhaltsverzeichnis 1 Problemstellung und Modellierung 2 1.1 Problem................................ 2 1.2 Modellierung.............................

Mehr

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen? Entscheidungsbäume Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen? Definition Entscheidungsbaum Sei T ein Binärbaum und A = {a 1,..., a n } eine zu sortierenden Menge. T ist ein Entscheidungsbaum

Mehr

186.172 Algorithmen und Datenstrukturen 1 VL 4.0 1. Übungstest WS 2010/11 26. November 2010

186.172 Algorithmen und Datenstrukturen 1 VL 4.0 1. Übungstest WS 2010/11 26. November 2010 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 1. Übungstest WS 2010/11 26.

Mehr

Ideen der Informatik Suchen und Sortieren [Ordnung muss sein ] Kurt Mehlhorn Adrian Neumann viele Folien von Kostas Panagiotou

Ideen der Informatik Suchen und Sortieren [Ordnung muss sein ] Kurt Mehlhorn Adrian Neumann viele Folien von Kostas Panagiotou Ideen der Informatik Suchen und Sortieren [Ordnung muss sein ] Kurt Mehlhorn Adrian Neumann viele Folien von Kostas Panagiotou Suchen Welche Telefonnummer hat Kurt Mehlhorn? Wie schreibt man das Wort Equivalenz?

Mehr

Variablen - %Hashes Was ist ein Hash? 'Assoziative Arrays'

Variablen - %Hashes Was ist ein Hash? 'Assoziative Arrays' Was ist ein Hash? 'Assoziative Arrays' Hashes sind array-ähnliche Datenstrukturen, die aus Schlüssel-Wert Paaren bestehen. Artikel + Preis Apfel 0,45 Banane 0,75 Ananas 1,49 Birne 0,59 %Artikel = Apfel

Mehr

50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse 11 13. 501322 Lösung 10 Punkte

50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse 11 13. 501322 Lösung 10 Punkte 50. Mathematik-Olympiade. Stufe (Regionalrunde) Klasse 3 Lösungen c 00 Aufgabenausschuss des Mathematik-Olympiaden e.v. www.mathematik-olympiaden.de. Alle Rechte vorbehalten. 503 Lösung 0 Punkte Es seien

Mehr

Schulinterner Lehrplan für das Fach Informatik der Sekundarstufe II an der Bettine von Arnim Gesamtschule

Schulinterner Lehrplan für das Fach Informatik der Sekundarstufe II an der Bettine von Arnim Gesamtschule des Zweckverbandes Langenfeld / Hilden - Sekundarstufen I und II - B.V.A-Gesamtschule Hildener Str. 3 40764 Langenfeld 02173 / 9956-0 Fax 02173 / 9956-99 Email: mail@bva-gesamtschule.de Web: www.bva-gesamtschule.de

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

Kapitel 5: Dynamisches Programmieren Gliederung

Kapitel 5: Dynamisches Programmieren Gliederung Gliederung 1. Grundlagen 2. Zahlentheoretische Algorithmen 3. Sortierverfahren 4. Ausgewählte Datenstrukturen 5. Dynamisches Programmieren 6. Graphalgorithmen 7. String-Matching 8. Kombinatorische Algorithmen

Mehr

Kap. 4.4: B-Bäume Kap. 4.5: Dictionaries in der Praxis

Kap. 4.4: B-Bäume Kap. 4.5: Dictionaries in der Praxis Kap. 4.4: B-Bäume Kap. 4.5: Dictionaries in der Praxis Professor Dr. Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund 13./14. VO DAP2 SS 2009 2./4. Juni 2009 1 2. Übungstest

Mehr

Sortieren Jiri Spale, Algorithmen und Datenstrukturen - Sortieren 1

Sortieren Jiri Spale, Algorithmen und Datenstrukturen - Sortieren 1 Sortieren 2009 Jiri Spale, Algorithmen und Datenstrukturen - Sortieren 1 Sortiermethoden (Auswahl) Allgemeine Methoden: Sortieren in Arrays Spezielle Methoden: Sortieren von Dateien 2009 Jiri Spale, Algorithmen

Mehr

Informationssicherheit - Lösung Blatt 2

Informationssicherheit - Lösung Blatt 2 Informationssicherheit - Lösung Blatt 2 Adam Glodek adam.glodek@gmail.com 13.04.2010 1 1 Aufgabe 1: One Time Pad 1.1 Aufgabenstellung Gegeben ist der folgende Klartext 12Uhr (ASCII). Verschlüsseln Sie

Mehr

T (n) = max. g(x)=n t(n) S(n) = max. g(x)=n s(n)

T (n) = max. g(x)=n t(n) S(n) = max. g(x)=n s(n) Beim Logarithmischen Kostenmaß wird, im Gegensatz zum EKM, die Stelligkeit der Werte berücksichtigt und mit in die Laufzeit eingerechnet. Beispiel: R1 := R2 (R3), wobei R2 den Wert 5, R3 den Wert 10 und

Mehr

Programmierkurs: Delphi: Einstieg

Programmierkurs: Delphi: Einstieg Seite 1 von 6 Programmierkurs: Delphi: Einstieg Aus Wikibooks Inhaltsverzeichnis 1 Einstieg Einstieg Was ist Delphi Borland Delphi ist eine RAD-Programmierumgebung von Borland. Sie basiert auf der Programmiersprache

Mehr

Programmieren Formulierung eines Algorithmus in einer Programmiersprache

Programmieren Formulierung eines Algorithmus in einer Programmiersprache Zum Titel der Vorlesung: Programmieren Formulierung eines in einer Programmiersprache Beschreibung einer Vorgehensweise, wie man zu jedem aus einer Klasse gleichartiger Probleme eine Lösung findet Beispiel:

Mehr

Grundlagen und Basisalgorithmus

Grundlagen und Basisalgorithmus Grundlagen und Basisalgorithmus Proseminar -Genetische Programmierung- Dezember 2001 David König Quelle: Kinnebrock W.: Optimierung mit genetischen und selektiven Algorithmen. München, Wien: Oldenbourg

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm 1 Vom Problem zum Programm Ein Problem besteht darin, aus einer gegebenen Menge von Informationen eine weitere (bisher unbekannte) Information zu bestimmen. 1 Vom Problem zum Programm Ein Algorithmus ist

Mehr

Vorlesung Dokumentation und Datenbanken Klausur

Vorlesung Dokumentation und Datenbanken Klausur Dr. Stefan Brass 5. Februar 2002 Institut für Informatik Universität Giessen Vorlesung Dokumentation und Datenbanken Klausur Name: Geburtsdatum: Geburtsort: (Diese Daten werden zur Ausstellung des Leistungsnachweises

Mehr

Lua Grundlagen Einführung in die Lua Programmiersprache

Lua Grundlagen Einführung in die Lua Programmiersprache Lua Grundlagen Einführung in die Lua Programmiersprache 05.05.2014 Ingo Berg berg@atvoigt.de Automatisierungstechnik Voigt GmbH Die Lua Programmiersprache Was ist Lua? freie Programmiersprache speziell

Mehr

Sortieralgorithmen. Vorlesung Algorithmen und Datenstrukturen 2. Prof. Dr. W. P. Kowalk Universität Oldenburg

Sortieralgorithmen. Vorlesung Algorithmen und Datenstrukturen 2. Prof. Dr. W. P. Kowalk Universität Oldenburg Sortieralgorithmen Vorlesung Algorithmen und Datenstrukturen 2 im SS 2004 Prof. Dr. W. P. Kowalk Universität Oldenburg Literatur Die folgenden Bücher wurden für die Vorlesung verwendet. Darüber hinaus

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

Balancierte Bäume. Martin Wirsing. in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer. http://www.pst.ifi.lmu.de/lehre/ss06/infoii/ SS 06

Balancierte Bäume. Martin Wirsing. in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer. http://www.pst.ifi.lmu.de/lehre/ss06/infoii/ SS 06 Balancierte Bäume Martin Wirsing in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer http://www.pst.ifi.lmu.de/lehre/ss06/infoii/ SS 06 2 Ziele AVL-Bäume als einen wichtigen Vertreter balancierter

Mehr

4.Grundsätzliche Programmentwicklungsmethoden

4.Grundsätzliche Programmentwicklungsmethoden 4.Grundsätzliche Programmentwicklungsmethoden 1.1 Grundlage strukturierter und objektorientierter Programmierung Begriff Software Engineering - umfaßt den gezielten Einsatz von Beschreibungsmitteln, Methoden

Mehr

Übung zur Vorlesung Einführung in die Computerlinguistik und Sprachtechnologie

Übung zur Vorlesung Einführung in die Computerlinguistik und Sprachtechnologie Übung zur Vorlesung Einführung in die Computerlinguistik und Sprachtechnologie Wintersemester 2009/10, Prof. Dr. Udo Hahn, Erik Fäßler Übungsblatt 3 vom 19.11.2009 Abgabe bis 26.11.2009, 14:30 Uhr; per

Mehr

13. Binäre Suchbäume

13. Binäre Suchbäume 1. Binäre Suchbäume Binäre Suchbäume realiesieren Wörterbücher. Sie unterstützen die Operationen 1. Einfügen (Insert) 2. Entfernen (Delete). Suchen (Search) 4. Maximum/Minimum-Suche 5. Vorgänger (Predecessor),

Mehr

geben. Die Wahrscheinlichkeit von 100% ist hier demnach nur der Gehen wir einmal davon aus, dass die von uns angenommenen

geben. Die Wahrscheinlichkeit von 100% ist hier demnach nur der Gehen wir einmal davon aus, dass die von uns angenommenen geben. Die Wahrscheinlichkeit von 100% ist hier demnach nur der Vollständigkeit halber aufgeführt. Gehen wir einmal davon aus, dass die von uns angenommenen 70% im Beispiel exakt berechnet sind. Was würde

Mehr

Beispiel zu Datenstrukturen

Beispiel zu Datenstrukturen zu Datenstrukturen Passend zum Kurs 01661 Version Juni 2008 Dieter Hoffmann Dipl.-Inform. Diese Kurshilfe zum Kurs Datenstrukuren I (Kursnummer 01661) bei Prof. Dr. Güting (Lehrgebiet Praktische Informatik

Mehr

Zum Einsatz von Operatoren im Informatikunterricht

Zum Einsatz von Operatoren im Informatikunterricht Friedrich-Schiller-Universität Jena Fakultät für Mathematik und Informatik Professur für Didaktik der Informatik/Mathematik Claudia Strödter E-Mail: claudia.stroedter@uni-jena.de Zum Einsatz von Operatoren

Mehr

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt Algorithmen und Datenstrukturen 265 10 Binäre Suchbäume Suchbäume Datenstruktur, die viele Operationen dynamischer Mengen unterstützt Kann als Wörterbuch, aber auch zu mehr eingesetzt werden (Prioritätsschlange)

Mehr

In ein quadratisches Blech werden Löcher gestanzt. Insgesamt sind es 85 Löcher. Wie viele Löcher sind in der untersten Reihe?

In ein quadratisches Blech werden Löcher gestanzt. Insgesamt sind es 85 Löcher. Wie viele Löcher sind in der untersten Reihe? Aufgabe 1: Das Stanzblech: Löcher In ein quadratisches Blech werden Löcher gestanzt. Insgesamt sind es 85 Löcher. Wie viele Löcher sind in der untersten Reihe? Bei dieser Aufgabe kann rückwärts gearbeitet

Mehr

Sprachbeschreibung und Erweiterung

Sprachbeschreibung und Erweiterung Sprachbeschreibung und Erweiterung Worte, Sprachen, reguläre Ausdrücke, Automaten, BNF, Grammatik, Syntax- Diagramme, Spracherweiterungen do, for, break, switch Formale Beschreibung von Programmiersprachen

Mehr

Datenstrukturen und Algorithmen

Datenstrukturen und Algorithmen Datenstrukturen und Algorithmen VO 708.031 Bäume robert.legenstein@igi.tugraz.at 1 Inhalt der Vorlesung 1. Motivation, Einführung, Grundlagen 2. Algorithmische Grundprinzipien 3. Sortierverfahren 4. Halden

Mehr

Seminar Komplexe Objekte in Datenbanken

Seminar Komplexe Objekte in Datenbanken Seminar Komplexe Objekte in Datenbanken OPTICS: Ordering Points To Identify the Clustering Structure Lehrstuhl für Informatik IX - Univ.-Prof. Dr. Thomas Seidl, RWTH-Aachen http://www-i9.informatik.rwth-aachen.de

Mehr

Geometrische Algorithmen

Geometrische Algorithmen Geometrische Algorithmen Thomas Röfer Motivation Scan-line-Prinzip Konvexe Hülle Distanzprobleme Voronoi-Diagramm Rückblick Manipulation von Mengen Vorrangwarteschlange Heap HeapSort swap(a, 0, 4) 1 5

Mehr