Algorithmus Definition
Eindeutige Handlungsvorschrift zur Lösung eines Problems
löst Problemklasse
Problemklasse und-instanz Unterscheidung
Problemklasse: Allgemein auf mehrere Probleme der gleichen Art anwendbar
Größter gemeinsamer Teiler zweier ganzer Zahlen
Probleminstanz: Nur auf ein bestimmtes Problem anwendbar
Größter gemeinsamer Teiler von 84 und 231
Entwurfsprinzipien Bedeutung
Alle Algorithmen bestehen aus grundlegenden Bestandteilen und verwenden wiederkehrende Prinzipien
Grundlegende Bestandteile - Algorithmen
elementare Operationen
bedingte Ausführung
sequenzielle Ausführung
Iteration
Rekursion
Wiederkehrende Prinzipien - Algorithmen
Brut-Force
Teile-und-herrsche
Greedy
Rekusion
Brut-Force - Wiederkehrendes Prinzip
“rohe Gewalt”
Lösung durch Ausprobieren aller möglichen Lösungen
einfach zu implementieren
finden theoretisch immer Lösung
ineffizient & langsam
praktisch selten anwendbar
Bsp.: Erraten einer Pin
Je größer Zahl, desto längere Dauer
Teile-und-herrsche - Wiederkehrendes Prinzip
Divide - Zerlegung in Teilprobleme
Conquer - Conquer
Merge - Zusammensetzen der Gesamtlösung
verwenden häufig Rekursion
Bsp.: MergeSort, QuickSort
keine Aussage über Zusammenhänge treffbar
Greedy - Wiederkehrendes Prinzip
schrittweises Vorgehen
Beurteilung aller möglichen Folgezustände in jedem Schritt
Auswahl des zu diesem Zeitpunkts besten Schritts
schnelle Lösung (lokales Optimum, nicht beste Lösung (globales Optimum)
Bsp.: Gradientenverfahren zur Nullstellensuche
Rekursion - Wiederkehrendes Prinzip
direkte oder indirekte Selbstbezüglichkeit
Abbruchbedingung benötigt
Phasen
Abstieg/Aufwicklung
Aufstieg/Abwicklung
jeder Rekursionsaufruf erzeugt neue Version der Variablen
Speicherprobleme, weil ursprüngliche Werte zwischengespeichert werden müssen
Bsp.: Fakultät, Türme von Hanoi
Komplexitätsanalyse
Komplexität - Maß für Effizienz eines Algorithmus
wird in Abhängigkeit des Umfangs des Problems gemessen (Problemgröße n)
Problem kann n unterschiedliche Bedeutungen annehmen
Anzahl der zu sortierenden Elemente
Länge einer Zeichenkette bei Suchen eines Wortes
Prozesse verbauchen zwei Ressourcen
Rechen-/Laufzeit - Zeitkomplexität
Speicherplatz - Platzkomplexität
Laufzeitmessung
Laufzeitmessung einfach, aber Ergebnis abhängig von
Problemgröße
Probleminstanz
Hardware
nicht geeignet, um Zeitkomplexität systematisch zu vergleichen, sondern nur auf ein und demselben Chip
Asymptotische Laufzeitkomplexität
Abschätzung der Anzahl der Rechenschritte
Untersuchung des Wachstums der Anzahl der Rechenschritte bei steigender Problemgröße
Verwendung Landau-Notation
Unterscheidung Best-, Average- und Worst-Case
Rechenregeln für Komplexitätsklassen
Elementare Operationen haben die Komplexitätsklasse 0(1)
konstante Laufzeit
Bei iterativer Ausführung eines inneren Programmteils durch einen äußeren, multiplizieren sich die Laufzeiten
Konstanten werden nicht berücksichtigt
Bei sequentieller Ausführung zweier Programmteile, wird die Laufzeit von der schneller wachsenden Komplexitätsklasse bestimmt
Zuletzt geändertvor 2 Jahren