Sie sind auf Seite 1von 13

Automaten, Sprachen, Komplexität

im WS 06/07 an der RWTH Aachen

Zusammenfassung von Skript und sonstigen Erkenntnissen

Markus Lelie

Diese Zusammenfassung ist im Rahmen der Vorbereitung auf die grandiose und allseits übe-
raus gefürchtete ASK-Scheinklausur am diesjährigen Karnevalsdonnerstag (Weiberfastnacht,
oder „Fettdonnerstag“ wie gewisse Leute unverständlicherweise zu sagen pflegen) entstanden und
orientiert sich vom Aufbau her vornehmlich am Skript von Wolfgang Thomas zur ASK Vorle-
sung, die in unserem Fall vom Meister der Cordjackets, J.P. Katoen1 gehalten wurde.
Ursprünglich war nur eine kurze Übersicht der zu wissenden Algorithmen und Definitionen
geplant, ist im Endeffekt dann aber doch etwas umfangreicher geworden.
Natürlich erhebt dieses Werk keineswegs den Anspruch auf Vollständigkeit, einige perverse
Vorkommnisse aus gewissen Übungen wurden dezent vernachlässigt, da sie auch nicht im Skript
zu finden waren und bereits bei der Bearbeitung der Übungen genug Freude bereitet haben.
Außerdem wurden natürlich sämtliche Beispiele wegrationalisiert, da sie sich bei Bedarf zahl-
reich an anderen Stellen finden lassen (siehe Skript, Übungen, Wikipedia).
Das Auftreten von Fehlern aller Art ist ebenfalls nur natürlich, sie dürfen mir aber gerne
mitgeteilt werden ( → http://www.lelie.de/markus/).

Eine übungsbezogene, eher cookbookartige Zusammenfassung hat der andere Markus


geschrieben, wenn man ihn also lieb fragt, oder vielleicht mal auf seiner Website guckt...

Also, viel Spaß und denk’ immer dran: follow the blue Cordjacket ;)

Inhaltsverzeichnis
Inhaltsverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1 Endliche Automaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1 Deterministische Endliche Automaten . . . .. .. .. .. . . . . . . . . . . . . . . . . . . . 4
Akzeptieren . . . . . . . . . . . . . . . . .. .. .. .. . . . . . . . . . . . . . . . . . . . 4
Äquivalenz . . . . . . . . . . . . . . . . . .. .. .. .. . . . . . . . . . . . . . . . . . . . 4
1.1.1 Boolsche Operationen auf Automaten und Sprachen . . . . . . . . . . . . . . . . . . 4
Komplement einer Sprache . . . . . . . .. .. .. .. . . . . . . . . . . . . . . . . . . . 4
Durchschnitt zweier Sprachen . . . . . .. .. .. .. . . . . . . . . . . . . . . . . . . . 4
Vereinigung zweier Sprachen . . . . . . .. .. .. .. . . . . . . . . . . . . . . . . . . . 4
1.1.2 Verkettung von Sprachen . . . . . . . . .. .. .. .. . . . . . . . . . . . . . . . . . . . 4
Verkettung / Konkatenation . . . . . . .. .. .. .. . . . . . . . . . . . . . . . . . . . 4
Rechenregel 1 . . . . . . . . . . . . . . . .. .. .. .. . . . . . . . . . . . . . . . . . . . 4
Potenz einer Sprache . . . . . . . . . . . .. .. .. .. . . . . . . . . . . . . . . . . . . . 4
Iteration, Kleene Stern . . . . . . . . . .. .. .. .. . . . . . . . . . . . . . . . . . . . 4
Rechenregel 2 . . . . . . . . . . . . . . . .. .. .. .. . . . . . . . . . . . . . . . . . . . 4
1.2 Nichtdeterministische endliche Automaten . .. .. .. .. . . . . . . . . . . . . . . . . . . . 4
Akzeptieren . . . . . . . . . . . . . . . . .. .. .. .. . . . . . . . . . . . . . . . . . . . 5
Erreichbarkeitsmenge (eines Wortes) . .. .. .. .. . . . . . . . . . . . . . . . . . . . 5

1. im Folgenden auch als JPK bezeichnet

1
2 Abschnitt

1.3 ε-NEAs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 ε − NEA → NEA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
algorithmisches Vorgehen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 Reguläre Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
reguläre Sprachen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Satz von Kleene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5.1 reg. Ausdruck → NEA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5.2 reguläre Automaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Verfahren NEA → reg. Automat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.6 Algorithmen auf Automaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.6.1 Nichtleerheitsproblem für NEAs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Probieralgorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.6.2 Algorithmen auf Graphen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Breite(n)[-]Suche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Tiefensuche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Lösung des Nichtleerheitsproblems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Aufwandsabschätzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
O-Notation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.6.3 Inklusions- und Äquivalenzproblem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Inklusionsproblem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Äquivalenzproblem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.6.4 Minimierungsproblem für DEAs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.7 Grenzen der Endlichen Automaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.7.1 Nachweis der Nichtregularität . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2 Grammatiken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Kontextfreie Grammatiken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Ableitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1 CF Sprachen ↔ reguläre Sprachen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Rechtslinearität . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.1 Chomsky und Greibach NF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Chomsky Normalform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Greibach Normalform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.2 Leerheitsproblem für CF Grammatiken . . . . . . . . . . . . . . . . . . . . . . . . . . 9
„Zweiter Markierungsalgorithmus“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2 Ableitungsbäume und Anwendungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.1 Ableitungsbäume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.2 Pumping Lemma und nicht cf-Sprachen . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.3 Wortproblem für cf-Grammatiken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
CYK Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3 Push-Down-Automaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Akzeptieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
PDA Erkennbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Notation: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Determinismus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.1 Grammatik → PDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3 Berechenbarkeit und Komplexität . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11


