Berechenbarkeits- und Komplexitätstheorie Verschiedene Berechenbarkeitsbegriffe, Entscheidbarkeit von Sprachen, Wachstumsordnungen und Komplexitätsklassen Inhaltsübersicht und Literatur ¾ Verschiedene Berechenbarkeitsbegriffe: intuitive Berechenbarkeit Turing-Berechenbarkeit LOOP-, GOTO- und WHILE-Programme primitiv rekursive und µ-rekursive Funktionen ¾ Entscheidbarkeit von Sprachen ¾ Das Halteproblem für Turingmaschinen ¾ Der Gödel'sche Unvollständigkeitssatz ¾ Wachstumsordnungen und Komplexitätsklassen ¾ Das P-NP-Problem, NP-Vollständigkeit Literatur: ¾ Uwe Schöning: Theoretische Informatik - kurzgefaßt, 4. Auflage, Spektrum Akademischer Verlag 2001 ¾ Hopcroft / Motwani / Ullman: Introduction to Automata Theory, Languages, and Computation, 2nd edition, Addison-Wesley 2001 Theoretische Informatik I Berechenbarkeit und Komplexität 2 Nischwitz / Vogt Intuitive Berechenbarkeit Wir betrachten die Frage, ob Funktionen auf den natürlichen Zahlen berechenbar sind. Eine (evtl. partielle) Funktion f: Nk ----> N heiße berechenbar, wenn es ein Rechenverfahren, also einen Algorithmus gibt (z.B. in Form eines Java- oder C-Programms), das f berechnet, d.h. bei Eingabe von (n1, n2, ... , nk) soll der Algorithmus nach endlich vielen Schritten die Ausgabe f(n1, n2, ... , nk) liefern, falls f an dieser Stelle definiert ist, nicht stoppen, falls f an der Stelle (n1, n2, ... , nk) nicht definiert ist. Theoretische Informatik I Berechenbarkeit und Komplexität 3 Nischwitz / Vogt Beispiele f1 (n) = 1 falls n ein Anfangsabschnitt der Dezimalbruchentwicklung von π ist 0 sonst f2 (n) = 1 falls n irgendwo in der Dezimalbruchentwicklung von π vorkommt 0 sonst f3 (n) = 1 falls in der Dezimalbruchentwicklung von π irgendwo mindestens n-mal hintereinander eine 7 vorkommt 0 sonst f4 (n) = 1 falls das LBA-Problem eine positive Lösung hat 0 sonst Welche dieser Funktionen sind berechenbar? Theoretische Informatik I Berechenbarkeit und Komplexität 4 Nischwitz / Vogt Turing-Berechenbarkeit Definition: Eine Funktion f: Nk ----> N heißt Turing-berechenbar, falls es eine (deterministische) Turingmaschine M gibt, so daß für alle (n1, n2, ... , nk) gilt: f (n1, n2, ... , nk) = m genau dann wenn die Turingmaschine M bei der anfänglichen Bandbeschriftung bin(n1)#bin(n2)# ... #bin(nk) nach endlich vielen Schritten in einen Endzustand übergeht und auf dem Band dann bin(m) steht. Hierbei bezeichnet bin(n) die Binärdarstellung der Zahl n. Theoretische Informatik I Berechenbarkeit und Komplexität 5 Nischwitz / Vogt LOOP-Programme (1) Syntaktische Komponenten von LOOP-Programmen: Variablen: x0, x1, x2 , ... Konstanten: 0, 1, 2, ... Trennsymbole: ; := Operationszeichen: + Schlüsselwörter: LOOP DO END Induktive Definition der Syntax von LOOP-Programmen: Jede Wertzuweisung der Form xi := xk + c bzw. xi := xk - c ist ein LOOP-Programm. Sind P1 und P2 LOOP-Programme, so auch P1;P2. Ist P ein LOOP-Programm und xi eine Variable, so ist auch LOOP xi DO P END ein LOOP-Programm. Theoretische Informatik I Berechenbarkeit und Komplexität 6 Nischwitz / Vogt LOOP-Programme (2) Die Semantik von LOOP-Programmen für Funktionen f: Nk ----> N ist wie folgt definiert: ¾ Die Startwerte n1, n2, ... , nk stehen in den Variablen x1, x2, ... , xk, alle anderen Variablen haben den Wert 0. ¾ Die Wertzuweisung xi := xk + c wird wie üblich interpretiert, bei der Wertzuweisung xi := xk - c wird die modifizierte Subtraktion verwendet, d.h. das Resultat wird auf 0 gesetzt, wenn c > xk ist. ¾ Das LOOP-Programm P1;P2 bedeutet, daß zunächst P1 und dann P2 ausgeführt wird. ¾ Das LOOP-Programm LOOP xi DO P END bedeutet, daß das Programm P so oft ausgeführt wird, wie der Wert der Variablen xi zu Beginn angibt. Das Ergebnis der Berechnung eines LOOP-Programms ist der Inhalt der Variablen x0. Theoretische Informatik I Berechenbarkeit und Komplexität 7 Nischwitz / Vogt LOOP-Berechenbarkeit Definition: Eine Funktion f: Nk ----> N heißt LOOP-berechenbar, wenn es ein LOOP-Programm P gibt, das f in dem Sinne berechnet, daß P, gestartet mit den Werten n1, n2, ... , nk in den Variablen x1, x2, ... , xk (und 0 in den restlichen Variablen) stoppt mit dem Wert f(n1, n2, ... , nk) in der Variablen x0. Frage: Ist jede (intuitiv) berechenbare Funktion LOOP-berechenbar? Theoretische Informatik I Berechenbarkeit und Komplexität 8 Nischwitz / Vogt WHILE-Berechenbarkeit Definition: Ein WHILE-Programm ist ein Programm, dessen Syntax alle Konzepte von LOOPProgrammen enthält sowie zusätzlich: Ist P ein WHILE-Programm und xi eine Variable, so ist auch WHILE xi ≠ 0 DO P END ein WHILE-Programm. Definition: Eine Funktion f: Nk ----> N heißt WHILE-berechenbar, wenn es ein WHILE-Programm P gibt, das f in dem Sinne berechnet, daß P, gestartet mit den Werten n1, n2, ... , nk in den Variablen x1, x2, ... , xk (und 0 in den restlichen Variablen) stoppt mit dem Wert f(n1, n2, ... , nk) in der Variablen x0, falls f(n1, n2, ... , nk) definiert ist, und ansonsten nicht stoppt. Theoretische Informatik I Berechenbarkeit und Komplexität 9 Nischwitz / Vogt GOTO-Berechenbarkeit Definition: GOTO-Programme bestehen aus Sequenzen von Anweisungen Ai, die jeweils durch eine Marke Mi eingeleitet werden: M1 : A1; M2 : A2; ... ; Mk : Ak Als mögliche Anweisungen sind zugelassen: Wertzuweisungen: xi := xk + c bzw. xi := xk - c Unbedingter Sprung: GOTO Mi Bedingter Sprung: IF xi = c THEN GOTO Mk Stopanweisung: HALT Definition: Eine Funktion f: Nk ----> N heißt GOTO-berechenbar, wenn es ein GOTO-Programm P gibt, das f in dem bekannten Sinn berechnet. Theoretische Informatik I Berechenbarkeit und Komplexität 10 Nischwitz / Vogt Äquivalenz von GOTO- und WHILE-Berechenbarkeit Satz: Eine Funktion ist genau dann WHILE-berechenbar, wenn sie GOTO-berechenbar ist. Beweis: =>: fast trivial <=: nicht so offensichtlich, aber auch nicht schwierig (Der Beweis wird in der Vorlesung geführt.) Aus dem Beweis ergibt sich folgendes Korollar (Kleene'sche Normalform für WHILE-Programme) Jede WHILE-berechenbare Funktion kann durch ein WHILE-Programm mit nur einer WHILE-Schleife berechnet werden. Theoretische Informatik I Berechenbarkeit und Komplexität 11 Nischwitz / Vogt Äquivalente Berechenbarkeitsbegriffe Satz: Für eine Funktion f: Nk ----> N sind die folgenden Aussagen äquivalent: f ist Turing-berechenbar f ist GOTO-berechenbar f ist WHILE-berechenbar Beweis: WHILE-berechenbar => Turing-berechenbar: man gibt für jedes Konstrukt eines WHILE-Programmes eine geeignete Turing-Maschine explizit an. Turing-berechenbar => GOTO-berechenbar: Auch dieser Beweis ist konstruktiv, aber etwas aufwendiger. Siehe z.B. Schöning S. 102-104. Theoretische Informatik I Berechenbarkeit und Komplexität 12 Nischwitz / Vogt Primitiv rekursive Funktionen (1) Definition: Die Klasse der primitiv rekursiven Funktionen (auf den natürlichen Zahlen) ist induktiv wie folgt definiert: 1. Alle konstanten Funktionen sind primitiv rekursiv. 2. Alle Projektionen sind primitiv rekursiv. 3. Die Nachfolgerfunktion auf den natürlichen Zahlen ist primitiv rekursiv. 4. Die Komposition primitiv rekursiver Funktionen ist primitiv rekursiv. 5. Jede Funktion, die durch sog. primitive Rekursion aus primitiv rekursiven Funktionen entsteht ist primitiv rekursiv. Primitive Rekursion führt die Definition von f(n+1,...) zurück auf f(n, ...). Genauer: f erfüllt ein Gleichungssystem f(0, ...) = g(...) f(n+1, ...) = h (f(n, ...), ...) mit primitiv rekursiven Funktionen g und h. Theoretische Informatik I Berechenbarkeit und Komplexität 13 Nischwitz / Vogt Primitiv rekursive Funktionen (2) Beispiel 1: Die Additionsfunktion add: N2 ----> N ist primitiv rekursiv, denn sie kann folgendermaßen dargestellt werden: add (0,x) = x (identische Abbildung) add (n+1,x) = s (add (n,x)) (s = Nachfolgerfunktion) Beispiel 2: Die Multiplikationsfunktion mult: N2 ----> N ist primitiv rekursiv, denn sie kann folgendermaßen dargestellt werden: mult (0,x) = 0 (konstante Abbildung) mult (n+1,x) = add (mult (n,x), x) Satz (ohne Beweis): Die Klasse der primitiv rekursiven Funktionen stimmt mit der Klasse der LOOPberechenbaren Funktionen überein. Theoretische Informatik I Berechenbarkeit und Komplexität 14 Nischwitz / Vogt µ-rekursive Funktionen Definition: Sei f: Nk+1 ----> N eine k+1-stellige Funktion. Die durch Anwendung des µ-Operators auf f entstehende Funktion ist g: Nk ----> N mit g (x1, x2, ... , xk) = min { n; f(n, x1, x2, ... , xk) = 0 und für alle m<n ist f(m, x1, x2, ... , xk) definiert} (Ist das Minimum nicht definiert, so ist g an dieser Stelle undefiniert.) Definition: Die Klasse der µ-rekursiven Funktionen ist die kleinste Klasse von Funktionen, die die Basisfunktionen (konstante Funktionen, Projektionen, Nachfolgerfunktion) enthält und abgeschlossen ist unter Komposition, primitiver Rekursion und Anwendung des µ-Operators. Satz (ohne Beweis): Die Klasse der µ-rekursiven Funktionen stimmt mit der Klasse der WHILE- (GOTO-, Turing-) berechenbaren Funktionen überein. Theoretische Informatik I Berechenbarkeit und Komplexität 15 Nischwitz / Vogt Die Ackermannfunktion Ackermann gab 1928 (!) eine Funktion an, die zwar (intuitiv) berechenbar ist, jedoch nicht LOOP-berechenbar (bzw. primitiv rekursiv). ack: N2 ----> N ack (0,y) = y + 1 ack (x,0) = ack (x-1, 1) ack (x,y) = ack (x-1, ack (x, y-1)) Folgerungen: ¾ Es gibt totale, WHILE- (GOTO-, Turing-) berechenbare Funktionen, die nicht LOOP-berechenbar sind. ¾ Es gibt µ-rekursive Funktionen, die nicht primitiv rekursiv sind. Theoretische Informatik I Berechenbarkeit und Komplexität 16 Nischwitz / Vogt (Semi-)Entscheidbarkeit von Sprachen Für ein Alphabet X und eine Menge A ⊆ X* definieren wir die charakteristische Funktion χA: X* ----> {0,1} von A durch: χA (w) = 1 falls w ∈ A 0 falls w ∉ A Die "halbe" charakteristische Funktion von A, χA': X* ----> {0,1} sei definiert durch χA' (w) = 1 falls w ∈ A undefiniert falls w ∉ A Definition: Eine Sprache A ⊆ X* heißt entscheidbar, falls die charakteristische Funktion χA von A berechenbar ist. Eine Sprache A ⊆ X* heißt semi-entscheidbar, falls die "halbe" charakteristische Funktion χA' von A berechenbar ist. Theoretische Informatik I Berechenbarkeit und Komplexität 17 Nischwitz / Vogt Rekursive Aufzählbarkeit Definition: Eine Sprache A ⊆ X* heißt rekursiv aufzählbar, falls A = ∅ ist, oder falls es eine totale und berechenbare Funktion f: N ----> X gibt, so dass A = {f(0), f(1), f(2), ... } Bemerkungen: ¾ Jede rekursiv aufzählbare Sprache ist abzählbar. ¾ Jede Teilmenge einer abzählbaren Menge ist abzählbar. ¾ Nicht jede Teilmenge einer rekursiv aufzählbaren Menge ist rekursiv aufzählbar. Theoretische Informatik I Berechenbarkeit und Komplexität 18 Nischwitz / Vogt Ein Äquivalenzsatz für Sprachen Satz (ohne Beweis): Für eine Sprache A ⊆ X* sind die folgenden Aussagen äquivalent: A ist rekursiv aufzählbar A ist semi-entscheidbar A ist vom Typ 0 A ist Sprache einer Turingmaschine die Funktion χA' ist berechenbar Theoretische Informatik I Berechenbarkeit und Komplexität 19 Nischwitz / Vogt Das Halteproblem für Turingmaschinen Durch geeignete Codierung der Übergangsfunktion läßt sich jede Turingmaschine T als Wort wT über {0,1} darstellen. Das Halteproblem für Turingmaschinen ist dann die Sprache H = { (wT ,x); T angesetzt auf x hält an } (o.B.d.A.: x ∈ {0,1}* ) Satz: Das Halteproblem für Turingmaschinen ist nicht entscheidbar. Beweis: Angenommen, M sei eine Turingmaschine, die χH berechnet. Wir betrachten die Turingmaschine M': stop nein (wT ,x) ---> M ---> Ergebnis 1? ja unendliche Schleife M' angesetzt auf seine eigene Codierung (wM' ,wM') hält genau dann an, wenn sie nicht anhält: Widerspruch. Theoretische Informatik I Berechenbarkeit und Komplexität 20 Nischwitz / Vogt Weitere nicht entscheidbare Probleme (1) ¾ Das Halteproblem für Turingmaschinen auf leerem Band ist nicht entscheidbar. ¾ Satz von Rice: Sei Tur die Klasse aller Turing-berechenbaren Funktionen und S ⊂ Tur eine nicht-triviale Teilmenge. Dann ist die Sprache { wT ; die von T berechnete Funktion liegt in S } nicht entscheidbar. Beispiel: Es ist nicht möglich, einer Turingmaschine anzusehen, ob sie eine konstante Funktion berechnet. Theoretische Informatik I Berechenbarkeit und Komplexität 21 Nischwitz / Vogt Weitere nicht entscheidbare Probleme (2) Unter dem Wortproblem für eine Grammatik G versteht man die Frage, ob ein Wort x zu L(G) gehört oder nicht. Das Leerheitsproblem für eine Grammatik G fragt ob L(G) = ∅ ist. Unter dem Schnittproblem versteht man die Frage, ob für zwei Grammatiken G1 und G2 die Menge L(G1) ∩ L(G2) leer ist oder nicht. Das Äquivalenzproblem fragt, ob L(G1) = L(G2) ist. ¾ Das Wortproblem für Typ-0 Sprachen ist nicht entscheidbar. ¾ Das Leerheitsproblem für kontextsensitive Sprachen ist nicht entscheidbar. ¾ Das Schnittproblem für deterministisch kontextfreie Sprachen ist nicht entscheidbar. ¾ Das Äquivalenzproblem für kontextfreie Sprachen ist nicht entscheidbar. ¾ Das Problem, für eine kontextfreie Grammatik festzustellen, ob sie mehrdeutig ist, ist nicht entscheidbar. Theoretische Informatik I Berechenbarkeit und Komplexität 22 Nischwitz / Vogt Eine Beweismethode für (Nicht-)Entscheidbarkeit Definition: Seien A ⊆ X* und B ⊆ Y* Sprachen. Dann heißt A auf B reduzierbar – geschrieben als A < B – falls es eine totale, berechenbare Funktion f: X* Æ Y* gibt, so dass für alle x ∈ X* gilt: x ∈ X Ù f(x) ∈ Y Satz: Ist A < B und ist B entscheidbar (bzw. semi-entscheidbar), so ist auch A entscheidbar (bzw. semi-entscheidbar). Für den Nachweis der Unentscheidbarkeit einer Sprache B genügt es also, für eine Sprache A, deren Unentscheidbarkeit bekannt ist, A < B nachzuweisen. Theoretische Informatik I Berechenbarkeit und Komplexität 23 Nischwitz / Vogt Arithmetische Formeln Definition: Ein arithmetischer Term ist induktiv wie folgt definiert: Jede natürliche Zahl ist ein Term. Jede Variable xi ist ein Term. Sind t1 und t2 Terme, so auch (t1 + t2) und (t1 * t2). Eine arithmetische Formel ist induktiv wie folgt definiert: Sind t1 und t2 Terme, so ist (t1 = t2) eine Formel. Sind F und G Formeln, dann sind auch ¬ F, (F ∧ G) und (F ∨ G) Formeln. Sind x eine Variable und F eine Formel, dann sind auch ∃ x F und ∀ x F Formeln. Eine arithmetische Formel heißt wahr, wenn sie für alle Belegungen der Variablen wahr ist, bzw. für ∃ x F , wenn es eine natürliche Zahl x gibt, für die die Formel wahr ist. Theoretische Informatik I Berechenbarkeit und Komplexität 24 Nischwitz / Vogt Gödel'scher Unvollständigkeitssatz Satz: Die Menge der wahren arithmetischen Formeln ist nicht rekursiv aufzählbar. Egal, wie man den Begriff "Beweis" axiomatisiert, ist es sicher eine Minimalforderung zu verlangen, daß die Menge aller zulässigen Beweise entscheidbar (und somit auch rekursiv aufzählbar) ist. Aus dieser Forderung und obigem Satz folgt dann: Gödel'scher Unvollständigkeitssatz: Jedes Beweissystem für die Menge der wahren arithmetischen Formeln ist notwendigerweise unvollständig. (D.h. es bleiben immer wahre arithmetische Formeln übrig, die nicht beweisbar sind.) Theoretische Informatik I Berechenbarkeit und Komplexität 25 Nischwitz / Vogt Wachstumsordnung von Funktionen Die O-Notation (Bachmann 1892) beschreibt das Wachstumsverhalten von Funktionen für n Æ ∞ . ¾ Eine Funktion f(n) heißt von der (Wachstums-)Ordnung g(n) f(n) = O (g(n)) falls der Quotient |f(n) / g(n)| beschränkt ist, also |f(n)| < K |g(n)| für alle n, mit einer Konstanten K. ¾ Beispiele: Jedes Polynom P(n) vom Grad < k ist von der Ordnung nk. Die Exponentialfunktion f(n) = en ist nicht von polynomialer Ordnung, d.h. für alle natürlichen Zahlen k ist en/nk unbeschränkt. Theoretische Informatik I Berechenbarkeit und Komplexität 26 Nischwitz / Vogt Größenordnungen einiger Funktionen n n log(n) n2 10 100 1000 10000 100000 23 461 6.908 92.103 1.151.293 100 10.000 1.000.000 100.000.000 10.000.000.000 Theoretische Informatik I Berechenbarkeit und Komplexität 27 en 22.026 2,69 · 1043 Nischwitz / Vogt Die Komplexitätsklasse P Definition: Sei f: N Æ N eine Funktion. Die Klasse TIME (f (n)) besteht aus allen Sprachen A, für die es eine deterministische (Mehrband-) Turingmaschine M gibt mit A = L(M) und timeM (x) < f (|x|). Hierbei bedeutet timeM : X * ---> N die Anzahl der Rechenschritte von M bei Eingabe x. Definition: Die Komplexitätsklasse P ist wie folgt definiert: P = { A ; es gibt eine Turingmaschine M und ein Polynom p mit A = L(M) und timeM (x) < p (|x|) } = ∪ TIME (p (n)) p Polynom Theoretische Informatik I Berechenbarkeit und Komplexität 28 Nischwitz / Vogt Die Komplexitätsklasse NP Wir dehnen die obigen Definitionen nun auf nichtdeterministische Turingmaschinen M aus. Für ein x ∈ L(M) verstehen wir unter einer akzeptierenden Rechnung von M für x einen Arbeitsablauf der nichtdeterministischen Turingmaschine M bei Eingabe x, der zu einem Endzustand führt. Definition: Für eine nichtdeterministische Turingmaschine M sei min { Länge einer akzeptierenden Rechnung ntimeM (x) = von M für x } falls x ∈ L(M) 0 sonst Sei f: N ---> N eine Funktion. Die Klasse NTIME (f (n)) besteht aus allen Sprachen A, für die es eine nichtdeterministische (Mehrband-) Turingmaschine M gibt mit A = L(M) und ntimeM (x) < f (|x|). Ferner definieren wir: Theoretische Informatik I NP = ∪ p Polynom NTIME (p (n)) Berechenbarkeit und Komplexität 29 Nischwitz / Vogt Das P-NP-Problem Das P-NP-Problem: Es ist unbekannt, ob P = NP oder P ≠ NP ist. Es gelten die folgenden Inklusionen: semi-entscheidbar entscheidbar LOOP-berechenbar NP P Theoretische Informatik I Berechenbarkeit und Komplexität 30 Nischwitz / Vogt NP-Vollständigkeit Definition: Seien A ⊂ X* und B ⊂ Y* Sprachen. Dann heißt A auf B polynomial reduzierbar, geschrieben als A < p B, falls es eine totale, mit polynomialer Komplexität berechenbare Funktion f: X* ----> Y* gibt, so daß für alle x ∈ X* gilt: x ∈ A ⇔ f(x) ∈ B . Satz: Ist A < p B und B ∈ P (bzw. B ∈ NP), so ist auch A ∈ P (bzw. A ∈ NP). Definition: Eine Sprache A heißt NP-hart, falls L < p A für alle L ∈ NP. Eine Sprache A heißt NP-vollständig, falls A NP-hart ist und A ∈ NP. Satz: Sei A NP-vollständig. Dann gilt: A ∈ P ⇔ P = NP Theoretische Informatik I Berechenbarkeit und Komplexität 31 Nischwitz / Vogt NP-vollständige Probleme (1) Es gibt eine ganze Reihe bekannter Probleme, von denen man weiß, daß sie NP-vollständig sind. Im folgenden werden einige davon definiert ohne ihre NP-Vollständigkeit zu zeigen. Erfüllbarkeitsproblem der Aussagenlogik: gegeben: eine Formel F der Aussagenlogik gefragt: ist F erfüllbar, d.h. gibt es eine Belegung der Variablen mit Konstanten ∈ {0,1}, so daß F den Wert 1 erhält? Traveling Salesman: gegeben: Eine n x n Matrix (Mi,k) von "Entfernungen" zwischen n "Städten" und eine Zahl m ∈ N. gefragt: Gibt es eine Permutation p (eine "Rundreise"), so daß n−1 ? ∑ i = 1 M p (i),p (i + 1) + M p (n),p (1) ≤ m Theoretische Informatik I Berechenbarkeit und Komplexität 32 Nischwitz / Vogt NP-vollständige Probleme (2) Rucksack (oder SUBSET SUM): gegeben: Natürliche Zahlen a1, a2, ..., ak ∈ N und b ∈ N. gefragt: Gibt es eine Teilmenge I von {1, 2, ..., k} mit Σ ai = b ? i∈I Partition: gegeben: gefragt: Natürliche Zahlen a1, a2, ..., ak ∈ N. Gibt es eine Teilmenge J von {1, 2, ..., k}, so daß Σ a i = Σ ai ? i∈J Theoretische Informatik I i∉J Berechenbarkeit und Komplexität 33 Nischwitz / Vogt NP-vollständige Probleme (3) Clique: gegeben: gefragt: ein (ungerichteter) Graph G = (V, E) und ein k ∈ N. gibt es eine "Clique" der Größe k, d.h. eine Teilmenge V' ⊂ V mit k Elementen, so daß für alle u,v ∈ V' mit u ≠ v gilt: (u,v) ∈ E? Gerichteter Hamiltonkreis: gegeben: Ein gerichteter Graph (V, E). gefragt: Besitzt G einen Hamilton-Kreis? (Das heißt einen Weg durch den Graphen, der jeden Knoten genau einmal passiert und schließlich wieder am Ausgangsknoten ankommt.) Ungerichteter Hamiltonkreis: gegeben: Ein ungerichteter Graph (V, E). gefragt: Besitzt G einen Hamilton-Kreis? Theoretische Informatik I Berechenbarkeit und Komplexität 34 Nischwitz / Vogt NP-harte Probleme Satz: Das Wortproblem für Typ-1-Sprachen ist NP-hart. Satz: Das Äquivalenzproblem für reguläre Grammatiken ist NP-hart. Theoretische Informatik I Berechenbarkeit und Komplexität 35 Nischwitz / Vogt