Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Suchen & Sortieren mit Arrays. Inhalte Die wichtigsten Algorithmen zum Suchen & Sortieren von Listen, bzw. Arrays Komplexität eines Algorithmus Algorithmen.

Ähnliche Präsentationen


Präsentation zum Thema: "Suchen & Sortieren mit Arrays. Inhalte Die wichtigsten Algorithmen zum Suchen & Sortieren von Listen, bzw. Arrays Komplexität eines Algorithmus Algorithmen."—  Präsentation transkript:

1 Suchen & Sortieren mit Arrays

2 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

3 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

4 Array: typ[] name = {Werte} Regal mit gleichartigen Kisten: name[0] Inhalt der ersten Kiste 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 Beispiel: Arrays

5 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. I n 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

6 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.

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

8 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.

9 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. 9

10 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. 10 ABBRUCHBEDINGUNG REDUKTION SELBSTAUFRUF

11 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. Programmierung

12 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).

13 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?

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

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

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

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

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

19 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. Schreibweise: Laufzeit_Namensliste = O( n 2 )

20 O-Notation Vereinfachungsregeln : Addition f(n) = n + 3 O(n) f(n) = n 2 + 3n O(n 2 ) Multiplikation f(n) = 3n O(n) f(n) = n 2 * 3n O(n 3 ) 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

21 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

22 Komplexitätsklassen O(2 n ) : 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(n k ) : Klasse aller polynomialen Algorithmen Gelten als noch praktikable Algorithmen O(n 2 ) : 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

23 Komplexitätsklassen

24 noch praktikabel nicht mehr praktikabel

25 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))


Herunterladen ppt "Suchen & Sortieren mit Arrays. Inhalte Die wichtigsten Algorithmen zum Suchen & Sortieren von Listen, bzw. Arrays Komplexität eines Algorithmus Algorithmen."

Ähnliche Präsentationen


Google-Anzeigen