3.1 Turing Berechenbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1.1 Turingmaschinen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Turing-Berechenbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Turing Entscheidbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Inhaltsverzeichnis 3

Church Turing These . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11


3.2 Unentscheidbare Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2.1 Allgemeines Halteproblem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2.2 Halte- und Äquivalenzproblem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Reduzierbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Reduktionslemma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Halteproblem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Äquivalenzproblem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3 Komplexitätsklassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.4 P, NP und NP-Vollständigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
P .. .. .. .. .. .. .. ... .. .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Die These von Edmonds, Cobham . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
NP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Das P-NP-Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.4.1 NP-Vollständigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4 Abschnitt 1

1 Endliche Automaten

1.1 Deterministische Endliche Automaten


DEA A = (Q, Σ, q0, δ, F ) ist Quintupel bestehend aus Menge der Zustände Q, Alphabet (oder
„Alphabettt“ ;)) Σ, Startzustand q0, Übergangsfunktion δ: Q × Σ → Q (bzw δ∗: Q × Σ∗ → Q für
Wörter) und Menge der Finalzustände F ⊆ Q.
graphische Darstellung durch Graphen möglich.

Akzeptieren Ein DEA akzeptiert ein Wort w, wenn die Eingabe von w den Automaten in
einen Endzustand führt.
Äquivalenz zwei DEAs sind äquivalent, wenn sie dieselbe Sprache akzeptieren

1.1.1 Boolsche Operationen auf Automaten und Sprachen


Es ist möglich Automaten zu konstruieren, welche die folgenden Boolschen Operationen auf die
Sprachen, die durch andere Automaten erkannt werden umsetzen: Komplement, Durchschnitt,
Vereinigung.
Komplement einer Sprache logisch, Wort liegt im Komplement der Sprache, wenn zu
Sprache gehörender DEA das Wort nicht akzeptiert.
Durchschnitt zweier Sprachen → Produktautomat (für beide Sprachen ex. je ein Automat,
der diese Sprache erkennt. Idee: lasse beide Automaten parallel laufen, ein Wort liegt in beiden
Sprachen und damit im Durchschnitt beider Sprachen, wenn nach dessen Eingabe beide Auto-
maten in einem Endzustand stehen.)
mit A1 = (Q1, Σ, q01, δ1, F1), A2 = (Q2, Σ, q02, δ2, F2) ist definiert:
Produktautomat A: = (Q1 × Q2, Σ, (q01, q02), δ, F1 × F2)
Vereinigung zweier Sprachen im Prinzip wie Durchschnitt, nur dass die Menge F des neuen
Automaten die Vereinigung (F1 × Q2) ∪ (Q1 × F2) ist. D.h. der neue Automat akzeptiert alle
Worte beider Sprachen.

1.1.2 Verkettung von Sprachen


Verkettung / Konkatenation L1 · L2 = {uv ǫΣ∗|uǫL1, vǫL2}
Rechenregel 1 K · (K1 ∪ K2) = K · L1 ∪ K · L2
Potenz einer Sprache L0 4 {ε}, Ln+1 4 Ln · L (n-fache Verkettung der Sprache mit sich
selbst)
Ein Wort gehört zu Ln, gdw, wenn es sich zerlegen lässt als w = u1 un mit ui ǫL für i = 1 n
S n
Iteration, Kleene Stern L∗ 4 L immer: ε ∈ L∗
n≥0
wie bei Potenz: Wort gehört zu L∗, wenn es eine Zerlegung analog zu der für Ln gibt.
Rechenregel 2 (K ∪ L)∗ = (K ∗ · L)∗ · K ∗

1.2 Nichtdeterministische endliche Automaten


Nun auch erlaubt: Nichtdeterministische Zustandsübergänge (d.h. im Zustandsgraph mehrere
gleich beschriftete Kanten, die vom selben Zustand ausgehen, aber verschiedene Knoten als
„Ziele“ haben). Idee: Automat findet selbst den „richtigen“ Weg, sofern es einen gibt, der zum
Ziel = Finalzustand führt. Durch diese (formale) Vereinbarung werden viele theoretische
Betrachtungen erleichtert. NEAs können immer in äquivalente DEAs umgewandelt werden, der
Informationsgehalt ist also identisch.
Die Transitionen können werden nun als Tripel betrachtet (p, a, q) ⇒ von Zustand p mit
Eingabe a nach Zustand q.
⇒ A = (Q, Σ, q0, ∆, F ) mit ∆ ⊆ Q × Σ × Q, Rest wie bei DEAs
Endliche Automaten 5

Akzeptieren NEA A akzeptiert Wort w, wenn es einen Lauf gibt, der mit w als Eingabe zu
einem Endzustand führt. (Bsp.le siehe Skript)
Erreichbarkeitsmenge (eines Wortes) Menge der Zustände, die NEA durch Eingabe des
Wortes (bzw. seiner Präfixe) erreichen werden kann. Automat akzeptiert ein Wort gdw. die
Erreichbarkeitsmenge des Wortes einen Endzustand enthält

1.3 ε-NEAs
Hier sind nun auch Zustandsübergänge ohne Eingabe erlaubt (im Graphen mit ε beschriftet),
die NEA Konventionen gelten natürlich auch weiter. Die Übergangsfkt. sieht hier wieder etwas
anders aus → Skript

1.4 ε − NEA → NEA


