Suchen & Sortieren mit Arrays.

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmen und Datenstrukturen
Advertisements

Christian Scheideler SS 2009
Rekursion: Rekurrenz: Algorithmen rufen sich selbst (rekursiv) auf.
Falls Algorithmen sich selbst rekursiv aufrufen, so kann ihr Laufzeitverhalten bzw. ihr Speicherplatzbedarf in der Regel durch eine Rekursionsformel (recurrence,
Asymptotische Notation
Schnelle Matrizenoperationen von Christian Büttner
Algorithmen und Komplexität Teil 1: Grundlegende Algorithmen
Sortieren I - Bubblesort -
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
Kapitel 6: Klassifizierung von Sortiertechniken
3. Kapitel: Komplexität und Komplexitätsklassen
5. Sortier-Algorithmen Vorbemerkungen:
2. Kapitel: Komplexität und Komplexitätsklassen
Rekursion Was ist Rekursion? Was sind rekursive Methoden?
Übung 6.6Schranken 1.Angenommen, Ihr Algorithmus habe einen Aufwand von g(n) = 5n 3 + n für alle n a)Geben sie eine obere Schranke O(g(n)) an. b)Beweisen.
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
Dynamische Programmierung (2) Matrixkettenprodukt
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (04 – Entwurfsverfahren) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
WS Algorithmentheorie 01 – Divide and Conquer (Segmentschnitt) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Halbzeit: Kurze Wiederholung
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Algorithmen und Datenstrukturen
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Geometrisches Divide and Conquer
Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Algorithmen und Komplexität Teil 1: Grundlegende.
Diskrete Mathematik I Vorlesung 9b AVL-Baum, Algorithmen.
Algorithmische Geometrie
Rekursion Richard Göbel.
Algorithmen beschreiben
Routenplanung & Komplexität.
Routenplanung & Komplexität. Lernziele Sie haben den Dijkstra-Algorithmus nachvollzogen. Sie haben das Konzept der Komplexität eines Algorithmus verstanden.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
4 Sortierverfahren 4.1 Einführung 4.2 Naive Sortierverfahren
Merge-Sort und Binäres Suchen /10D. Haehn Populäres algorithmisches Lösungsverfahren Populäres algorithmisches Lösungsverfahren Divide: Problem.
Computational Thinking Suchen und Sortieren [Ordnung muss sein…]
Splay Trees Von Projdakov Benjamin.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Effiziente Algorithmen
Effiziente Algorithmen
Einführung in die Programmierung
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Algorithmen und Datenstrukturen Übungsmodul 10
Algorithmen und Datenstrukturen SS 2005
2.4 Rekursion Klassifikation und Beispiele
? Laufzeit Speicherbedarf Bubblesort Quicksort Selectionsort Radixsort
Algorithmen und Datenstrukturen Übungsmodul 8
SWE1 / Übung 10 ( ) Rekursion Binärbäume.
Komplexität von Algorithmen
Das Traveling Salesman Problem (TSP)
Algorithmen und Datenstrukturen 1 SS 2002
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Rekursion-
Mergesort.
Routenplanung & Komplexität.
Allgemeine Formulierung des Suchproblems
Routenplanung & Komplexität.
Vorlesung AVL-Bäume/Algorithmen-
Vorlesung AVL-Bäume/Algorithmen-
 Präsentation transkript:

Suchen & Sortieren mit Arrays

Inhalte Die wichtigsten Algorithmen zum Suchen & Sortieren von Listen, bzw. Arrays Komplexität eines Algorithmus‘ Algorithmen entwerfen mit Struktogrammen Iteration & Rekursion Erste Erfahrungen mit Java in NetBeans

Lernziele heute Sie kennen elementare Suchalgorithmen (lineare und binäre Suche) und können diese erklären, implementieren und bezüglich ihrer Zeitkomplexität bewerten Sie kennen und verstehen die Begriffe Iteration & Rekursion und können den Unterschied anhand von Implementierungen eines Suchalgorithmus erklären Sie wissen, was man unter der Komplexität eines Algorithmus‘ versteht, und Sie können diese Komplexität für einfache Beispielalgorithmen und Probleme selbständig abschätzen und Ihr Vorgehen erklären

Arrays Array: typ[] name = {Werte} Regal mit gleichartigen Kisten: name[0]  Inhalt der ersten Kiste Beispiel: int[] arr = {3, 5, 0, 17}; System.out.println(arr[3]); //  17 arr[1] = 11; // an 2. Stelle 11 statt 5 int x = arr[0]; // x ist 3 int l = arr.length; // l ist 4

Iteration Die Iteration (von lateinisch iterare, "wiederholen") ist ein Begriff aus der Mathematik und bezeichnet eine Methode, sich der Lösung eines Rechenproblems schrittweise, aber zielgerichtet anzunähern durch wiederholte Anwendung desselben Rechenverfahrens. In der Informatik wird auch von Iteration gesprochen, wenn man mit allen Elementen eines Arrays arbeiten will und sie dazu nacheinander anspricht, also (mithilfe einer Schleife) durch den Array „iteriert“

