Grundlagen der Programmierung

Ähnliche Dokumente
7. Sortieren Lernziele. 7. Sortieren

Abschnitt 19: Sortierverfahren

Algorithmen und Datenstrukturen 1

Grundlegende Sortieralgorithmen

Grundlegende Sortieralgorithmen

Grundlegende Sortieralgorithmen

(08 - Einfache Sortierverfahren)

In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht:

Interne Sortierverfahren

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

Algorithmen und Datenstrukturen 1 VU 6.0 Nachtragstest SS Oktober 2014

Karlsruher Institut für Technologie Institut für Theoretische Informatik. Übungsklausur Algorithmen I

Kapitel 2. Weitere Beispiele Effizienter Algorithmen

Teil VII. Hashverfahren

Grundlagen der Informatik

Programmieren I. Kapitel 7. Sortieren und Suchen

Übung: Algorithmen und Datenstrukturen SS 2007

Programmierung mit C Algorithmen

JAVA - Suchen - Sortieren

3.2. Divide-and-Conquer-Methoden

Übung Algorithmen und Datenstrukturen

3. Hausübung Algorithmen und Datenstrukturen

Algorithms & Data Structures 2

NAME, VORNAME: Studiennummer: Matrikel:

Algorithmen und Datenstrukturen 12

Was ist ein assoziativer Speicher?

Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen

Kapitel 3: Sortierverfahren Gliederung

Einführung in die Informatik Algorithmen und Datenstrukturen. Thema 17 Sortieren

Suchen und Sortieren Sortieren. Heaps

Datenstrukturen und Algorithmen. 7. Suchen in linearen Feldern

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Suchen. Lineare Suche. Such-Algorithmen. Sommersemester Dr.

4. Sortieren 4.1 Vorbemerkungen

Übung Algorithmen und Datenstrukturen

2. Hausübung Algorithmen und Datenstrukturen

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

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Zeitkomplexität beim Suchen und Sortieren

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Algorithmen und Datenstrukturen 1

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Suchverfahren Autor: Stefan Edelkamp / Sven Schuierer

Satz 172 Jedes vergleichsbasierte Sortierverfahren benötigt im worst-case mindestens n ld n + O(n) Vergleiche und hat damit Laufzeit Ω(n log n).

Algorithmen und Datenstrukturen

Suchen und Sortieren

Das Suchproblem 4. Suchen Das Auswahlproblem Suche in Array

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

Prof. Dr. Margarita Esponda

Übung Algorithmen I

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

Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8

Suchen. lineare Suche, binäre Suche, divide and conquer, rekursive und iterative Algorithmen, geordnete Daten, Comparable

Sortieren und Suchen. Jens Wächtler Hallo Welt! -Seminar LS 2

Übungsklausur Algorithmen I

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

Das Suchproblem 4. Suchen Das Auswahlproblem Suche in Array

Datenbanken. Interne Datenorganisation:

Inhaltsverzeichnis. Teil 1 Grundlagen 21. Teil 2 Datenstrukturen 85

Klausur Algorithmen und Datenstrukturen

Klausur Algorithmen und Datenstrukturen

Mathematik AG. Geschickt gesucht ist halb gefunden: Suchen und Sortieren mit Mathe

Grundlagen der Programmierung

Heapsort. 1. Erstelle aus dem gegebenen Array einen Max-Heap (DownHeap) 2. Tausche erstes und letztes Element des Arrays

Ziele. Kapitel 10: Komplexität von Algorithmen und Sortierverfahren. Beispiel: Lineare Suche eines Elements in einem Array (1)

Sortieralgorithmen. Selection Sort

Algorithmen und Datenstrukturen (für ET/IT)

Übung Datenstrukturen. Sortieren

Dynamische Datenstrukturen

Themen. Hashverfahren. Stefan Szalowski Programmierung II Hashverfahren

13. Bäume: effektives Suchen und Sortieren