Jeder ε-NEA kann in äquivalenten NEA umgewandelt werden ( → Skript)
Idee: ε-Übergänge eliminieren und „kompensieren“ (wie ne Stromquelle im nachträglich einge-
fügten Sternpunktleiter bei nem unsymmetrisch belasteten 3-Phasen System ;) )
algorithmisches Vorgehen (siehe auch waffelbehaftete Übung) binäre Matrix aufstellen
(ähnl. Adjazenzmatrix), Zustände oben und an die Seite schreiben und 1 an Stellen, wo ε-Über-
gang ex. Dann im Prinzip für alle Paare von Zuständen prüfen, ob es einen über ε Übergänge
und ein „normales“ Eingabesymbol führenden Weg vom einen zum Anderen gibt. Wenn ja,
direkte Transition einfügen.
Alternative: ε-Hüllen aufstellen (E(qi), E(qi) · a, E(E(qi) · a), für alle Zustände qi mit je allen
a ∈ Σ und dann entsprechende Übergänge von qi zu den jeweiligen in den letzten Hüllen enthal-
tenen Zuständen p mit den entspr. Eingabesymbol „einbauen“ (im Prinzip werden so die ε
Überg. vor- und nach den möglichen „normalen“ Übergängen systematisch abgegrast). Have
fun.. Die Hüllen sind schöner als die Matrix ;)

1.5 Reguläre Ausdrücke


Mit endlichen Automaten und regulären Ausdrücken lassen sich dieselben Sprachen definieren.
⇒ reguläre Ausdrücke definieren Sprachen
übertragen auf Sprachen gilt: + = Vereinigung / “oder“, · =Verkettung / “und“ (darf wegge-
lassen werden), ∗ =Kleene Stern / „bel. oft“
Am besten großzügig Klammern, ansonsten bindet * am stärksten, dann · , dann +
reguläre Sprachen eine Sprache ist regulär ⇔ Sprache ist durch regulären Ausdruck defi-
nierbar, bzw mit dem Satz von Kleene durch endl. Automaten erkennbar.
Satz von Kleene sagt, dass zu jedem reg. Ausdruck ein äquivalenter NEA konstruiert werden
kann und umgekehrt. Mit den anderen bekannten Eigenschaften der NEAs und DEAs gilt also,
dass die Eigenschaften DEA-, NEA-, ε-NEA-erkennbar und regulär für Sprachen vollkommen
äquivalent sind.

1.5.1 reg. Ausdruck → NEA


Für jeden Teilausdruck ε-NEA konstruieren und diese Zusammensetzen (und immer dran
denken beim Zusammenfügen genug Zwischenzustände und ε-Transitionen einzufügen, wird ja
besonders beim * gerne mal vergessen). Wie die NEAs für die sog. atomaren Fälle aussehen
müssen ist eigentlich klar und logisch. Sonst → Skript. Bei Bedarf, oder masochistischen
Anwandlungen kann das Ganze natürlich mit den o.g. Verfahren in NEAs umgewandelt werden.

1.5.2 reguläre Automaten


Die sog. regulären Automaten sind eine weitere perverse Phantasie irgendeines kranken Men-
schen. Hier stehen an den Transitionspfeilen nicht nur einzelne Zeichen, sondern reg. expr. Im
Endeffekt läuft es darauf hinaus, aus einem Automaten einen regulären Ausdruck abzuleiten.
6 Abschnitt 1

Verfahren NEA → reg. Automat 1. neuen Start- und neuen Endzustand einfügen, 2. alle
anderen Zustände sukzessive eliminieren (quasi das Verfahren reg. Ausdruck → NEA rück-
wärts), sodass am Ende nur noch der neue Start- und der neue Endzustand übrig und durch
eine Transition mit dem die Sprache des Automaten beschreibenden regulären Ausdruck ver-
bunden sind.

1.6 Algorithmen auf Automaten


1.6.1 Nichtleerheitsproblem für NEAs
Frage: Stellt geg. NEA die leere Sprache dar, oder sagt er was sinnvolles aus bzw. gibt es eine
Möglichkeit den Automaten in einen Finalzustand zu treiben (ohne sich selbst in den Wahnsinn
zu treiben)? (L(A) = ∅ ?) Für Beweise und den ganzen Quatsch → Skript
Probieralgorithmus (O(2n)) ist schlecht und ineffizient (da exponentielle Laufzeit usw, für
mehr siehe Skript)

1.6.2 Algorithmen auf Graphen


