6 - Komplexität von Algorithmen [ID:10699]
50 von 653 angezeigt

Eine Ansage vorweg hinsichtlich Übungsblattabgabe.

Wie angekündigt ändern wir die Regelung von Übung zu Übung.

Allerdings noch nicht auf diesem Zettel.

Auf diesem Zettel, der aktuell raus ist, werden Sie feststellen, haben Sie ersatzweise eine

Woche länger Zeit als sonst mit Rücksicht auf den Berg.

War ein Gorinsidee.

Ja, gut, wir hatten uns zuletzt also angeguckt, zum einen unser Berechnungsmodell, die Random

Access Machine und zum anderen ein paar grundsätzliche Aspekte von Pseudocode, auf die wir uns geeinigt

haben, den wir also verwenden, um Programme in dieser Random Access Machine zu beschreiben.

Wir wollen jetzt im üblichen Falle nicht hingehen und also jetzt diesen Pseudocode

tatsächlich uns kompiliert vorstellen in die RAM und dann einzeln dieser Anweisungen

zählen.

Das ist nicht so grammdösig bei, sondern was man tut ist, man hat eben ja jetzt sich

diese O-Notation verschafft, man interessiert sich nur für asymptotisches Verhalten und

macht deswegen die Analyse direkt auf dem Pseudocode.

Das ist also wesentlich weniger anstrengend als einzelne Anweisungen der Random Access

Machine zu zählen.

Anstrengend genug ist es trotzdem noch.

Um jetzt mal Neil Jones zu zitieren, dessen Buch wir ja in diesem Semester nicht verwenden,

Programme Analysis isn't easy.

Aber man hat da Methoden, die man verwenden kann und diese Methoden, die sehen wir uns

heute an.

Die greifen nicht immer, aber die greifen oft.

Als größere Überschrift schreibe ich heute mal Zeitanalyse darüber.

Der zweite Teil ist streng genommen auch auf völlig andere Dinge anwendbar.

Wir teilen das in zwei Teile.

Ein einfacherer, sehr schnell abgehandelter am Anfang für nicht-rekursive Programme, die

also rein über Iteration laufen, die also Schleifen verwenden.

Die sind so ein bisschen leichter zu analysieren als rekursive Programme.

Anschließend wenden wir uns den rekursiven Programmen zu und unser Hauptwerkzeug zur Analyse

rekursiver Programme ist das sogenannte Master Theorem.

Also einmal ohne Rekursion können wir einfach so ein paar arithmetische Grundregeln verwenden,

die uns durch die meisten Programmanalysen so einigermaßen durchhelfen.

Und zwar sind das Analysen der Kontrollstrukturen oder Gesetze über das Zeitverhalten von Kontrollstrukturen.

Ich habe nur gar nicht gesagt, was die Kontrollstrukturen sind, die wir zulassen und ich lege mich da

auch absichtlich nicht fest, aber die wesentlichen Kontrollstrukturen, die man immer hat, sind

typischerweise dreierlei.

Erstens hat man sequenzielle Kompositionen von Programmen, also man kann Anweisungen

hintereinander schreiben.

Zweitens hat man Verzweigung, man hat sowas wie if-then-else.

Und drittens hat man Schleifen.

Gut, gucken wir uns das an.

Erster und einfachster Fall, ich führe zwei Programmteile hintereinander aus, sequenzielle

Kompositionen.

Wie lange dauert das?

Na ja, offensichtlich dauert es so lange, wie es dauert, erst den ersten Teil auszuführen

und dann den zweiten auszuführen, also Addition.

Und weil die Random Access Maschine ja schon ein ähnliches Konstrukt mitbringt, die Random

Access Maschine gestattet ist, mir Anweisungen einfach in Liste hintereinander zu schreiben

und ich zwei solche Listen habe, hänge ich die einfach hintereinander, hat das auch

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

01:24:08 Min

Aufnahmedatum

2013-05-08

Hochgeladen am

2019-04-22 12:59:03

Sprache

de-DE

  • Mathematische Hilfsmittel der Algorithmenanalyse: Abschätzung des asymptotischen Wachstums von Funktionen, Summationen, Anzahlen, divide-and-conquer-Rekursionen, etc.
  • Grundbegriffe der quantitativen Algorithmenanalyse: worst-case- und average-case-Analsyse, obere und untere Schranken, Algorithmen- und Problemkomplexität

  • Exemplarische Analysen von Sortieralgorithmen

  • Sortierkomplexität und Entropie

  • Quellcodierung und Datenkompression

  • Komplexität von arithmetischen Operationen und Problemen (Multiplikation, Primtest, Faktorisierung)

  • modulare Arithmetik und schnelle Fouriertransformation

  • Kryptographie und Komplexität

Lernziele und Kompetenzen:

Die Studierenden

  • erwerben fundierte Kenntnisse über die Grundbegriffe der quantitativen Algorithmenanalyse (Laufzeit) und die benötigten mathematischen Methoden

  • verstehen die Komplexität (Laufzeitverhalten) von Standardalgorithmen (z.B. Sortieren, arithmetische Algorithmen) und können deren praktische Bedeutung erklären

  • sind in der Lage, an einfachen, exemplarischen Algorithmen Analysen des worst-case-Verhaltens und des average-case-Verhaltens durchzuführen

  • können exemplarisch Algorithmenkomplexität und Problemkomplexität in Bezug setzen

  • können die Beziehungen zwischen Sortier- und Suchkomplexität und dem Entropiebegriff darstellen

  • erwerben Grundkenntnisse über algebraische Strukturen der Arithmetik und die Komplexität arithmetischer Operationen

  • können die Rolle von Komplexitätsaussagen für die Beurteilung der Sicherheit einfacher kryptografischer Protokoll darstellen

Literatur:

Graham, Knuth, Patashnik, Concrete Mathematics, Addison-Wesley, 1994.
Cormen, Leiserson, Rivest, Stein, Introduction to Algorithms, MIT-Press, 2001.
Heun, Grundlegende Algorithmen, Vieweg, 2001.

Einbetten
Wordpress FAU Plugin
iFrame
Teilen