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

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

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

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

Ü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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Algorithmen. Suchalgorithmen

Algorithmen. Suchalgorithmen Algorithmen Suchalgorithmen Suchen in Tabellen Der Standardfall. Wie in der Einleitung beschrieben, handelt es sich bei den Datensätzen, die durchsucht werden sollen, um Zahlen. Ein Array könnte beispielsweise

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

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

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

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

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

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

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

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

Arbeiten mit Arrays. 4.1 Eigenschaften. 4.1.1 Schlüssel und Element. Kapitel 4

Arbeiten mit Arrays. 4.1 Eigenschaften. 4.1.1 Schlüssel und Element. Kapitel 4 Arbeiten mit s Eine effiziente Programmierung mit PHP ohne seine s ist kaum vorstellbar. Diese Datenstruktur muss man verstanden haben, sonst brauchen wir mit weitergehenden Programmiertechniken wie der

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

Kontrollstrukturen - Universität Köln

Kontrollstrukturen - Universität Köln Kontrollstrukturen - Universität Köln Mario Manno Kontrollstrukturen - Universität Köln p. 1 Was sind Sprachen Auszeichnungssprachen HTML, XML Programmiersprachen ASM, Basic, C, C++, Haskell, Java, Pascal,

Mehr

Algorithmen und Datenstrukturen 1

Algorithmen und Datenstrukturen 1 Algorithmen und Datenstrukturen 1 5. Vorlesung Martin Middendorf / Peter F. Stadler Universität Leipzig Institut für Informatik middendorf@informatik.uni-leipzig.de studla@bioinf.uni-leipzig.de Quick-Sort

Mehr

A1.7: Entropie natürlicher Texte

A1.7: Entropie natürlicher Texte A1.7: Entropie natürlicher Texte Anfang der 1950er Jahre hat Claude E. Shannon die Entropie H der englischen Sprache mit einem bit pro Zeichen abgeschätzt. Kurz darauf kam Karl Küpfmüller bei einer empirischen

Mehr

9.4 Binäre Suchbäume. Xiaoyi Jiang Informatik II Datenstrukturen und Algorithmen