Was ein Graph (im hier relevanten Sinne) ist wissen wir alle seit dem InfoLK in der Oberstufe
(oder spätestens seit info1?!), wer es nicht weiß schaue also ins Skript und schäme sich kräftig
Wichtig für unser faszinierendes Nichtleerheitsproblem ist nur, dass dieses Problem äquiva-
lent damit ist, ob der Transitionsgraph des Automaten einen Pfad enthält, der vom Start- zu
einem Endzustand führt. Daher wollen wir uns an dieser Stelle nochmal die Suchalgorithmen für
Graphen ins Gedächtnis rufen.
Breite(n)[-]Suche (FIFO, O(n2)) Liefert Liste der von Knoten p aus erreichbaren Knoten. Im
Prinzip (übertragen auf einen Baum) geht dieses Suchverfahren erst in die Breite und dann in
die Tiefe - d.h. es werden bei einem Baum erst alle Knoten einer Ebene „besucht“, bevor der
Alg. in die nächste hinabsteigt.
Vorgehen: wir benötigen eine queue, um die Knoten zwischenzuspeichern. 1. füge Start-
knoten in queue ein. 2. erstes Element aus queue schnappen und prüfen, ob es das gesuchte ist
bzw. markieren. Anschl. alle unmarkierten Nachfolger des aktuellen Knotens hinten an die
queue hängen. Schritt 2 wiederholen, bis queue leer ⇔ keine unmarkierten, vom Startknoten aus
erreichbaren Knoten mehr vorhanden
Tiefensuche (LIFO, O(n2)) Wie der Name schon sagt, geht dieses Suchverfahren im Gegen-
satz zur Breitensuche zuerst in die Tiefe und anschließend in die Breite. Hierzu wird natur-
gemäß ein Stack als Zwischenspeicher benutzt. (Man danke bei Gelegenheit Gott, oder seinem
verantwortlichen Stellvertreter für die Erfindung des Stacks, ohne ihn hätten wir nur halbsoviel
Spaß am Leben (und keine Möglichkeit beim Sprung in Subroutinen unsere Register zu sichern -
außerdem wäre die Jackenspeichersituation in den Hörsäälen nicht praktikabel zu bewältigen ;)
))
Vorgehen: 1. Startknoten pushen 2. Knoten poppen 3. dessen ersten Nachfolger auf Mar-
kiertheit prüfen, falls er noch nicht markiert wurde, markieren und pushen ab Schritt wieder-
holen, bis Stack leer. (eigentlich rekursiv, hier etwas sehr kastriert und unklar in ASK Weise
dargestellt)
Lösung des Nichtleerheitsproblems um dieses tolle Problem zu lösen, wenden wir also ein-
fach die Breiten- oder Tiefensuche auf den Transitionsgraphen des Automaten an. Ist vom den
Startzustand repräsentierenden Knoten ein Finalzustandsknoten erreichbar, können wir freudig
erregt verkünden, dass der Automat eine nichtleere Sprache erkennt. (und sonst halt nicht)
Aufwandsabschätzung Wir merken uns: das Verhalten (z.B. der Zeitaufwand) eines Algo-
rithmus wird als abhängig von der Größe der Eingabe betrachtet. Die Funktion f (n) stellt in
diesem Zusammenhang die worst-case mäßige Anzahl von Wertzuweisungen und Vergleichen
dar. Für f genügt normalerweise eine Abschätzung, das führt uns zur
O-Notation. Def. lt. Skript: f (n) ist O(g(n)), falls es eine Zahl c > 0 und ein n0 gibt mit:
Endliche Automaten 7

für f ≥ n0 gilt f (n) ≤ c · g(n) (d.h. wir können die Fkt. f (n) für „hinreichend großes n“ durch
die Fkt. g(n) und einen konstanten Faktor abschätzen. Im Allgemeinen sind dies also worst-case
Betrachtungen)

1.6.3 Inklusions- und Äquivalenzproblem


Inklusionsproblem Frage: ist NEA A (bzw. dessen Sprache) in anderem NEA B enthalten
(L(A) ⊆ L(B)?)
Lösung: Alg (O(22n)): 1. B in äquivalenten DEA transformieren2 und diesen in Komplement
NEA umwandeln3 . 2. Produktautomaten des komplementierten DEA mit A bilden und auf
Leerheit prüfen4 ( → (Nicht-)leerheitsproblem)
Äquivalenzproblem Frage: sind 2 geg. NEAs (bzw. deren Sprachen) identisch?
Lösung: getreu den aus der Mathematik bekannten und beliebten Mengenbeziehungen (von
wegen 2 Mengen sind genau dann gleich, wenn jede Teilmenge der anderen ist), lässt sich dieses
Problem auf das Inklusionsproblem zurückführen. Wir wenden einfach den Alg. zur Lösung des
Inklusionsproblems 2 mal, d.h. „in beide Richtungen“ an.

1.6.4 Minimierungsproblem für DEAs


Gesucht: Zu geg. DEA äquivalenter DEA mit minimaler Zustandszahl5 Für alle DEAs, die die-
selbe Sprache erkennen gilt, dass ihre minimierten Formen exakt identisch sind („eindeutig
bestimmt“).
Idee: Paare äquivalenter Zustände ermitteln und zusammenfassen (zwei Zustände sind äqui-
valent, wenn man von beiden ausgehend mit der gleichen Eingabe zu einem Endzustand
gelangt). Einfacher ist bestimmen nicht äquivalenter Zustände (zwei Zustände sind nicht äquiva-
lent, oder trennbar über das Wort w , wenn man vom einem mit w zu einem Endzustand gelangt
und vom anderen nicht).
Vorgehen: Nutze den Markierungsalgorithmus, bzw. seine Matrixform. 1. In der Matrix
jedes Paar von Zuständen (p, q) markieren, bei denen der eine Finalzustand ist und der andere
nicht. 2. Für jedes nichtmarkierte Paar (p, q) und dort jedes a ∈ Σ prüfen, ob (δ(p, a), δ(q, a))
markiert ist. Wenn ja, auch (p, q) markieren und 2 wiederholen, wenn nein abbrechen.
Nach der Termination des Alg. entsprechen die markierten Paare (p, q) den nicht äquiva-
lenten Zuständen.

1.7 Grenzen der Endlichen Automaten


Endliche Automaten können nur reguläre Sprachen erkennen. Manchmal will man jedoch auch
mit den großen Kindern spielen und auch nichtreguläre Sprachen verarbeiten. D.h. sobald wir
eine Sprache haben, deren Erkennung einen vorher nicht exakt bekannten Speicherplatzbedarf
hat, helfen uns die endlichen Automaten nicht mehr weiter.

1.7.1 Nachweis der Nichtregularität


Der Beweis der Nichtregularität einer Sprache erfolgt normalerweise durch herbeiführen eines
Widerspruchs und das geht so:
Wir nehmen einen Automaten, der heißt A, weils so schön kurz ist und er ist ganz schön
endlich. Nun überlegen wir uns ein ziemlich langes Wort w, das der Automat akzeptieren muss
(wir sind ja gemein), und ändern dieses Wort ab, ohne dass der Automat davon etwas mitbe-
kommt. Na den haben wir ja ganz schön ausgetrixt. Der Automat akzeptiert also jetzt ein
Wort, das eigentlich nicht zu seiner Sprache gehört (kann doch jedem mal passieren werdet ihr
jetzt vielleicht sagen, aber hier steckt System dahinter). Wie’s genau geht erklär ich euch nach
der nächsten Maus :)