Iteration als Struktogramm Die FOR-Schleife besteht aus einem Verarbeitungsteil und einem Steuerungsteil mit einer Bedingung. Die Bedingung bestimmt, ob bzw. wie häufig der Verarbeitungsteil ausgeführt wird, wenn das Programmkonstrukt durchlaufen wird.

Rekursion Rekursion, auch Rekurrenz oder Rekursivität, bedeutet Selbstbezüglichkeit (von lateinisch recurrere = „zurücklaufen“). Sie tritt immer dann auf, wenn etwas auf sich selbst verweist. Ein rekursives Element muss nicht immer direkt auf sich selbst verweisen (direkte Rekursion), eine Rekursion kann auch über mehrere Zwischenschritte entstehen. Rekursion kann dazu führen, dass merkwürdige Schleifen entstehen. So ist z.B. der Satz „Dieser Satz ist unwahr“ rekursiv, da er von sich selber spricht. Eine etwas subtilere Form der Rekursion (indirekte Rekursion) kann auftreten, wenn zwei Dinge gegenseitig aufeinander verweisen. Ein Beispiel sind die beiden Sätze: „Der folgende Satz ist wahr“ und „Der vorhergehende Satz ist nicht wahr“.

Rekursion zur Problemlösung Als Rekursion bezeichnet man den Aufruf oder die Definition einer Funktion durch sich selbst. Ohne geeignete Abbruchbedingung geraten solche rückbezüglichen Aufrufe in einen so genannten infiniten Regress (umgangssprachlich Endlosschleife). In vielen Fällen ist die Rekursion eine von mehreren möglichen Problemlösungsstrategien, sie führt oft zu „eleganten“ mathematischen Lösungen.

Rekursion als Struktogramm Unter Rekursion versteht man ein LÖSUNGSVERFAHREN, in der Mathematik und Informatik, bei dem ein Problem derart gelöst wird, dass man es auf das selbe, aber etwas vereinfachte Problem zurückführt. Ein Problem wird auf ein „kleineres“ Problem zurückgeführt, das wiederum nach demselben Verfahren bearbeitet wird. Die Lösung des Gesamtproblems kann sich aus mehreren Teilproblemen zusammenstellen Kann aber die Lösung eines Teilproblems sein. Für n=2 muss man sich vorstellen jede Puppe enthält 2 Puppen 9

Wesentliche Bestandteile einer Rekursion Die Abbruchbedingung gibt an, welche Bedingung erfüllt sein muss, damit das Lösungsverfahren beendet wird. Die Reduktion gibt an, wie ein Problem auf ein gleichartiges, aber einfacheres Problem zurück zu führen ist. ABBRUCHBEDINGUNG REDUKTION Das Vorhanden sein der Abbruchbedingung garantiert nicht Abbruch. Zweck der Reduktion ist es, das Problem der Lösung bzw. Abbruchbedingung näher zu führen. SELBSTAUFRUF 10

Teile & Herrsche (divide & conquer) Falls ein Problem für eine direkte Lösung zu umfangreich ist, dann: teile das Problem in mindestens zwei, ungefähr gleich grosse Teilprobleme (divide). löse die kleineren, einfacheren Teilprobleme (elementare Probleme) auf die gleiche Art (conquer). füge die Teillösungen zu einer Gesamtlösung zusammen (merge) Teile und herrsche“ ist eines der wichtigsten Prinzipien für effiziente Algorithmen. Dabei wird ausgenutzt, dass bei vielen Problemen der Lösungsaufwand sinkt, wenn man das Problem in kleinere Teilprobleme zerlegt ( reduzierte Komplexität). Dies lässt sich meist durch Rekursive Programmierung umsetzen. http://de.wikipedia.org/wiki/Teile_und_herrsche_%28Informatik%29

Komplexität (Zeitkomplexität) Unter der Zeitkomplexität eines Problems versteht man die Anzahl der Rechenschritte, die ein optimaler Algorithmus zur Lösung dieses Problems benötigt, in Abhängigkeit von der Länge der Eingabe. Man spricht hier auch von der asymptotischen Laufzeit und meint damit, in Anlehnung an eine Asymptote, das Zeitverhalten des Algorithmus für eine potenziell unendlich große Eingabemenge. Es interessiert also nicht der Zeitaufwand eines konkreten Programms auf einem bestimmten Computer, sondern viel mehr, wie der Zeitbedarf wächst, wenn mehr Daten zu verarbeiten sind, also z.B. ob sich der Aufwand für die doppelte Datenmenge verdoppelt oder quadriert (Skalierbarkeit).