Übung Algorithmen und Datenstrukturen

Transkript:

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 von Prof. Dr.-Ing. Faustmann (ebenfalls FHW Berlin) übernommen worden. Für die Bereitstellung dieses Vorlesungsmaterials möchte ich mich an dieser Stelle noch einmal recht herzlich bedanken. 12.01.2012 Prof. Dr. Andreas Schmietendorf 1

Suchalgorithmen 12.01.2012 Prof. Dr. Andreas Schmietendorf 2

Suchalgorithmen Allgemeines Problem der Suche: Innerhalb einer Datensammlung wird nach einem oder mehreren Datensätzen mit einer bestimmten Eigenschaft gesucht. Beispiele für mögliche Datensammlungen: - Arrays - Listen - Dateien Man unterscheidet zwischen: - internem Suchen: alle Objekte der Suchmenge befinden sich im internen Speicher und - externem Suchen: die Objekte befinden sich teilweise auf externen Speichermedien 12.01.2012 Prof. Dr. Andreas Schmietendorf 3

Suchalgorithmen Lineare Suche (am Beispiel des Telefonbuches): Suche einer bestimmten Telefonnummer innerhalb des Telefonbuches ohne Kenntnis des Namens. - Alle Einträge beginnend bei dem ersten bis zum letzten sind zu durchsuchen. Erfolglose Suche es müssen alle N Einträge untersucht werden Erfolgreiche Suche kann beim 1., 2. oder letzten Eintrag beendet sein - Leistung eines solchen Algorithmus kann nur hinsichtlich seines worst case Verhaltens vorausgesagt werden. Potentielle Verbesserungen: - Nummern in eine bestimmte Reihenfolge (Sortierung) bringen - Verwendung eines Skip-Indexes 12.01.2012 Prof. Dr. Andreas Schmietendorf 4

Suchalgorithmen 12.01.2012 Prof. Dr. Andreas Schmietendorf 5

Suchalgorithmen Binäre Suche (am Beispiel des Telefonbuches): Grundidee: schrittweise Halbierung der Liste und Suche in den jeweiligen Listenhälften. - Telefonbuch in der Mitte aufschlagen und vergleichen des gesuchten Namens mit den Namen der aufgeschlagenen Seite Gesuchter Name ist zufällig gleich dem gesuchten Namen Suche fertig Gesuchter Name ist entsprechend der alphabetischen Ordnung größer weitere Suche nur noch in der 1. Hälfte des Telefonbuches Gesuchter Name ist entsprechend der alphabetischen Ordnung kleiner weitere Suche nur noch in der 2. Hälfte des Telefonbuches Anzahl benötigter Schritte - 1000 Seiten Umfang nach höchstens 10 Schritten sind wir am Ziel - 2000 Seiten Umfang - nach höchstens 11 Schritten sind wir am Ziel 12.01.2012 Prof. Dr. Andreas Schmietendorf 6

Suchalgorithmen Übung: Implementieren Sie eine Funktion (rekursiv oder iterativ): getsearchbin (int list[], int searchvalue) die für ein gegebenes Feld list[] von Integerwerten den Index des gesuchten Wertes searchvalue zurückliefert. Dabei soll die Funktion das binäre Suchverfahren nutzen. Ist searchvalue in dem Feld nicht enthalten, so liefert die Funktion den Ergebniswert -1. Testen Sie die Funktion mit dem folgenden Feld: final int LENGTH = 10000; int[] test = new int[length]; for (int i=0; i<length; i++){ } test[i] = 2 * i; Erlauben Sie dem Nutzer, verschiedene Suchwerte einzugeben. 12.01.2012 Prof. Dr. Andreas Schmietendorf 7

Suchalgorithmen 12.01.2012 Prof. Dr. Andreas Schmietendorf 8

Hash-Funktionen 12.01.2012 Prof. Dr. Andreas Schmietendorf 9