2. O(2n)
3. O(2n)
4. O(n2n) + O(n2n)
5. nur für DEAs möglich, lt. JPK ist derzeit kein (effizienter) Minimierungsalgorithmus für NEAs bekannt.
Bei NEA also erst mittels Potenzmengenkonstruktion DEA bauen
8 Abschnitt 2

Der Trick bei der ganzen Sache besteht jetzt darin, dass das Wort, das wir uns ausgesucht
haben (ihr erinnert euch, w hatten wir es genannt) so lang ist, dass es der Automat mit seiner
endlichen Zustandsmenge nicht abarbeiten kann, ohne einen Zustand mehr als einmal zu besu-
chet. Es gibt also irgendeine eine Form von Zyklus. Wenn wir nun das Wort länger (oder uU
auch kürzer) machen, indem wir dafür sorgen, dass der Zyklus mehr oder weniger oft durch-
laufen wird, haben wir gewonnen. Wir haben das Wort gepumpt6 und erlaubt hat uns das das
Pumping Lemma. Nun ist der Automat an seiner Endlichkeit zugrunde gegangen. Neue Version:
PDA und Turingmaschine bzw. cf-Grammatiken.
In diesem Sinne, gute Nacht liebe Kinder.

2 Grammatiken
Eine Grammatik enthält Regeln, nach denen alle Worte erzeugt werden können, die in der durch
die Grammatik beschriebenen Sprache enthalten sind7 . Was genau eine Grammatik ist, sollte
zur Genüge bekannt sein...
Kontextfreie Grammatiken eine cf-Grammatik G = (N , Σ, P , S) besteht aus N = endliche
Menge von Nichtterminalsymbolen, Σ = Terminalalphabet, P = endliche Menge von Produk-
tionen (bzw. Regeln X → α mit X ∈ N ∧ α ∈ (Σ ∪ N )∗), S ∈ N = Startsymbol (kontextfrei ⇔
X ∈ N , also links stehen nur NT Symbole, Kontext des Symbols ist vollkommen egal und juckt
uns nicht im geringsten)
Ableitung Im Prinzip eine Abfolge von Produktionen, um ein Wort aus der Grammatik zu
„bauen“. Notation: X ⊢  . ⊢ β
Wir nennen ein Wort nun ableitbar in G, wenn vom Startsymbol aus eine Ableitung existiert,
die dieses Wort erzeugt (S ⊢∗ w).
L(G) ist die von der Grammatik G erzeugte Sprache (die bei einer kontextfreien Grammatik
ebenfalls kontextfrei heißt).

2.1 CF Sprachen ↔ reguläre Sprachen


Wir wissen, dass jede requläre Sprache CF ist, es aber umgekehrt CF Sprachen gibt, die nicht so
regulär sind, wie man sichs vielleicht wünschen würde. Die regulären Sprachen sind also eine
Untermenge der CF Sprachen. (Bsps und Beweise → Skript)
Rechtslinearität ⇒ es gibt nur Regeln der Form X → aY und X → a und bei Bedarf S → ε,
aber dann kein S mehr bei den übrigen Regeln.
Wir merken uns: Sprache regulär ⇔ Sprache rechtslinear

2.1.1 Chomsky und Greibach NF


Chomsky Normalform Jede CF Sprache ist durch Grammatik in CNF erzeugbar. Eine cf-
Grammatik hat CNF, wenn sie nur Regeln enthält, die die Formen X → YZ, sowie X → a haben
(außerdem für S → ε dieselbe Bedingung, wie bei Rechtslinearität)
Herstellung: 1. für jedes Terminalsymbol eigene Regel (eigenes NT Symbol) einführen und
alle Vorkommen des Terminalsymbols durch das neue NT Symbol ersetzen. 2. Alle Regeln der
Form X → Y rausschmeißen (durch Ableitung aller über X → Y erzeugbaren Terme, diese je als
eigene Regel für X → einführen). 3. Alle Regeln eliminieren, die auf der rechten Seite mehr als
ein NT Symbol stehen haben (durch Aufspaltung in 2er Kombinationen mit „Hilfs-Nichttermi-
nalsymbolen“)
Greibach Normalform Eine CF-Grammatik in Greibach Normalform enthält nur Regeln der
Form X → aY1 Ym , m ≥ 0 (und natürlich auch wieder die alte Leier mit dem S und dem ε)

6. oder gepömpt, wie JPK zu sagen pflegt ;)


7. gewisse Sonderformen, wie z.B. die BNF zur Syntaxdefinition von Programmiersprachen finden sich wenn
man garnicht genug bekommt auch hinten im Info2 Skript
Grammatiken 9

Auch hier gilt, dass jede CF Sprache durch eine Grammatik in Greibach Normalform erzeugt
werden kann.

2.1.2 Leerheitsproblem für CF Grammatiken


Frage: L(G) = ∅ also: enthält die durch die Grammatik erzeugte Sprache Wörter, oder nicht?
„Zweiter Markierungsalgorithmus“ Wir wissen, dass die durch die Grammatik erzeugte
Sprache nicht leer ist, wenn das Startsymbol der Grammatik terminierend ist, d.h., wenn es ein
mit G aus S ableitbares Terminalwort gibt.
Vorgehen: 1. Alle Terminalsymbole auf rechten Regelseiten markieren. 2. alle Nichtterminal-
symbole auf linken Regelseiten, die eine vollmarkierte rechte Seite haben in allen rechten und
linken Seiten markieren. 2 wiederholen, solange entsprechende NT Symbole existieren. Ist am
Ende das Startsymbol markiert, gilt L(G)  ∅.

