25
Suchen & Sortieren mit Arrays

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

Embed Size (px)

Citation preview

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

Suchen & Sortieren

mit Arrays

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

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

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

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

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

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]); // 17arr[1] = 11; // an 2. Stelle 11 statt 5int x = arr[0]; // x ist 3int l = arr.length; // l ist 4

int[] arr = {3, 5, 0, 17};

System.out.println(arr[3]); // 17arr[1] = 11; // an 2. Stelle 11 statt 5int x = arr[0]; // x ist 3int l = arr.length; // l ist 4

Beispiel:

Arrays

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

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“

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

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.

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

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

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

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.

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

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

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

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

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

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

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

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

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

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?

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

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 LorenzJulianSamuelNirubanAymarJoëlSlavkoManuelNathanaelAnselmNiko

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

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 LorenzJulianSamuelNirubanAymarJoëlSlavkoManuelNathanaelAnselmNiko

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

Algorithmus Lineare Suche

• Worst case?• Laufzeit

– n = 10?– n = 20?– n = 100?– allgemein?

O(n)(n verdoppeln ver-

doppelt Laufzeit)

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

Algorithmus Binäre Suche

• Worst case?• Laufzeit

– n = 10?– n = 20?– n = 100?– allgemein?

O()

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

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 LorenzJulianSamuelNirubanAymarJoëlSlavkoManuelNathanaelAnselmNiko

Allgemeine Laufzeit?

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

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(n2)

2

)1( nn

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

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

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

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

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

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

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

Komplexitätsklassen

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

Komplexitätsklassen

noch praktikabelnicht mehr praktikabel

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

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