Suche mittels Hashing Hashing als Erweiterung der schlüsselindizierten Suche: Bei der Nutzung einer Hash-Funktion werden Objekte nicht mehr an einer beliebigen Stelle in einem Feld gespeichert, sondern in Abhängigkeit von bestimmten Objekteigenschaften. Der Index für die Speicherung des Objekts im Feld ergibt sich dann aus dem Objekt selbst. Zweiteiliges Suchen beim Hashing: - Transformieren des Suchschlüssels mithilfe einer Hashfunktion Idealfall Abbildung unterschiedlicher Schlüssel auf unterschiedliche Adressen Ggf. können zwei oder auch mehrere unterschiedliche Schlüssel zur gleichen Adresse führen - Kollisionsbeseitigung mittels verschiedener Strategien 12.01.2012 Prof. Dr. Andreas Schmietendorf 10

Suche mittels Hashing Beispiele für Hash-Funktionen sind: Länge eines Wortes modulo Tabellengröße Summe der char-werte (interpretiert als Integers) eines Wortes modulo Tabellengröße Anfangsbuchstabe eines Wortes Der Modulo-Operator (verbleibender Rest einer ganzzahligen Teilung) wird durch das %-Zeichen realisiert. Bem.: in Java steht die Klasse Hashtable zur Verfügung 12.01.2012 Prof. Dr. Andreas Schmietendorf 11

Suche mittels Hashing Übung: Verwendung von Hashcodes: Verwenden Sie die von Ihnen implementierten verketteten Listen zur Analyse der je Knoten ausgegebenen Hashcodes. - Die Methode int hashcode() ererbt jede Klasse automatisch von der gemeinsamen Basisklasse Object! - Die Methode hashcode() verwendet zur Berechnung des Hashcodes die Speicheradresse des Objekts, überlegen Sie alternative Ansätze. Überlegen Sie sich einen methodischen Ansatz zur Vermeidung mehrdeutiger Hashcodes. Untersuchen Sie die Möglichkeiten der in Java zur Verfügung stehenden Klasse Hashtable und verwenden Sie diese mit Hilfe eines einfachen Beispiels zur Datenspeicherung und Datensuche. 12.01.2012 Prof. Dr. Andreas Schmietendorf 12

Hashing in Java - Beispiel 12.01.2012 Prof. Dr. Andreas Schmietendorf 13

Hashing in Java - Beispiel 12.01.2012 Prof. Dr. Andreas Schmietendorf 14

Sortieralgorithmen 12.01.2012 Prof. Dr. Andreas Schmietendorf 15

Überblick Sortieralgorithmen Sortieralgorithmen werden für die effiziente Speicherung von Informationen und deren Auswertung bzw. Suche benötigt. Grundsätzlich werden unterschieden: - Interne Sortierung Bearbeitung von Listen im Hauptspeicher - Externe Sortierung Bearbeitung von Listen auf ext. Massenspeicher Klassische Sortierverfahren: - Bubble Sort vgl. zu aufsteigenden Blasen - Insert Sort -Sortierung durch Einfügen - Select Sort -Sortierung durch Auswählen Schnelle Sortieralgorithmen (Quick Sort, Merge Sort, Shear Sort, ) 12.01.2012 Prof. Dr. Andreas Schmietendorf 16

Bubble Sort Die Grundidee geht davon aus, dass aufsteigende Blasen ( Bubbles ) sich automatisch sortieren, indem die großen beim Aufsteigen die kleinen überholen. Die eigentliche Sortierung eines Arrays von Datensätzen erfolgt durch wiederholtes Vertauschen von Nachbarfeldern, die in falscher Reihenfolge stehen. Dieser Vorgang wird wiederholt, bis das Array vollständig sortiert ist, wobei das Array von links nach rechts durchwandert wird. 12.01.2012 Prof. Dr. Andreas Schmietendorf 17

Bubble Sort 12.01.2012 Prof. Dr. Andreas Schmietendorf 18