2.2 Ableitungsbäume und Anwendungen

2.2.1 Ableitungsbäume
Für Definition Baum/Ableitungsbaum siehe Skript, im Prinzip klar - andere Darstellung der
Ableitung eines bestimmten Wortes, die etwas strukturiertere Einblicke in den Aufbau des
Wortes erlaubt. Das Skript nennt zu diesem Thema ein Lemma, das aussagt, dass ein Wort
genau dann aus einer Grammatik ableitbar ist, wenn dazu ein Ableitungsbaum mit dem Start-
symbol der Grammatik als Wurzelknoten und dem Wort als Frontbeschriftung (Blätter von links
nach rechts „gelesen“) existiert.

2.2.2 Pumping Lemma und nicht cf-Sprachen


Wie oben schon kurz erwähnt, bietet das Pumping Lemma uns die Möglichkeit die nicht Regula-
rität und auch die nicht-Kontextfreiheit einer Sprache zu zeigen.
Definition lt Skript:
Pumping Lemma Sei G eine cf Grammatik in CNF.
Ist ein in G ableitbares Wort z hinreichend lang (|z | ≥ nG), dann hat z einen Ableitungs-
baum so großer Höhe, dass sich auf einem geeigneten Pfad ein NT Symbol wiederholen muss
(oder anders: ab einer bestimmten Länge der Wörter (nG), lassen sich alle zur Sprache
gehörenden Wörter in einer bestimmten Art zerlegen, sodass wir einen Teil der Zerlegung finden
können, der sich aufpumpen lässt wobei alle daraus resultierenden Wörter immer noch Teil der
Sprache sein müssen).
Somit erlaubt uns die Form für CF Sprachen dieses Lemmas, durch geschickte Ausnutzung
von Wiederholungen durch einen Widerspruchsbeweis zu zeigen, dass eine gegebene Sprache
nicht cf ist.
Vorgehen: Das Pumping Lemma für cf-Sprachen wenden wir an, indem wir ein „hinreichend
langes“, zur Sprache gehörendes Wort wählen und dazu eine Zerlegung der Form z = u v w x y
finden (bzw. Wortteile entsprechend „zuordnen“), die es uns erlaubt bestimmte Teile des Wortes
zu wiederholen, das Wort „aufzupumpen8 “ (z = u v i w xi y), so dass ein Wort entsteht, das ein-
deutig nicht mehr zur Sprache gehört (hier ist die „hinreichende Länge“ ausschlaggebend). Nach
der Aussage des Pumping Lemmas müsste das resultierende Wort jedoch immer noch zur
Sprache gehören und oh Wunder, da haben wir unseren heiß ersehnten Widerspruch.

2.2.3 Wortproblem für cf-Grammatiken


Frage: gehört ein zu untersuchendes Wort w zur durch die gegebene Grammatik G aufgespannte
Sprache9 ?

8. oder pömpen
9. hat irgendwie was von Vektorräumen und Basen ;)
10 Abschnitt 2

CYK Algorithmus der Cocke-Younger-Kasami Algorithmus löst das Wortproblem für cf


Sprachen, indem das zu testende Wort segmentweise (und für jedes Segment mit jeder möglichen
Zerlegung), mit wachsender Länge auf Ableitbarkeit aus den zur Grammatik gehörenden NT
Symbolen geprüft wird. Hierbei nutzt man bei jedem Schritt die Ergebnisse der vorherigen
Schritte. Wir erhalten auf diese Weise im letzten Schritt die Menge von Nichtterminalsymbolen,
aus denen das gesamte Wort ableitbar ist. Steht das Startsymbol in dieser Menge, gehört das
Wort zur Sprache, ansonsten nicht.
Vorgehen: Die Grammatik muss in CNF vorliegen. Am angenehmsten ist die manuelle
Durchführung des Alg. in Tabellenform. Hierzu wird eine n × n Matrix (mit n = |w|) aufgestellt,
wobei ausgehend vom Feld i=1, j=1 die NT Symbole, aus denen eine Zerlegung des Segments
w[i, j] ableitbar ist eingetragen werden (unter jede Spalte einen Buchstaben des Wortes
schreiben) ⇒ die Felder der Hauptdiagonale stehen also jeweils für das einzelne Zeichen, wel-
ches unter der Spalte steht (die Felder unter der Hauptdiagonalen müssen aus Symmetrie-
gründen nicht betrachtet werden). Für das Ausfüllen der weiteren Felder greift man jeweils auf
die Ergebnisse der Felder zurück, die die Bestandteile des aktuell betrachteten Segments reprä-
sentieren und sucht nach Regeln, deren rechte Seite einer passenden Kombination der NT Sym-
bole aus den Mengen der einzelnen Segmente entsprechen. Die auf der linken Seite stehenden
NT Symbole der passenden Regeln werden dann in das aktuelle Feld eingetragen. Steht das
Startsymbol der Grammatik nach dem Abarbeiten der Matrix im Feld w[n,n], so ist w in L(G)
enthalten, sonst nicht.