Machbarkeitsüberlegungen Angenommen: Im Test zeigt sich, dass ein Programm für 10 Datenwerte 1 sec benötigt Wenn der Algorithmus Komplexität O(f(n)) hat, wie viele Eingabedaten kann er in 1 Tag, 1 Jahr, 10 Jahren, 1000 Jahren verarbeiten?

Laufzeitabschätzung Wir betrachten, wie viele Schritte im Algorithmus abgearbeitet werden müssen - abhängig von der Menge der Eingabedaten. Kerim Alexandra Lorenz Julian Samuel Niruban Aymar Joël Slavko Manuel Nathanael Anselm Niko Beispiel 1: Wir haben eine Namensliste und wollen wissen, ob ein bestimmter Name darin vorkommt.  und jetzt?

Laufzeitabschätzung Lösung (Algorithmus) finden Für den ungünstigsten Fall (worst case) durchspielen Laufzeit abschätzen (O-Notation) Kerim Alexandra Lorenz Julian Samuel Niruban Aymar Joël Slavko Manuel Nathanael Anselm Niko

Algorithmus Lineare Suche Worst case? Laufzeit n = 10? n = 20? n = 100? allgemein? O(n) (n verdoppeln ver- doppelt Laufzeit)

Algorithmus Binäre Suche Worst case? Laufzeit n = 10? n = 20? n = 100? allgemein? O()

Laufzeitabschätzung  Allgemeine Laufzeit? Wir betrachten, wie viele Schritte im Algorithmus abgearbeitet werden müssen - abhängig von der Menge der Eingabedaten. Kerim Alexandra Lorenz Julian Samuel Niruban Aymar Joël Slavko Manuel Nathanael Anselm Niko Beispiel 2: Wir haben eine Namensliste und wollen wissen, ob ein Name darin doppelt vorkommt.  Allgemeine Laufzeit?

O-Notation Wir betrachten, wie sich die Schrittanzahl im Algorithmus für eine sehr grosse Anzahl von Eingabedaten verhält („obere Schranke“ für Worst Case). Beispiel Namensliste: Für n Eingabedaten brauchen wir sicher nicht mehr als (n-1)+(n-2)+…+(1) = Schritte. (n-1)+(n-2)+…+(1) = n2 Schritte. 1 + 2 +…+ (n-1) Schreibweise: Laufzeit_Namensliste = O(n2)

O-Notation Vereinfachungsregeln: Addition f(n) = n + 3 ⇒ O(n) f(n) = n2 + 3n ⇒ O(n2) Multiplikation f(n) = 3n ⇒ O(n) f(n) = n2 * 3n ⇒ O(n3) Konstante Summanden werden vernachlässigt Es zählt der Summand mit dem stärkeren Wachstum Konstante Faktoren werden vernachlässigt Es zählt die Summe der Exponenten

Komplexitätsabschätzung worst-case complexity die Betriebsmittel, die maximal zur Ausführung eines Algorithmus benötigt werden. average-case complexity durchschnittlicher Betriebsmittelbedarf für alle Eingaben. Dieser wird als Komplexität des Algorithmus im Durchschnittsfall bezeichnet. best-case complexity Betriebsmittelbedarf im günstigsten Fall

Komplexitätsklassen O(2n) : Klasse aller exponentiellen Algorithmen Algorithmen, die ihre Lösung durch systematisches Ausprobieren finden Beispiel: Wie packt man möglichst viele verschieden große Quader in einen Waggon? Hoffnungslos ineffizient für große n O(nk) : Klasse aller polynomialen Algorithmen Gelten als „noch praktikable“ Algorithmen O(n2) : Klasse aller quadratischen Algorithmen Einfache Sortieralgorithmen sind quadratisch (bubbleSort, insertionSort, selectionSort) O(n*log(n)) : loglineare Algorithmen Gute Sortieralgorithmen sind loglinear (quickSort ) O(n) : Klasse aller linearen Algorithman sehr gut behandelbare Algorithmen Beispiel: lineare Suche O(log(n)) : logarithmische Algorithmen Extrem effizient Beispiel: binäre Suche O(1) : Klasse aller konstanten Algorithmen Laufzeit unabhängig von Datengrösse

Komplexitätsklassen

Komplexitätsklassen noch praktikabel nicht mehr praktikabel

Komplexität von Suchalgorithmen Bei der Linearen Suche ist es egal, ob der Datenbestand schon sortiert ist, oder nicht: n Datenzugriffe für eine erfolglose Suche (worst case) 1 Datenzugriff im best case (sehr unwahrscheinlich) im Mittel (average case) n/2 Dateizugriffe  Lineare Suche: O(n) Die Binäre Suche funktioniert nur mit sortierten Daten: kann iterativ oder rekursiv implementiert werden 1 Listenspaltung mehr für doppelte Länge  Binäre Suche: O(log(n))  Interpolationssuche: O(log(log(n))