15 - Komplexität von Algorithmen [ID:10708]
50 von 391 angezeigt

Wir haben heute die letzte Sitzung zum Thema Algorithmik, bevor wir uns ab nächster Woche mit

Komplexität von Problemen befassen. Da gehen schon die ersten Köpfe runter. Viel interessanteres

Gebiet als Algorithmik. Ich erinnere nochmal an das Buch, nachdem wir da vorgehen, damit

sie sich das schon mal beschaffen können. Sanjeev Arora und Boaz Barak, Computational Complexity,

A Modern Approach oder irgendein Untertitel. Wie eingangs angekündigt, legal im Internet verfügbar.

Gut. Das letzte, was wir jetzt aus dem Bereich Algorithmik machen, ist wiederum aus dem Bereich

Sortieren. Und zwar sortieren in linearer Zeit. Ja, das sollte vielleicht so ein bisschen Gemurmel

geben, denn wir haben ja gezeigt, dass das nicht geht. Wir haben gezeigt, dass Sortieralgorithmen

mindestens O von N mal log N brauchen und nicht O von N. Gut, aber ich hatte auch gleich damals

schon angemerkt, das gilt dann, wenn wir unterstellen, dass wir nichts weiter über die Schlüssel wissen.

Wenn wir dagegen zusätzliche Annahmen über die Schlüssel machen können, dann geht das schon.

Also halten wir nochmal hier fest, dass das nicht untergeht. So, also nochmal, das geht nur dann,

wenn wir spezielle Dinge über die Schlüssel wissen, die vielleicht nicht immer gelten.

So, ein ganz einfacher Fall ist der folgende.

Also ein einfacher Fall ist, dass es wenig Schlüssel gibt. Sagen wir Groß-K Stück und wir wissen,

welche das sind. Sagen wir zum Beispiel die Zahlen eben 0 bis K minus 1. In dem Falle

können wir uns einen wirklich gerade zu den trivialen Sortieralgorithmen ausdenken. Und zwar,

indem wir das Verfahren der sogenannten Buckets verwenden. Ja, was müssen wir machen? Ja, also

wenn wir wissen, es gibt nur K Schlüssel, dann stellen wir eben K Eimer bereit und jedes Mal,

wenn ein Element ankommt, schmeißen wir es in den passenden Eimer. Und hinterher stellen wir die Eimer

nebeneinander und dann ist das schon sortiert. Denn es gibt ja eben nur diese K Schlüssel,

wie es innerhalb der Schlüssel sortiert ist. Also bei gleichem Schlüssel ist ja eher ausdrücklich

egal. Das heißt, wir haben hier Sonnenbild. Wir haben hier unsere K Buckets, die schreiben wir

gleich in Array-Notationen. B von 0, B von 1 bis B von K minus 1. Und da haben wir hier irgendwie

so ein Förderband, was hier also unsere Elemente anliefert und die sortieren wir,

also wie sie reinkommen in die passenden Buckets. Ja, ein interessantes Bild,

das hätte ich mir nicht selber ausgedacht. Ja, schreiben wir das mal als Code auf.

So, aus irgendeinem Grunde heißt dieser Algorithmus K-Sort, warum auch immer. Na ja,

gut, zu ehren dieser Zahl K, die da vorkommt, aber der Name dieser Zahl K ist natürlich

Schall und Rauch. Was im Buch so ein bisschen unterschlagen wird, also man sollte diesem

Algorithmus ehrlicherweise die Zahl Schlüssel als Argument mitgeben. Das heißt, hier gehört hin ein

Argument K, das ist eine natürliche Zahl, das ist also die Anzahl Schlüssel, die wir hier verarbeiten.

Und wie immer ist also die Eingabe eine Sequenz von Elementen und auch die Ausgabe eine Sequenz von

Elementen. So, weil das hier die Anzahl Schlüssel sein soll, dürfen wir die Funktion natürlich

korrekterweise nur dann aufrufen, wenn das tatsächlich die in S vorkommenden Schlüssel sind. Das heißt,

wir fangen an mit einem Assume. Wieder in salopperschreibweise, wo wir so tun, als wäre die

Sequenz einer Menge, dann ist das hier Notation für das Bild einer Menge unter einer Abbildung. Ja,

das hier ist also die Menge aller Schlüssel, die in S vorkommen und diese Menge soll enthalten sein

in der Menge der ganzen Zahlen von 0 bis K minus 1. Gut, wir brauchen ja diese Buckets, die müssen

wir uns also deklarieren. Das ist ein Array B, das besteht aus diesen K Buckets, die sind am Anfang

alle leer. Und der Typ von dem Ding ist, gut, es ist wie gesagt ein Array mit K Einträgen und der Typ

der Einträge ist Sequenz of elements. So, dadurch, dass das hier eine Sequenz von Einträgen ist,

in jedem Bucket ist das nicht wirklich ein Eimer. Ja, oder naja, es ist vielleicht ein Eimer in dem

Sinne, dass wir da die Elemente alle, wie sie reinkommen, oben aufeinander aufwärts starten.

Ja, also in diesen Eimern lagern wir also vorstellungsmäßig nicht Bälle, die irgendwie

durcheinander fallen, sondern sagen wir Betonplatten, die wir eine nach der anderen

übereinander schichten. So, wie machen wir das also? Irgendwo mal ein Kommentar hier, wie immer.

Die Einträge von S, die bezeichnen wir, wie in allen Algorithmen dieser Farbe bisher, mit E1 bis E n.

So, und wir gehen dann durch die Liste durch, das heißt wir lassen i von 1 bis n laufen und

gucken uns also immer das it-Element an. Ja, gut, was machen wir mit dem it-Element? Wir schauen,

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

01:15:44 Min

Aufnahmedatum

2013-06-07

Hochgeladen am

2019-04-22 13:49:25

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