2.3 Push-Down-Automaten
Das Modell des Push-Down-Automaten ist in der Lage auch kontextfreie Sprachen zu verar-
beiten/akzeptieren. (Nach dem Hauptsatz über Kellerautomaten ist eine Sprache genau dann
kontextfrei, wenn sie PDA erkennbar ist (s.u.).) Zu diesem Zweck wird eine andere Form von
Speicher benötigt, die nicht so unflexibel wie die Realisierung mit Zuständen ist. An dieser
Stelle erscheint unser geliebter Stack wieder auf der Bildfläche. Formal erweitern wir unser ehe-
maliges Quintupel des endlichen Automaten um das Kelleralphabet Γ, ein Kellerstartsymbol Z0
und passen die Transitionsfunktion derart an, dass sie die Zustandsübergänge nicht mehr allein
in Abhängigkeit vom aktuellen Zustand und der Eingabe berechnet, sondern zusätzlich das
oberste Symbol auf dem Stack mit einbezieht und diesen auch manipuliert.
Akzeptieren von Eingaben - ein PDA akzeptiert ein Wort, wenn er nach dessen vollständiger
Abarbeitung in einem Finalzustand steht. (siehe bei Bedarf Def. der Konfiguration/Konfigurati-
onsfolge eines PDA im Skript (Zustand,Stackinhalt,noch zu bearbeitender Teil des
Wortes) ⊢ ... ⊢ (Endzustand,Z0,ε))
PDA Erkennbarkeit ganz simpel: eine Sprache ist PDA erkennbar, wenn ein PDA existiert,
der sie erkennt (wie sinnvoll und aussagekräftig)
Notation: die Transitionen von ∆ können folgendermaßen geschrieben werden: (q, a, Z , Y , p)
d.h. aus Zustand q mit Eingabe a und oberstem Kellersymbol Z gehe nach Zustand p und
ersetze das oberste Kellersymbol durch Y (wenn das alte Symbol stehen bleiben soll schreibt
man an Stelle von Y halt Y Z). Auch im Zustandsgraphen des PDA vermerken wir logischer-
weise a, Z und Y an den Kanten.
Determinismus Ein PDA ist deterministisch (DPDA), wenn für jedes Tupel aus Zustand und
Kellersymbol höchstens eine passende Transition existiert.

2.3.1 Grammatik → PDA


Eine CF Grammatik lässt sich relativ leicht in einen PDA überführen, dazu geht man grob fol-
gendermaßen vor (ausgehend von einer Grammatik in Greibach Normalform):
Initialisierung des Kellers mit dem Startsymbol der Grammatik, dazu Transitionen, die
jeweils für eine linke Seite einer Regel auf der Kellerspitze und Eingabe des Terminalsymbols der
rechten Seite dieser Regel die Kellerspitze durch die auf das Terminalsymbol folgenden NT Sym-
bole der Regel ersetzen. Das ganze gut durchquirlen und bei mäßiger Hitze 20 Minuten köcheln
lassen - am besten noch heiß mit etwas Basilikum servieren.
Berechenbarkeit und Komplexität 11

3 Berechenbarkeit und Komplexität

3.1 Turing Berechenbarkeit


Kommen wir nun zu unser aller Lieblingsinformatikschwuppe, dem guten Herrn Alan Mathison
Turing. Das durch ihn entwickelte Modell der Turingmaschine ist im Prinzip in der Lage, jeden
denkbaren Algorithmus auszuführen und dient als Grundlage der Betrachtung zahlreicher Pro-
bleme der theoretischen Informatik (allein der Begriff „theoretische Informatik“ verursacht schon
ausgeprägte Übelkeit ;) )

3.1.1 Turingmaschinen
Das (Automaten-)modell „Turingmaschine“ nutzt als Speicherelement im Gegensatz zum PDA
keinen Stack, sondern ein unendlich langes Band, welches nach rechts und links bewegt, abge-
lesen und beschrieben werden kann10 .
Formal besteht eine TM M = (Q, Σ, Γ, q0, qs , δ) aus einer endlichen Zusnatdsmenge Q, dem
Eingabealphabet Σ, dem Bandalphabet Γ, dem Startzustand q0, dem Stopzustand qs, sowie der
Übergangsfunktion δ. δ ordnet hier einer Kombination aus aktuellem Bandzeichen (das hier als
Eingabe dient) und aktuellem Zustand eine Bandbewegung (R,L,N), das Symbol, durch das das
aktuelle Bandzeichen ersetzt werden soll, sowie den neuen Zustand, in den übergegangen werden
soll zu.
Konfiguration analog zu PDA mit den entsprechenden sinnvollen Anpassungen (bei Amnesie
→ Skript)
Turing-Berechenbarkeit Eine Fkt. ist Turingberechenbar, wenn es eine TM gibt, die diese
Fkt. berechnen kann und genau dann terminiert, wenn der Funktionswert von der übergebenen
Eingabe definiert ist.
Turing Entscheidbarkeit Eine TM „entscheidet“ eine Sprache, wenn die angesetzt auf ein
Wort der Sprache immer mit Ausgabe 1/Ja/blubb und andernfalls mit Ausgabe 0/Nein/bla ter-
miniert. Wenn also für eine Sprache (ein Problem) eine entsprechende TM existiert, ist diese
Sprache (wir ahnen es schon) Turing-entscheidbar.
Church Turing These Wir wissen: Jede Turingberechenbare Funktion ist auch „allgemein“
berechenbar, dass die Umkehrung ebenfalls gilt behauptet die Church-Turing-These (also, dass
jede im intuitiven Sinne berechenbare Fkt. auch Turing-berechenbar ist) Argumente dafür gibt
es viele.
Wir können uns die Aussage dieser These zunutze machen, um nachzuweisen, dass eine Fkt.
nicht allgemein berechenbar ist. Dazu genügt der Nachweis der nicht vorliegenden Turing-Bere-
chenbarkeit.

3.2 Unentscheidbare Probleme


