Programmieren I. Kapitel 7. Sortieren und Suchen



Ähnliche Dokumente
Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)

Überblick. Lineares Suchen

Sortierverfahren. Sortierverfahren für eindimensionale Arrays

Abschnitt: Algorithmendesign und Laufzeitanalyse

Codes und Informationsgehalt

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

Sortierverfahren für Felder (Listen)

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

ALP I. Funktionale Programmierung

1 Vom Problem zum Programm

Algorithmen und Datenstrukturen

Übung Grundlagen der Programmierung. Übung 05: Arrays. Abgabetermin: xx.xx.xxxx. Java-Programm Testplan Testergebnisse

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

Vorkurs Informatik WiSe 15/16

Datenstrukturen & Algorithmen

Objektorientierte Programmierung

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

Teile und Herrsche Teil 2

Fragen für die Klausuren

Programmierkurs Java

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Algorithmen & Datenstrukturen 1. Klausur

Java: Vererbung. Teil 3: super()

Kapiteltests zum Leitprogramm Binäre Suchbäume

1 topologisches Sortieren

Repetitionsaufgaben Wurzelgleichungen

Datenexport aus JS - Software

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Wirtschaftsinformatik I

Übungen Programmieren 1 Felix Rohrer. Übungen

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Professionelle Seminare im Bereich MS-Office

Einführung in die Programmierung für Wirtschaftsinformatik

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

MATHEMATISCHE ANALYSE VON ALGORITHMEN

SEP 114. Design by Contract

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

16. All Pairs Shortest Path (ASPS)

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

7 Rechnen mit Polynomen

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

Sortieralgorithmen. Inhalt: InsertionSort BubbleSort QuickSort. Marco Block

GOLDESEL-Schulung Referat 05 Finanzcontrolling

Software Engineering Klassendiagramme Assoziationen

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Kapitel 6: Graphalgorithmen Gliederung

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

Programmiertechnik II

Statuten in leichter Sprache

Kapitel 5: Dynamisches Programmieren Gliederung

Programmiertechnik II

Zeichen bei Zahlen entschlüsseln

Suchen und Sortieren (Die klassischen Algorithmen)

Grundlagen des Maschinellen Lernens Kap. 4: Lernmodelle Teil II

Software Engineering Interaktionsdiagramme

Die Post hat eine Umfrage gemacht

Leichte-Sprache-Bilder

Numerische Verfahren und Grundlagen der Analysis

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl:

Grundlagen der Künstlichen Intelligenz

EndTermTest PROGALGO WS1516 A

Über das Menü Zusätze Importe Import aus Fink Stunderfassung Lohnartenumschlüsselung gelangen Sie zu folgendem Eingabebildschirm:

Grundlagen der Theoretischen Informatik, SoSe 2008

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Zahlen und das Hüten von Geheimnissen (G. Wiese, 23. April 2009)

Erwin Grüner

Alle Schlüssel-Karten (blaue Rückseite) werden den Schlüssel-Farben nach sortiert und in vier getrennte Stapel mit der Bildseite nach oben gelegt.

Welches Problem denn? Das Heiratsproblem. Formale Beschreibung. Paarungen

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Kugel-Fächer-Modell. 1fach. 3fach. Für die Einzelkugel gibt es 3 Möglichkeiten. 6fach. 3! Möglichkeiten

In vergleichsbasierten Suchbäumen wird nicht in Schlüssel hineingeschaut.

Primzahlen und RSA-Verschlüsselung

Anmerkungen zur Übergangsprüfung

Den Durchblick haben. VOLKSBANK BAD MÜNDER eg. Online aber sicher: Unsere Produkt- und Sicherheitshotline hilft und informiert

9 Auto. Rund um das Auto. Welche Wörter zum Thema Auto kennst du? Welches Wort passt? Lies die Definitionen und ordne zu.

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Zahlenwinkel: Forscherkarte 1. alleine. Zahlenwinkel: Forschertipp 1

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können.

Internet Explorer Version 6

Eva Douma: Die Vorteile und Nachteile der Ökonomisierung in der Sozialen Arbeit

Mediator 9 - Lernprogramm

Was meinen die Leute eigentlich mit: Grexit?

- k Maximalwerte aus Menge mit n >> k Elementen (Rangfolgebestimmung von Suchmaschinen!) Die typische Operationen:

Kurzanleitung fu r Clubbeauftragte zur Pflege der Mitgliederdaten im Mitgliederbereich

Einführung in die Programmierung

40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst.

Grundbegriffe der Informatik

Senioren helfen Junioren

Access [basics] Gruppierungen in Abfragen. Beispieldatenbank. Abfragen gruppieren. Artikel pro Kategorie zählen

Deutsches Rotes Kreuz. Kopfschmerztagebuch von:

Kurzanleitung MAN E-Learning (WBT)

1. Grundlagen Sortieren Vertauschen Selektion Einfügen Quicksort Suchen...

3 Wie bekommen Sie Passwortlevel 3 und einen Installateurscode?

Tagesprogramm

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Transkript:

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 Eigenschaften und Idee Beispiele: Selection, Insertion, Quick, Mergesort, evtl. Bucketsort

Ordnungen reflexiv a <= a transitiv a <= b und b <= c dann a <= c (antisymmetrisch) a <= b und b <= a dann a = b partiell vs. total (nicht) alle Elemente sind vergleichbar

