Kurs:Algorithmen und Datenstrukturen/Vorlesung/Notation Komplexitätsklassen

Aus testwiki
Zur Navigation springen Zur Suche springen

Vorlage:Navigationsleiste/Algorithmen und Datenstrukturen


Komplexitätsklassen

Auf dieser Seite werden die Komplexitätsklassen behandelt.

Wir sagen sei f(n)=amnm+am1nm1+...+a1n+a0,wobeiai+für0im.Danngiltf(n)O(nm). Und wir sagen, ein Algorithmus mit Komplexität f(n) benötigt höchstens polynomielle Rechenzeit, falls es ein Polynom p(n) gibt, mit f(n)O(p(n)). Des weiteren sagen wir, dass ein Algorithmus höchstens exponentielle Rechenzeit benötigt, falls es eine Konstante a+ gibt, mit f(n)O(an).

Die Komplexitätsklassen sind:

O(1) der konstante Aufwand, das bedeutet der Aufwand ist nicht abhängig von der Eingabe
O(logn) der logarithmische Aufwand
O(n) der lineare Aufwand
O(nlogn)
O(n2) der quadratische Aufwand
O(nk) für k0 der polynomiale Aufwand
O(2n) der exponentielle Aufwand

Wachstum

f(n) n=2 24=16 28=256 210=1024 220=1048576
ldn 1 4 8 10 20
n 2 16 256 1024 1048576
nldn 2 64 2048 10240 20971520
n2 4 256 65536 1048576 1012
n3 8 4096 16777200 109 1018
2n 4 65536 1077 10308 10315653

Zeitaufwand

Nun stellen wir uns die Frage, wie groß bezüglich der Rechenschritte darf, oder kann ein Problem sein, je nach Komplexitätsklasse, wenn die Zeit T begrenzt ist? Wir nehmen an, dass wir pro Schritt eine Rechenzeit von 1μs=(106s) brauchen. In der folgenden Tabelle steht T für die Zeitbegrenzung und G für die maximale Problemgröße.

G T=1Min. 1 Std. 1 Tag 1 Woche 1 Jahr
n 6107 3,6109 8,61010 61011 31013
n2 7750 6104 2,9105 7,8105 5,6106
n3 391 1530 4420 8450 31600
2n 25 31 36 39 44

Ein Beispiel ist für T=1 Min. : 1000100060=6107μs(107Schritte)

Typische Problemklassen

Aufwand Problemklasse
O(1) für einige Suchverfahren für Tabellen (Hashing)
O(logn) für allgemeine Suchverfahren für Tabellen (Baum-Suchverfahren)
O(n) für sequenzielle Suche, Suche in Texten, syntaktische Analyse von Programmen (bei "guter" Grammatik)
O(nlogn) für Sortieren
O(n2) für einige dynamische Optimierungsverfahren (z.B. optimale Suchbäume), einfache Multiplikation von Matrix-Vektor
O(n3) für einfache Matrizen Multiplikationen
O(2n) für viele Optimierungsprobleme (z.B. optimale Schaltwerke), automatisches Beweisen (im Prädikatenkalkül 1.Stufe)

Literatur

Da die Vorlesungsinhalte auf dem Buch Algorithmen und Datenstrukturen: Eine Einführung mit Java von Gunter Saake und Kai-Uwe Sattler aufbauen, empfiehlt sich dieses Buch um das hier vorgestellte Wissen zu vertiefen. Die auf dieser Seite behandelten Inhalte sind in Kapitel 7.3.3 zu finden.


Discussion