3.2.1 Allgemeines Halteproblem
Frage: stoppt eine gegebene TM angesetzt auf eine geg. Eingabe?
Mit einem schlauen Satz, den Herr Turing in einem unüberlegten Moment von sich gegeben
hat, können wir ohne schlechtes Gewissen sagen: „keine Ahnung“. Denn Herr Turing lehrt uns,
dass es keine TM gibt, die wenn sie eine andere TM und ein Eingabewort für diese in geeigneter
Codierung erhält entscheiden kann, ob diese TM mit der Eingabe stoppt. Wenn wir nun der
Church-Turing-These glauben schenken (und wer zweifelt die schon an), wissen wir: Das allge-
meine Halteproblem ist unentscheidbar. (Beweis: Skript - Im Prinzip simuliert hier die „äußere
TM“ die Ausführung der eingegebenen (quasi eine virtuelle Turingmaschine - kann qemu das
schon? ;)) d.h. wenn die innere TM nicht terminiert, terminiert die äußere ebenfalls nicht, da sie
die Simulation der inneren immer weiter fortführt).

10. Wie man das E-Feld eines solchen von einer Flächenladung bedeckten Bandes an einem bestimmten
Punkt berechnet, soll nicht Gegenstand dieser Betrachtungen sein ;) bei Interesse wende man sich vertrauensvoll
an sein ETIII Skript, oder das EECS
12 Abschnitt 3

3.2.2 Halte- und Äquivalenzproblem


So, nun wirds richtig ätzend. Wir kommen zur Reduzierbarkeit von Problemen - es geht darum
die Unentscheidbarkeit des AHP auf andere Probleme zu übertragen, um Rückschlüsse auf deren
Entscheidbarkeit ziehen zu können.
Reduzierbarkeit um ein Problem auf ein anderes „reduzieren“ zu können, muss gewissermaßen
eine Art Ordnung geschaffen werden (so ähnlich wie die angeordneten Körper in HöMa). Es soll
definiert werden, wann ein Problem „schwieriger“ ist als ein anderes.
Das Skript bietet uns hierzu folgende Weisheit an:

Seien P, Q Entscheidungsprobleme mit den Instanzmengen IP und I Q.


P: geg. x in IP , gilt x ∈ P ?
Q: geg. x in IQ, gilt x ∈ Q?
P heißt reduzierbar auf Q, (P ≤ Q) gdw. es eine berechenbare Funktion f : IP →
IQ gibt, für die gilt:
x ∈ P gdw. f (x) ∈ Q (∀x ∈ IP )
Reduktionslemma Das Reduktionslemma sagt dazu:
für P ≤ Q gilt: Wenn P unentscheidbar ist, so ist Q es ebenfalls.
Halteproblem Das HP für Turingmaschinen ist unentscheidbar (Beweis zeigt AHP ≤ HP →
Skript)
Äquivalenzproblem ist für TM ebenfalls unentscheidbar, Bew. wieder durch HP ≤ ÄQU

3.3 Komplexitätsklassen
Gesucht: Möglichkeit die Komplexität von Problemen zu klassifizieren. Normalerweise geht es
um die Untersuchung des Speicher- und des Zeitbedarfs bei der Lösung von Problemen (siehe
auch O-Notation).
Zu dem Thema gibts nen paar Seiten im Skript, die man sich mal anschauen könnte, hab
grad keine Lust das noch zu versuchen zusammenzufassen, weils einfach viel zu öde, viel zu spät
und zuviel Aufwand für ne Scheinklausur ist. Außerdem krieg ich langsam Hunger.
Wir gehen also ohne einen Gedanken an den Floyd-Warshall-Algorithmus zu verschwenden
(Algorithmen sind dazu da programmiert zu werden und nicht um Studenten zu ärgern) zum
nächsten und letzten Abschnitt über.

3.4 P, NP und NP-Vollständigkeit


P ist lt. Skript die Klasse der Probleme, die durch eine polynomial zeitbeschränkte TM ent-
schieden werden können. D.h. wir sind bei P-Problemen theoretisch in der Lage eine Funktion
anzugeben, die in Abhängigkeit von der Eingabe die maximale Zeit, die für die Berech-
nung/Lösung erforderlich ist berechnet.
Die These von Edmonds, Cobham sagt zu diesem Thema dreisterweise einfach mal, dass
eine Sprache genau dann entscheidbar sei, wenn sie in P liege (aber es ist nur eine These, für
Argumente → Skript).
NP ist die Klasse der Probleme, die durch eine nichtdeterministische TM in polynomzeit ent-
schieden werden können.
Das P-NP-Problem Die Lösung des P-NP-Problems bringt einem laut Aussage der Dozenten
quasi direkt einen Doktortitel der Informatik (aber wer will den schon), eine Professur und wer
weiß was sonst noch alles. Dummerweise hat es bisher noch niemand geschafft, dieses Grundla-
genproblem erfolgreich zu lösen. Es geht darum zu zeigen oder zu widerlegen, dass P = NP gilt.
Also, auf geht’s! Kann doch nicht so schwer sein...

3.4.1 NP-Vollständigkeit
Wikipedia beschreibt den Begriff der NP-Vollständigkeit etwas schöner bzw. greifbarer als das
Skript:
Berechenbarkeit und Komplexität 13

So werden solche Sprachen NP-vollständig genannt, die - intuitiv gesprochen -


die vollständige Schwierigkeit aller Sprachen aus der Komplexitätsklasse NP in
sich tragen.11
Wir merken uns also: NP-vollständige Probleme sind verdammt schwer. So schwer, dass sich
- wenn man dem bereits zitierten Artikel glauben schenkt - sogar Stephen A. Cook, der den
Begriff der NP-Vollständigkeit definiert hat, ziemlich einen abgebrochen haben muss, um über-
haupt erstmal ein Problem/eine Sprache zu finden, die NP-vollständig ist.

So, das war’s, Ende, aus tschüss, Alaaf, frohe Weihnachten, frohe Ostern und viele dicke
Eier.

11. http://de.wikipedia.org/wiki/NP-Vollst%C3%A4ndigkeit