9.4 Binäre Suchbäume. Xiaoyi Jiang Informatik II Datenstrukturen und Algorithmen 9.4 Binäre Suchbäume Erweiterung: Einfügen an der Wurzel Standardimplementierung: Der neue Schlüssel wird am Ende des Suchpfades angefügt (natürlich, weil zuerst festgestellt werden muss, ob der Schlüssel

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

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

Programmierung, Algorithmen und Techniken. von Thomas Ohlhauser

Programmierung, Algorithmen und Techniken. von Thomas Ohlhauser Programmierung, Algorithmen und Techniken von Thomas Ohlhauser 1. Begriff Programmierung Entwicklung von Programmen inklusive der dabei verwendeten Methoden und Denkweisen. Ein Programm ist eine eine Zusammensetzung

Mehr

MATHEMATISCHE ANALYSE VON ALGORITHMEN

MATHEMATISCHE ANALYSE VON ALGORITHMEN MATHEMATISCHE ANALYSE VON ALGORITHMEN Michael Drmota Institut für Diskrete Mathematik und Geometrie, TU Wien michael.drmota@tuwien.ac.at www.dmg.tuwien.ac.at/drmota/ Ringvorlesung SS 2008, TU Wien Algorithmus

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

3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel

3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel 3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel EADS 3.1 Konstruktion von minimalen Spannbäumen 16/36

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

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

Algorithmen und Datenstrukturen Suchbaum

Algorithmen und Datenstrukturen Suchbaum Algorithmen und Datenstrukturen Suchbaum Matthias Teschner Graphische Datenverarbeitung Institut für Informatik Universität Freiburg SS 12 Motivation Datenstruktur zur Repräsentation dynamischer Mengen

Mehr

4 Greedy-Algorithmen (gierige Algorithmen)

4 Greedy-Algorithmen (gierige Algorithmen) Greedy-Algorithmen (gierige Algorithmen) Greedy-Algorithmen werden oft für die exakte oder approximative Lösung von Optimierungsproblemen verwendet. Typischerweise konstruiert ein Greedy-Algorithmus eine

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens aw@awilkens.com Überblick Grundlagen Definitionen Elementare Datenstrukturen Rekursionen Bäume 2 1 Datenstruktur Baum Definition eines Baumes

Mehr

Approximationsalgorithmen

Approximationsalgorithmen Ausarbeitung zum Thema Approximationsalgorithmen im Rahmen des Fachseminars 24. Juli 2009 Robert Bahmann robert.bahmann@gmail.com FH Wiesbaden Erstellt von: Robert Bahmann Zuletzt berarbeitet von: Robert

Mehr

RSA Verfahren. Kapitel 7 p. 103

RSA Verfahren. Kapitel 7 p. 103 RSA Verfahren RSA benannt nach den Erfindern Ron Rivest, Adi Shamir und Leonard Adleman war das erste Public-Key Verschlüsselungsverfahren. Sicherheit hängt eng mit der Schwierigkeit zusammen, große Zahlen

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

Lenstras Algorithmus für Faktorisierung

Lenstras Algorithmus für Faktorisierung Lenstras Algorithmus für Faktorisierung Bertil Nestorius 9 März 2010 1 Motivation Die schnelle Faktorisierung von Zahlen ist heutzutage ein sehr wichtigen Thema, zb gibt es in der Kryptographie viele weit

Mehr

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014 Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung Klaus Kusche, September 2014 Inhalt Ziel & Voraussetzungen Was sind abstrakte Datentypen? Was kann man damit grundsätzlich?

Mehr

Data Mining und Text Mining Einführung. S2 Einfache Regellerner

Data Mining und Text Mining Einführung. S2 Einfache Regellerner Data Mining und Text Mining Einführung S2 Einfache Regellerner Hans Hermann Weber Univ. Erlangen, Informatik 8 Wintersemester 2003 hans.hermann.weber@gmx.de Inhalt Einiges über Regeln und Bäume R1 ein

Mehr

Codierung. Auszug aus dem Skript von Maciej Liśkiewicz und Henning Fernau

Codierung. Auszug aus dem Skript von Maciej Liśkiewicz und Henning Fernau Codierung Auszug aus dem Skript von Maciej Liśkiewicz und Henning Fernau Ein bisschen Informationstheorie Betrachten wir das folgende Problem: Wie lautet eine sinnvolle Definition für das quantitative

Mehr

Teil II. Nichtlineare Optimierung

Teil II. Nichtlineare Optimierung Teil II Nichtlineare Optimierung 60 Kapitel 1 Einleitung In diesem Abschnitt wird die Optimierung von Funktionen min {f(x)} x Ω betrachtet, wobei Ω R n eine abgeschlossene Menge und f : Ω R eine gegebene

Mehr

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume. Universität Osnabrück 1 Bäume 3 - Objektorientierte Programmierung in Java Vorlesung 10: Collections 4 Einführung Bäume sind verallgemeinerte Listenstrukturen Lineare Liste Jedes Element hat höchstens

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

LISE MEITNER GYMNASIUM NEUENHAUS UELSEN

LISE MEITNER GYMNASIUM NEUENHAUS UELSEN Entwurf eines schulinternen Curriculums im Fach Informatik für die Qualifikationsphase (Jahrgang 11 und 12) Für die Gestaltung des Informatikunterrichts in der Qualifikationsphase sind für das schulinterne

Mehr

KONSTRUKTION VON ROT-SCHWARZ-BÄUMEN

KONSTRUKTION VON ROT-SCHWARZ-BÄUMEN KONSTRUKTION VON ROT-SCHWARZ-BÄUMEN RALF HINZE Institut für Informatik III Universität Bonn Email: ralf@informatik.uni-bonn.de Homepage: http://www.informatik.uni-bonn.de/~ralf Februar, 2001 Binäre Suchbäume

Mehr

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / 2015. Vorlesung 8, Donnerstag 11.

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / 2015. Vorlesung 8, Donnerstag 11. Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / 2015 Vorlesung 8, Donnerstag 11. Dezember 2014 (Cache-Effizienz, Teile und Herrsche) Junior-Prof. Dr.

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

Elemente der Analysis II

Elemente der Analysis II Elemente der Analysis II Kapitel 3: Lineare Abbildungen und Gleichungssysteme Informationen zur Vorlesung: http://www.mathematik.uni-trier.de/ wengenroth/ J. Wengenroth () 15. Mai 2009 1 / 35 3.1 Beispiel

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Steffen Börm Stand 17. Juli 014, 9 Uhr 30 Alle Rechte beim Autor. Inhaltsverzeichnis 1 Einleitung 5 Algorithmen und ihre Eigenschaften 7.1 Beispiel: Suchen in Arrays...........................

Mehr

Formelsammlung. Wahrscheinlichkeit und Information

Formelsammlung. Wahrscheinlichkeit und Information Formelsammlung Wahrscheinlichkeit und Information Ein Ereignis x trete mit der Wahrscheinlichkeit p(x) auf, dann ist das Auftreten dieses Ereignisses verbunden mit der Information I( x): mit log 2 (z)

Mehr

Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer

Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer Das RSA-Verschlüsselungsverfahren 1 Christian Vollmer Allgemein: Das RSA-Verschlüsselungsverfahren ist ein häufig benutztes Verschlüsselungsverfahren, weil es sehr sicher ist. Es gehört zu der Klasse der

Mehr

Binäre lineare Optimierung mit K*BMDs p.1/42

Binäre lineare Optimierung mit K*BMDs p.1/42 Binäre lineare Optimierung mit K*BMDs Ralf Wimmer wimmer@informatik.uni-freiburg.de Institut für Informatik Albert-Ludwigs-Universität Freiburg Binäre lineare Optimierung mit K*BMDs p.1/42 Grundlagen Binäre

Mehr

Anleitung zum Zusatzmodul Inventur

Anleitung zum Zusatzmodul Inventur Anleitung zum Zusatzmodul Inventur Inhaltsverzeichnis Allgemeine Angaben zum Inventurmodul Funktion des Inventurmoduls Starten des Moduls Selektion von Artikeln für die Inventur Aufbau des Inventurmoduls

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

Anwendungsbeschreibung des ReNoStar-Druckers

Anwendungsbeschreibung des ReNoStar-Druckers Anwendungsbeschreibung des ReNoStar-Druckers Stand September 2007 Inhalt Inhalt... 2 Anforderung aus der Praxis... 3 Die ReNoStar Drucker-Leiste... 3 Erstellen einer Vorlage... 3 Reihenfolge der Vorlagen

Mehr

Vom Abitur zur Informatik (computer science)

Vom Abitur zur Informatik (computer science) Vom Abitur zur Informatik (computer science) André Frimberger, andre@frimberger.de 16.06.2009 André Frimberger Vom Abitur zur Informatik (computer science) 1 1 Einleitung Was ist Informatik? 2 Das Informatikstudium:

Mehr

Algorithmen und Programmieren II Einführung in Python

Algorithmen und Programmieren II Einführung in Python Algorithmen und Programmieren II Einführung in Python SS 2012 Prof. Dr. Margarita Esponda 1 Was ist Python? eine Skript-Sprache Anfang der 90er Jahre entwickelt. Erfinder: Guido van Rossum an der Universität

Mehr

WICHTIG!: Speichern Sie die Backup Datei außerhalb Safe and itunes. Für weitere Infos schauen Sie bitte unter Safe Backup erstellen.

WICHTIG!: Speichern Sie die Backup Datei außerhalb Safe and itunes. Für weitere Infos schauen Sie bitte unter Safe Backup erstellen. Safe Anleitung Safe erlaubt Ihnen Ihre sensiblen Daten zu organisieren und zu speichern. Sie können beliebige Kategorien zur Organisation Ihrer Daten erstellen. Wir bieten Ihnen vordefinierte Vorlagen

Mehr

Numerisches Programmieren

Numerisches Programmieren Technische Universität München SS 2012 Institut für Informatik Prof Dr Thomas Huckle Dipl-Inf Christoph Riesinger Dipl-Math Alexander Breuer Dipl-Math Dipl-Inf Jürgen Bräckle Dr-Ing Markus Kowarschik Numerisches

Mehr

15 Optimales Kodieren

15 Optimales Kodieren 15 Optimales Kodieren Es soll ein optimaler Kodierer C(T ) entworfen werden, welcher eine Information (z.b. Text T ) mit möglichst geringer Bitanzahl eindeutig überträgt. Die Anforderungen an den optimalen

Mehr

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können. 6. Bäume Lernziele 6. Bäume Lernziele: Definition und Eigenschaften binärer Bäume kennen, Traversierungsalgorithmen für binäre Bäume implementieren können, die Bedeutung von Suchbäumen für die effiziente

Mehr

syntax.tex Eine Übersicht

syntax.tex Eine Übersicht syntax.tex Eine Übersicht Bernd Worsch 7. Juli 1997 Inhaltsverzeichnis 1 Einleitung 1 2 Bevor es funktioniert... 1 3 Grundelemente von syntax.tex 1 4 Strukturelemente von syntax.tex 3 5 Setzen von Syntaxdiagrammen

Mehr

1.4.12 Sin-Funktion vgl. Cos-Funktion

1.4.12 Sin-Funktion vgl. Cos-Funktion .4. Sgn-Funktion Informatik. Semester 36 36.4.2 Sin-Funktion vgl. Cos-Funktion Informatik. Semester 37 37 .4.3 Sqr-Funktion Informatik. Semester 38 38.4.4 Tan-Funktion Informatik. Semester 39 39 .5 Konstanten

Mehr

Mathematische Grundlagen der Kryptographie. 1. Ganze Zahlen 2. Kongruenzen und Restklassenringe. Stefan Brandstädter Jennifer Karstens

Mathematische Grundlagen der Kryptographie. 1. Ganze Zahlen 2. Kongruenzen und Restklassenringe. Stefan Brandstädter Jennifer Karstens Mathematische Grundlagen der Kryptographie 1. Ganze Zahlen 2. Kongruenzen und Restklassenringe Stefan Brandstädter Jennifer Karstens 18. Januar 2005 Inhaltsverzeichnis 1 Ganze Zahlen 1 1.1 Grundlagen............................

Mehr

Vorlesung Algorithmische Geometrie. Streckenschnitte. Martin Nöllenburg 19.04.2011

Vorlesung Algorithmische Geometrie. Streckenschnitte. Martin Nöllenburg 19.04.2011 Vorlesung Algorithmische Geometrie LEHRSTUHL FÜR ALGORITHMIK I INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK Martin Nöllenburg 19.04.2011 Überlagern von Kartenebenen Beispiel: Gegeben zwei

Mehr

Suchen und Sortieren

Suchen und Sortieren (Folie 69, Seite 36 im Skript) 5 6 1 4 Als assoziatives Array geeignet Schlüssel aus geordneter Menge Linke Kinder kleiner, rechte Kinder größer als Elternknoten Externe und interne Knoten Externe Knoten

Mehr

2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik

2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik Stefan Lucks Diskrete Strukturen (WS 2009/10) 57 2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik Uhr: Stunden mod 24, Minuten mod 60, Sekunden mod 60,... Rechnerarithmetik: mod 2 w, w {8, 16, 32,

Mehr

ABITURPRÜFUNG 2009 LEISTUNGSFACH INFORMATIK

ABITURPRÜFUNG 2009 LEISTUNGSFACH INFORMATIK ABITURPRÜFUNG 2009 LEISTUNGSFACH INFORMATIK (HAUPTTERMIN) Bearbeitungszeit: 270 Minuten Hilfsmittel: Wörterbuch zur deutschen Rechtschreibung Taschenrechner (nicht programmierbar, nicht grafikfähig) (Schüler,

Mehr

Kurzeinführung in C++

Kurzeinführung in C++ Kurzeinführung in C++ Johannes J. Schneider 27.10.2004 1 Einleitung C++ ist eine heutzutage in vielen Bereichen sehr häufig verwendete Programmiersprache, die auf der Programmiersprache C aufsetzt, aber

Mehr

2 Informationstheorie

2 Informationstheorie 2 Informationstheorie Formale Grundlagen der Informatik I Herbstsemester 2012 Robert Marti Vorlesung teilweise basierend auf Unterlagen von Prof. emer. Helmut Schauer Grundbegriffe Informatik (IT: Information

Mehr

Regionen in Binärbildern

Regionen in Binärbildern Regionen in Binärbildern Industrielle Bildverarbeitung, Vorlesung No. 9 1 M. O. Franz 05.12.2007 1 falls nicht anders vermerkt, sind die Abbildungen entnommen aus Burger & Burge, 2005. Übersicht 1 Auffinden

Mehr

Das Studiengangsinformationssystem (SGIS)

Das Studiengangsinformationssystem (SGIS) Das Studiengangsinformationssystem (SGIS) Manual für Typo3-Redakteure Version 1.a Mai 2015 Kontakt: Referat 1.4 - Allgemeine Studienberatung und Career Service Christian Birringer, christian.birringer@uni-rostock.de

Mehr

Algorithmen und Datenstrukturen Balancierte Suchbäume

Algorithmen und Datenstrukturen Balancierte Suchbäume Algorithmen und Datenstrukturen Balancierte Suchbäume Matthias Teschner Graphische Datenverarbeitung Institut für Informatik Universität Freiburg SS 12 Überblick Einführung Einfügen und Löschen Einfügen

Mehr

IT-Sicherheit Kapitel 3 Public Key Kryptographie

IT-Sicherheit Kapitel 3 Public Key Kryptographie IT-Sicherheit Kapitel 3 Public Key Kryptographie Dr. Christian Rathgeb Sommersemester 2013 1 Einführung In der symmetrischen Kryptographie verwenden Sender und Empfänger den selben Schlüssel die Teilnehmer

Mehr

Teile und Herrsche Teil 2

Teile und Herrsche Teil 2 Teile und Herrsche Teil 2 binär Suchen und schnell Multiplizieren Markus Fleck Manuel Mauky Hochschule Zittau/Görlitz 19. April 2009 Suchen in langen Listen (0, 1, 2, 7, 8, 9, 9, 13, 13, 14, 14, 14, 16,

Mehr

Verteilungsmodelle. Verteilungsfunktion und Dichte von T

Verteilungsmodelle. Verteilungsfunktion und Dichte von T Verteilungsmodelle Verteilungsfunktion und Dichte von T Survivalfunktion von T Hazardrate von T Beziehungen zwischen F(t), S(t), f(t) und h(t) Vorüberlegung zu Lebensdauerverteilungen Die Exponentialverteilung

Mehr

Werkstatt Multiplikation Posten: 8-Bit Multiplikation. Informationsblatt für die Lehrkraft. 8-Bit Multiplikation

Werkstatt Multiplikation Posten: 8-Bit Multiplikation. Informationsblatt für die Lehrkraft. 8-Bit Multiplikation Informationsblatt für die Lehrkraft 8-Bit Multiplikation Informationsblatt für die Lehrkraft Thema: Schultyp: Vorkenntnisse: Bearbeitungsdauer: 8-Bit Multiplikation (im Binärsystem) Mittelschule, technische

Mehr

Freiherr-vom-Stein Schule Fach: Mathematik Herr Pfaffenbach. Logistisches Wachstum. am Beispiel einer Hefekultur

Freiherr-vom-Stein Schule Fach: Mathematik Herr Pfaffenbach. Logistisches Wachstum. am Beispiel einer Hefekultur Freiherr-vom-Stein Schule Fach: Mathematik Herr Pfaffenbach Logistisches Wachstum am Beispiel einer Hefekultur 16.04.2012 Inhaltsverzeichnis 1.0 Vorwort...3 2.0 Logistisches Wachstum allgemein...4 2.1

Mehr

Lua - Erste Schritte in der Programmierung

Lua - Erste Schritte in der Programmierung Lua - Erste Schritte in der Programmierung Knut Lickert 7. März 2007 Dieser Text zeigt einige einfache Lua-Anweisungen und welchen Effekt sie haben. Weitere Informationen oder eine aktuelle Version dieses

Mehr

Prognosen via Datenanalyse Predictive Analytics: Darauf müssen Unternehmen achten

Prognosen via Datenanalyse Predictive Analytics: Darauf müssen Unternehmen achten Prognosen via Datenanalyse Predictive Analytics: Darauf müssen Unternehmen achten von Jürgen Mauerer Foto: Avantum Consult AG Seite 1 von 21 Inhalt Mehrwert aufzeigen nach Analyse des Geschäftsmodells...

Mehr

Tutoren Simon Andermatt Lukas Beck. Alexis Peter Thomas Ritter

Tutoren Simon Andermatt Lukas Beck. Alexis Peter Thomas Ritter UNIVERSITÄT BASEL Dozent Prof. Dr. Thomas Vetter Departement Informatik Assistenten Brian Amberg Andreas Forster Tutoren Simon Andermatt Lukas Beck Webseite http://informatik.unibas.ch/lehre/hs10/cs101/index.html

Mehr

Vorname:... Matrikel-Nr.:... Unterschrift:...

Vorname:... Matrikel-Nr.:... Unterschrift:... Fachhochschule Mannheim Hochschule für Technik und Gestaltung Fachbereich Informatik Studiengang Bachelor of Computer Science Algorithmen und Datenstrukturen Wintersemester 2003 / 2004 Name:... Vorname:...

Mehr

KV Software Engineering Übungsaufgaben SS 2005

KV Software Engineering Übungsaufgaben SS 2005 KV Software Engineering Übungsaufgaben SS 2005 Martin Glinz, Silvio Meier, Nancy Merlo-Schett, Katja Gräfenhain Übung 1 Aufgabe 1 (10 Punkte) Lesen Sie das Originalpapier von Dijkstra Go To Statement Considered

Mehr

Echtzeitfähige Ereignisgetriebene Scheduling-Strategien

Echtzeitfähige Ereignisgetriebene Scheduling-Strategien Friedrich-Alexander-Universität Erlangen-Nürnberg Ausgewählte Kapitel eingebetteter Systeme Echtzeitfähige Ereignisgetriebene Scheduling-Strategien Sven Kerschbaum 1. Einführung Bei einem eingebetteten

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

Humboldt-Universität zu Berlin Institut Für Informatik. Standardalgorithmen. Sortierverfahren in Java insbesondere Bubblesort. Unterrichtsentwurf

Humboldt-Universität zu Berlin Institut Für Informatik. Standardalgorithmen. Sortierverfahren in Java insbesondere Bubblesort. Unterrichtsentwurf Humboldt-Universität zu Berlin Institut Für Informatik Standardalgorithmen Sortierverfahren in Java insbesondere Bubblesort Unterrichtsentwurf 1. Unterrichtsvoraussetzungen 1.1 Angaben zur Klasse Der Unterricht

Mehr

3. Übung Algorithmen I

3. Übung Algorithmen I Timo Bingmann, Christian Schulz INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS 1 KIT Timo Universität Bingmann, des LandesChristian Baden-Württemberg Schulz und nationales Forschungszentrum in der

Mehr

A-Plan 12.0. Zeiterfassung 2.0. Ausgabe 1.1. Copyright. Warenzeichenhinweise

A-Plan 12.0. Zeiterfassung 2.0. Ausgabe 1.1. Copyright. Warenzeichenhinweise A-Plan 12.0 Zeiterfassung 2.0 Ausgabe 1.1 Copyright Copyright 1996-2014 braintool software gmbh Kein Teil dieses Handbuches darf ohne ausdrückliche Genehmigung von braintool software gmbh auf mechanischem

Mehr