Lineare Suche Eingabe: ein Array a mit Daten; ein Element x Ausgabe: kommt x in a vor? oder: welchen Index hat x in a? Voraussetzung: Test auf Gleichheit Idee: laufe durch das Array, bis der Eintrag gefunden ist. Abbruch des Durchlaufs mit break; Auswertung, ob der Durchlaufindex < a.length Aufwand: Zeit: O(n), Durchschnitt: n/2 Elegante Verallgemeinerung (nicht in JAVA): Prädikat (boolwertige Funktion) als Parameter Failure Resultat bei Variante 2 wird oft unsauber gelöst

Bisektionssuche (Binäre Suche) Eingabe: ein Array a mit sortierten (!) Daten; ein Element x Ausgabe: kommt x in a vor? oder: welchen Index hat x in a? Voraussetzung: Test auf Gleichheit; Ordnung der Elemente Idee: schau in der Mitte des Arrays nach ob das Element kleiner als x ist => suche in der linken Arrayhälfte größer als x ist => suche in der rechten Arrayhälfte gleich x ist => Rückgabe von true oder Indexwert solange, bis aktueller Arraybereich leer ist => Rückgabe false/fail logarithmischer Aufwand: O(log n) Prinzip: schrumpfender Suchraum; Zusicherung: Invariante

Sortieren Grundprinzip Eingabe: ein unsortiertes Array Ausgabe: ein sortiertes Array Voraussetzung: Ordnung der Elemente Erste Idee (für viele Sortierverfahren): so lange es Fehlstellungen gibt, d.h.: i<j und a[i]>a[j], vertausche die Elemente void swap (long[] a, int i, int j) { long aux = a[i]; a[i] = a[j]; a[j] = aux; }

Sortieren Grundprinzip und Überblick Verfeinerte Idee: Anstatt das Array auf einmal zu sortieren, zerlege es, sortiere die Teile und mische die sortierten Teile zusammen (divide and conquer) D&C teilt typischerweise in etwa gleiche Teile; wir erlauben aber auch 1 vs. (n 1) Teilung Klassifizierung: Aufwand beim Aufteilen oder Zusammenmischen

Sortieren Grundprinzip und Überblick Klassifizierung: Weitere Kriterien: stabile Verfahren: ändern die Reihenfolge von gleichen Elementen nicht in situ Verfahren: brauchen keinen (nur O(1)) Hilfsspeicher Art der Aufwand steckt in Zerlegung Zerlegung Mischen 1 + Rest Selection sort Insertion sort gleiche Teile Quicksort Mergesort

Selection sort Idee: dann wiederhole dasselbe für den Bereich 1.. a.length 1 u.s.w. bis der Bereich leer wird Aufwand: Vergleiche: (n 1) + (n 2) +... + 2 + 1 = O(n 2 ) sortiert unsortiert w j suche das kleinste Element im Bereich 0.. a.length 1 und stelle es ganz nach links (in diesem Bereich) Vertauschungen (worst case): O(n) [im Durchschnitt n/2] Gesamt: O(n 2 ) Eigenschaften: in situ, nicht stabil (weil linkes Element zufällig nach rechts geswappt wird)

Insertion sort sortiert unsortiert j w nimm der Reihe nach das 1., 2., 3.,... Element und Idee: wenn es für seine Position zu klein ist, dann tausche es so lange mit seinem linken Nachbarn, bis es passt Aufwand: Vergleiche und Vertauschungen (worst case) je: 1 + 2 +... + (n 2) + (n 1) = O(n 2 ) [im Durchschnitt die Hälfte] Gesamt: O(n 2 ) Eigenschaften: in situ, stabil Verbesserung: statt Einzelvertauschung suche (log!) Platz und mache efiizienten (aber trotzdem linearen) Speichershift

Quicksort Idee: schiebe (swappe) alle kleinen Werte in die linke, und die großen in die rechte Hälfte und sortiere beide Teile unabhängig rekursiv (kein Mischen nötig!) klein und groß im Vergleich zu einem Pivot Element, z.b. dem ersten Eintrag im zu sortierenden Teilarray Aufwand: im Mittel: O(n*log n): Anzahl der Swaps: n + 2* n/2 + 4 * n/4 +... [log n viele Smd.en] im worst case: O(n 2 ) Eigenschaften: in situ, nicht stabil

Quicksort quicksort: rearrange < p = p sort >p sort rearrange: < p = p x? >p b w r return new Pair(b,r)

Mergesort Idee: teile das Array in zwei gleich große Teile (ohne weitere Bedingung), kopiere die Teile in Hilfsrarrays und sortiere diese rekursiv beim Mischen nimm jeweils das kleinere der beiden Minima zuerst in das Ergebnisarray auf (und setze den entsprechenden Minimumszeiger eins weiter) Aufwand: Zeit immer: O(n*log n): in jedem der log n Schritte: n Elemente verteilen und (nach der Rekursion) einzeln zurückkopieren. Platz: O(n) wegen des Hilfsarrays, daher: Eigenschaften: nicht in situ, aber stabil

Mergesort a b a b a i copy m j i m j i m j i m j merge sort(b,a,i,m) sort(a,b,m+1,j) i m j

Bucket sort Voraussetzung: die möglichen Werte der Sortierschlüssel sind bekannt Idee: die Werte der Sortierschlüssel aufzählen und dann die Daten der Reihe nach in die richtigen Schlüssel buckets einhängen Aufwand: linear Typisches Beispiel: Sortierung nach dem ersten Buchstaben des Namens

Zusammenfassung Ordnung Suchen lineares vs. binäres Suchen Sortieren divide & conquer Klassifizierung: wie wird geteilt? wann ist der Aufwand? Beispiele: Selection, Insertion, Quick, Mergesort Sonderfall: Bucketsort häufigste Computeranwendung kennengelernt am effizientesten in der Praxis: Hybridverfahren