Algorithmen und Berechenbarkeit Formelsammlung 1 Landau-Symbole Die Landau-Symbole wurden in der Vorlesung wie folgt definiert: f ∈ o(g) ⇔ ∀ C > 0 ∃ x0 > 0 ∀ x > x0 : |f (x)| ≤ C · |g(x)| (x) ⇔ limx→∞ fg(x) =0 f ∈ O(g) ⇔ ∃ C > 0 ∃ x0 > 0 ∀ x > x0 : |f (x)| ≤ C · |g(x)| f (x) ⇔ lim supx→∞ g(x) < ∞ f ∈ Θ(g) ⇔ f ∈ O(g) ∧ g ∈ O(f ) ⇔ ∃ c > 0 ∃ C > 0 ∃ x0 > 0 ∀ x > x0 : c · |g(x)| ≤ |f (x)| ≤ C · |g(x)| f (x) f (x) ⇔ 0 < lim inf x→∞ g(x) ≤ lim supx→∞ g(x) < ∞ f ∈ Ω(g) ⇔ g ∈ O(f ) ⇔ ∃ c > 0 ∃ x0 > 0 ∀ x > x0 : c · |g(x)| ≤ |f (x)| (x) ⇔ lim inf x→∞ fg(x) >0 f ∈ ω(g) ⇔ g ∈ o(f ) ⇔ ∀ c > 0 ∃ x0 > 0 ∀ x > x0 : c · |g(x)| ≤ |f (x)| (x) ⇔ limx→∞ fg(x) =∞ 2 Rekursionen lösen Raten und Beweisen Eine Möglichkeit eine Rekursionsgleichung zu lösen ist eine geschlossene Form zu erraten und zu überprüfen, ob sie stimmt. Eine Möglichkeit mögliche Formen zu erraten ist das entrollen der Rekusionen. Eine weitere Möglichkeit bietet The OnLine Encyclopedia of Integer Sequences. Hier kann man die ersten n Laufzeiten eingeben und bekommt hierfür oft eine geschlossene Form angezeigt. Für manche Rekursionsgleichung gibt es womöglich keine geschlossene Form. Stattdessen kann 1 Algorithmen und Berechenbarkeit Formelsammlung man versuchen die Funktion so gut es geht von unten und oben einzugrenzen. Um die Korrektheit einer geschlossenen Formel zu Beweisen können wir einen InduktionsBeweis führen. Induktionsvoraussetzung frekursiv (n) = fgeschlossen (n) Induktionsanfang Induktionsvoraussetzung gilt für Basisfälle (f (0), f (1), f (2)) Induktionsschritt fgeschlossen (n) in frekursiv einsetzen und ausrechnen Rekursionsbäume Seien a, b ∈ N und b > 1, g : N → N und es gelte die Rekursionsgleichung: t(1) = g(1) t(n) = a · t(n/b) + g(n) Dann gilt für n = bk (d.h. für k = logb (n)): t(n) = k X i a ·g i=0 n bi . Mastertheorem I Seien a, b ∈ N, mit b > 1 und es gelte die Rekursionsgleichung: t(n) ∈ a · t(n/b) + Θ(nc ) Dann gilt: c falls a < bc Θ(n ) c Θ(n log n) falls a = bc t(n) ∈ log a Θ(n log b ) falls a > bc Mastertheorem II Sei r > 0, Pr i=0 αi < 1 und für eine Konstante c sei ! r X t(n) ≤ t(dαi ne) + c · n i=0 Dann gilt t(n) ∈ O(n). 2 Algorithmen und Berechenbarkeit Formelsammlung Annihilator Methode Operator Addition Subtraktion Multiplikation Verschiebung Komposition Definition (f + g)(n) := f (n) + g(n) (f − g)(n) := f (n) − g(n) (α · f )(n) := α · f (n) Ek f (n) := f (n + k) (X + Y)f := Xf + Yf (X − Y)f := Xf − Yf (XY)f := X(Yf ) = Y(Xf ) Distributivgesetz X(f + g) = Xf + Yg Operator E−1 E−a (E − a)(E − b) Σi (E − ai ) (E − 1)2 (E − a)2 (E − a)2 (E − b) (E − a)d Vernichtete Funktion α α · an α · an + βbn Σi αi ani für ai 6= aj αn + β (αn + β) + an (αn + β)ab + γbn für a 6= b i n (Σd−1 i=0 αi n )a 3 Divide and Conquer Beschreibung Hier versucht man ein Problem in kleiner Unterprobleme aufzuteilen und auf sich selbst zurück zu führen. Algorithmen • Quicksort • Mergesort • Multiplikation zweier Zahlen • Multiplikation zweier Matrizen (Strassen-Algorithmus) 3 Algorithmen und Berechenbarkeit Formelsammlung 4 Greedy-Algorithmen Beschreiung Greedy-Algorithmen basieren auf einer schrittweisen Berechnung von Teillösungen (lokalen Optima). Dieses Verfahren eignet sich für Probleme, bei denen jede Teilfolge einer optimalen Folge auch optimal ist. Ihre Korrektheit sollte möglichst immer bewiesen werden. Algorithmen • Dijkstra (kürzeste Wege) • Prim (minimale Spannbäume) 5 Dynamisches Programmieren Beschreibung Dynamisches Programmieren ist eine Beschleunigungstechnik um rekursive Probleme, die mehrfach gleiche Probleme lösen, zu beschleunigen. Sehr eng verwandt damit ist memoization. Das Problem muss hierbei zunächst in rekursiver Form dargestellt werden. Anschließend kann daraus ein dynamisches Programm erstellt werden: 1. Unterprobleme herausfinden 2. Platzverbrauch/Laufzeit bestimmen 3. Datenstruktur zur Speicherung der Teillösungen definieren (memoization) 4. Abhängigkeiten zwischen Teillösungen bestimmen 5. Auswertungsreihenfolge festlegen Algorithmen • Optimale Matritzenmultiplikationsreihenfolge • Optimale Suchbäume 4 Algorithmen und Berechenbarkeit Formelsammlung 6 Durchschnittsanalyse Beschreibung Bei der Durchschnittsanalyse versucht man die durchschnittliche Laufzeit eines Algorithmus zu bestimmen. Sei l ∈ L mit |l| = n ein Problem der Größe n aus der Menge Σ n T (l) mit Ln = {l|l ∈ L ∧ |l| = n} der Probleme L. Gesucht ist nun T∅ (n) = l∈L |Ln | Algorithmen • Quickselect • Quicksort 7 Amortisationsanalyse Formeln Aggregat-Methode Gesucht ist eine Funktion T (n), die die worst-case Laufzeit für n Operationen angibt. Die amrotisierten Kosten für eine einzelne Operation betragen dann T (n) . n Accounting-Methode Einzelnen Operationen werden Kosten zugewiesen, sodass die Summe der amortisierten Kosten immer Größer als die Summe der wahren Kosten ist: Sigmaci ≤ Σai . Hierbei können unterscheidlichen Operationen unterschiedliche amortisierte Kosten zugewiesen werden. Somit können sich für die gleiche Datenstruktur unterschiedliche Kosten der Operationen ergeben. Potentialmethode Für die Potentialmethode versucht man eine Potential ausgehen von der Konfiguration der Datenstruktur abzuleiten. Das Potential soll hierbei die “Arbeitsfähigkeit” der Datenstruktur angeben. Die Potentialfunktion muss hierbei folgenden Gleichungen genügen: ai = ci + (φi − φi−1 ) (1) Σai = Σ(ci + (φi − φi−1 )) = Σci + φn − φ0 ≥ Σci Somit muss gelten: φn ≥ φ0 5 (2) Algorithmen und Berechenbarkeit Formelsammlung Algorithmen • Fibonacci-Heaps • Union-Find 8 Entscheidbarkeit Begriffsdefinition Sei L eine Sprache und w ∈ Σ∗ ein Wort. Dann ist L entscheidbar, falls es eine Funktion gibt mit 1 falls w ∈ L χ(w) = 0 falls w ∈ /L Falls es keine solche Funktion gibt, so ist die Sprache unentscheidbar. Falls es eine Funktion gibt mit 1 falls w ∈ L 0 χ (w) = undef falls w ∈ /L so ist die Sprache semi-entscheidbar. Falls es eine Funktion gibt mit undef falls w ∈ L 00 χ (w) = 0 falls w ∈ /L so ist die Sprache Cosemi-entscheidbar. Gibt es für eine Sprache L die Funktionen χ0 und ξ 00 , so ist diese entscheidbar. Die Menge aller Sprachen kann nun grob in 4 Teile aufgeteilt werden: 1. Entscheidbare Sprachen 2. Semi-entscheidbare Sprachen 3. Cosemi-entscheidbare Sprachen 4. Weder Semi- noch Cosemi-entscheidbare Sprachen Satz von Rice Sei R die Klasse aller Turing-berechenbaren Funktionen. Sei S ( R. Dann ist die Sprache C(S) = {w|die von Mw berechnete Funktion liegt in S} unentscheidbar. Anders gesagt: Jede nicht-triviale Eigenschaft einer Turingmaschine ist unentscheidbar. Eine nicht-trivial Eigenschaft ist hierbei eine Eigenschaft die für alle Turingmaschinen, unabhängig von ihrer Implementierung, gelten muss. Also eine Eigenschaft der Sprache und nicht der Turingmaschine selbst. 6 Algorithmen und Berechenbarkeit Formelsammlung Beispiele Folgende Sprachen sind weder semi- noch Cosemi-entscheidbar: • U = {w : L(Mw ) = Σ∗ } • I = {w : |L(Mw )| = ∞} • Q = {(w1 , w2 ) : L(Mw1 ) = L(Mw2 )} Folgende Sprachen sind unentscheidbar: • E = {w : L(Mw ) = ∅} • PCP • Halteproblem H, Halteproblem auf leerem Band H0 Für zwei deterministisch kontextfreie Grammatiken G1 , G2 sind fogende Fragestellungen unentscheidbar: • L(G1 ) ∩ L(G2 ) = ∅ • |L(G1 ) ∩ L(G2 )| = ∞ • L(G1 ) ∩ L(G2 ) kontextfrei • L(G1 ) ⊆ L(G2 ) Für zwei deterministisch kontextfreie Grammatiken G1 , G2 sind fogende Fragestellungen unentscheidbar: • L(G1 ) = L(G2 ) • G1 mehrdeutig • L(G1 ) kontextfrei • L(G1 ) regulär • L(G1 ) deterministisch kontextfrei Für L1 kontextfrei und L2 regulär ist folgende Fragestellung unentscheidbar: • L1 = L2 Für kontextsensitive Sprachen ist unentscheidbar: • L=∅ • |L| < ∞ Reduktion Seien A ⊆ Σ∗ und B ⊆ Γ∗ Sprachen. Dann heißt A auf B reduzierbar (A ≤p B), falls es eine totale und berechenbare Funktion f : Σ∗ −→ Γ∗ gibt, so dass für alle x ∈ Σ∗ gilt: x ∈ A ⇐⇒ f (x) ∈ B. 7 Algorithmen und Berechenbarkeit Formelsammlung Falls A ≤p B und B entscheidbar (semi-entscheidbar), so ist auch A entscheidbar (semi-entscheidbar). Beispiele • Halteprobleme • universelle Turingmaschine Gödel’scher Unvollständigkeitssatz Jedes Beweissystem für die wahren arithmetischen Formeln ist notwendigerweise unvollständig. Gödel’sches Prädikat Für jede Tahlenfolge (n0 . . . nk ) gibt es a und b, so dass für i = 0 . . . k gilt: ni = aMOD(1 + (i + 1) · b) Gleichwertig zu β(a, b, i, ni ) is wahr. Die Zahlen a und b lassen sich zu gegebenen Zahlen ni mit Hilfe des chinesischen Restsatzes ermitteln. 9 Berechnbarkeitstheorie Church’sche These: Die Klasse der turing-berechenbaren Funktionen stimmt mit der Klasse der intuitiv berechenbaren Funktionen überein. 9.1 Berechnungsmodelle • loop-Programme = primitive Rekursion • while = goto-Programme = µ-Rekursion 10 Komplexitätstheorie Reduktion Seien A ⊆ Σ∗ und B ⊆ Γ∗ Sprachen. Dann heißt A auf B polynomial reduzierbar (A ≤p B), falls es eine totale und mit polynomialer Komplexität berechenbare 8 Algorithmen und Berechenbarkeit Formelsammlung Funktion f : Σ∗ −→ Γ∗ gibt, so dass für alle x ∈ Σ∗ gilt: x ∈ A ⇐⇒ f (x) ∈ B. Falls A ≤p B und B ∈ P (B ∈ NP), so ist auch A ∈ P (A ∈ NP) Logspace-Transducer Ein Logspace-Transducer benötigt man für eine logspace-Reduktion und ist eine deterministische Turingmaschine mit • Eingabeband mit Lesezugriff • Logarithmisch beschränktes Arbeitsband mit Lese/Schreibzugriff • Ausgabeband mit Schreibzugriff NP-Schwierigkeit/Vollständigkeit Eine Sprache A heißt NP-schwierig, falls für alle Sprache L ∈ NP gilt: L ≤p A. Eine Sprache A heißt NP-vollständig, falls A NP-schwierig und A ∈ NP Konstruierbarkeit Eine Funktion f ist Zeit/Platzkostruierbar, falls Sie in f Schritten/Platz berechnet werden kann. Abgeschlossenheit DSPACE, DTIME sind unter Komplement abgeschlossen indem man einfach die Antworten vertauscht. Platzkompression • NSPACE(O(f )) = NSPACE(f ) • DSPACE(O(f )) = DSPACE(f ) Zeitkompression • NTIME(O(f )) = NTIME(f ) • > 0∀n : f (n) >= (1 + )n ⇒ DTIME(O(f )) = DTIME(f ) 9 Algorithmen und Berechenbarkeit Formelsammlung • DTIME(O(n)) 6= DTIME(n) Zeit/Platzsätze • ∀n : f (n) ≥ log(n) ⇒ DSPACE(f ) ⊆ NSPACE(f ) ⊆ DTIME(2O(f ) ) Satz von Sawitch Sei s : N → N eine Funktion mit s(n) ∈ Ω(log(n)). Dann gilt:NSPACE(s(n)) ⊆ DSPACE((s(n))2 ) Satz von Immerman und Szelepcsényi Sei s : N → N eine platzkonstruierbare Funktion mit s(n) ∈ Ω(log(n)). Dann gilt: NSPACE(s(n)) = co-NSPACE(s(n)) Zeithierarchiesatz Seien t1 , t2 : N → N Funktionen, t1 · log(t1 ) ∈ / Ω(t2 ), t2 ∈ Ω(n log(n)) und t2 sei zeitkonstruierbar. Dann gilt DTIME(t2 ) \ DTIME(t1 ) 6= ∅. Insbesondere gilt DTIME(f (n)) ( DTIME(f (n) · log2 (f (n))) Platzhierarchiesatz Seien s1 , s2 : N → N Funktionen, s1 ∈ / Ω(s2 ), s2 ∈ Ω(log(n)) und s2 sei platzkonstruierbar. Dann gilt DSPACE(s2 ) \ DSPACE(s1 ) 6= ∅. Insbesondere gilt DSPACE(f (n)) ( DSPACE(f (n) · log(n)) Lückensatz von Borodin Für totale, berechenbare Funktionen r : N → N mit r(n) ≥ n, gibt es immer eine totale und berechenbare Funktion s : N → N sodass gilt: DTIME(s) = DTIME(r ◦ s) Translationstechnik Beispiele P-vollständige Probleme 10 Algorithmen und Berechenbarkeit Formelsammlung 11 Minimale Schnitte Algorithmen • Stoer-Wagner • Karger-Stein Karger-Stein 12 Sonstige Themen Algorithmen • Stabile Heirat (Gale-Shapley) • Median in Linearzeit 11