Prinzip Bubble Sort Beispiel für BubbleSort -Visualisierung: 12.01.2012 Prof. Dr. Andreas Schmietendorf 19

Insert Sort Das Grundprinzip des Insert Sort (Sortierung durch Einfügen) besteht darin, ein beliebiges Element der noch nicht sortierten Daten aufzunehmen an der richtigen Stelle (gemäß der Sortierungsanforderung aufsteigend bzw. fallend) einzuordnen. Dem entsprechend ist bei diesem Verfahren zwischen dem sortierten und unsortierten Teil zu unterschieden. 12.01.2012 Prof. Dr. Andreas Schmietendorf 20

Insert Sort 12.01.2012 Prof. Dr. Andreas Schmietendorf 21

Prinzip - Insert Sort 12.01.2012 Prof. Dr. Andreas Schmietendorf 22

Selection Sort Beim Selection Sort wird zwischen einem sortierten und unsortierten Teil (S und U) des Arrays unterschieden. Der zu Beginn unsortierte Teil U wird nach dem kleinsten Element durchsucht. Wird dieses gefunden, erfolgt ein Austausch mit dem jeweils ersten Element des unsortierten Arrays. Bei jedem Durchlauf erfolgt eine Verkleinerung von U bzw. einer Vergrößerung von S um jeweils ein Element. 12.01.2012 Prof. Dr. Andreas Schmietendorf 23

Selection Sort 12.01.2012 Prof. Dr. Andreas Schmietendorf 24

Prinzip Selection Sort Beispiel für BubbleSort -Visualisierung: 4 5 3 1 2 Minimum ist 1 daher Tauschen des 1. und 4. Elements 1 5 3 4 2 Minimum ist 2 daher Tauschen des 2. und 5. Elements 1 2 3 4 5 Minimum ist 3 daher kein Vertauschen richtige Stelle 1 2 3 4 5 Minimum ist 4 daher kein Vertauschen richtige Stelle 1 2 3 4 5 Komplett sortiertes Array Bem.: sortierter Teil unsortierter Teil Tauschoperationen 12.01.2012 Prof. Dr. Andreas Schmietendorf 25

Sortieralgorithmen Übung: Sortieralgorithmen Analysierten Sie die übergebenen Sortieralgorithmen hinsichtlich ihrer Funktionalität bzw. Wirkungsweise. Welche Aufwände entsprechend der O-Notation resultierenden aus den jeweiligen Sortieralgorithmen? Testen Sie die Sortieralgorithmen mit mit konkreten Werten innerhalb einer eigenen Java-Applikation. Optional: Betrachten Sie die Ausführungsgeschwindigkeit der verschiedenen Sortieralgorithmen mit Hilfe des referenzierten Java-Applets (siehe Folie 27) im Internet. 12.01.2012 Prof. Dr. Andreas Schmietendorf 26

Aufwände für Sortieralgorithmen 12.01.2012 Prof. Dr. Andreas Schmietendorf 27

Sortieralgorithmen Aufwände für Sortieralgorithmen: 12.01.2012 Prof. Dr. Andreas Schmietendorf 28

Sortieralgorithmen Quelle: 12.01.2012 Prof. Dr. Andreas Schmietendorf 29

Sortieralgorithmen Shear Sort -Selbsstudium: Bei Shear Sort handelt sich um ein paralleles Sortierverfahren, wobei die zu sortierenden Elemente mit Hilfe einer 2-dimensionalen Matrix angeordnet werden. Das Laufzeitverhalten dieses Algorithmus beträgt O(log n), wobei exakt log n + 1 Schritte benötigt werden. Analysieren Sie die prinzipielle Funktionalität anhand einer beispielhaft zu sortierenden Matrix. Verwenden Sie das übergebene Studienmaterial bzw. weitere selbstständig zu recherchierende Informationen im Internet. 12.01.2012 Prof. Dr. Andreas Schmietendorf 30