AuK/P-NP-Problem SS10
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Scheme</language>
'''Autoren:'''
#Ragna-Diana Steglich ([mailto:sirasteg@stud.hs-zigr.de sirasteg@stud.hs-zigr.de])
#Elisabeth Vogel ([mailto:sielvoge@stud.hs-zigr.de sielvoge@stud.hs-zigr.de])
==Motivation==
==Komplexitätsklassen==
In den meisten Fällen ist es sehr schwierig zu entscheiden, ob ein Problem einfach oder nur sehr schwer lösbar ist. Es ist zum Beispiel ohne weiteres möglich, dass Probleme, die sich formulierungstechnisch nur sehr gering unterscheiden, vollkommen unterschiedliche Aufwände zu ihrer Lösung verlangen. Die folgende Tabelle kann dies verdeutlichen:
[[Bild:Vergleich.PNG]]
Für das P-NP-Problem ist es von Vorteil die Komplexitätsklassen <math> \mathcal{P},\mathcal{NP},</math> und <math> \mathcal{EXPTIME}</math> genauer zu untersuchen, wobei <math> \mathcal{P}</math> und <math> \mathcal{NP}</math> im Vordergrund stehen werden.
Die Probleme, die mehr oder weniger leicht und informell effizient lösbar sind, schreibt man der Komplexitätsklasse <math> \mathcal{P}</math> zu. <math> \mathcal{NP}</math> definiert die Probleme, für die eine Lösung in polynomialer Zeit einfach zu verfizieren ist. Ferner kann die Klasse <math> \mathcal{EXPTIME}</math> als eine Art "Überklasse" bezeichnet werden, denn es gilt <math>\mathcal{P} \subset \mathcal{EXPTIME}</math>. Leider ist aber noch unbekannt ob <math>\mathcal{NP} \subset \mathcal{EXPTIME}</math> oder <math>\mathcal{NP} = \mathcal{EXPTIME}</math> ist. Untereinander verhalten sich die Komplexitätsklassen <math> \mathcal{P}</math> und <math> \mathcal{NP}</math> ähnlich undurchsichtig, denn es ist noch nicht geklärt, ob <math>\mathcal{P} ={NP}</math> oder <math>\mathcal{P} \subset \mathcal{NP}</math> gilt, wobei nur die wenigsten Forscher an <math>\mathcal{P} ={NP}</math> glauben. Die folgende Grafik illustriert die mögliche Verbindung der Klassen untereinander:
===Klasse P===
;Definition
:<math> \mathcal{P}</math> ist die Klasse aller Probleme, die mit deterministischen Algorithmen in polynomialer Zeit gelöst werden können.
Der Klasse <math> \mathcal{P}</math>, manchmal findet sich auch die Bezeichnung <math> \mathcal{PTIME}</math>, werden also Probleme der Größe <math> \mathcal{n}</math> (Eingabewort) zugeordnet, für deren Lösung der Aufwand im worst-case durch ein Polynom in <math> \mathcal{n}</math> nach oben beschränkt werden kann. Das Polynom besitzt dann dann die Größe der Eingabe. Abstrakter gesagt umfasst die Klasse <math> \mathcal{P}</math> Entscheidungsprobleme die in Polynomzeit für deterministische TURING-Maschinen lösbar sind. Allgemein wird diese Komplexitätsklasse auch als Klasse der "praktisch lösbaren" Probleme betrachtet.
Algorithmen, deren Komplexität nicht durch Polynome beschränkt werden können sind ineffizient, das heißt, dass der Aufwand mit der Anzahl der Eingaben exponentiell nach oben steigt. Daraus ergibt sich die unumgängliche Tatsache, dass diese Algorithmen die Rechenkapazität jedes irdischen Computers irgendwann bei weitem sprengen würden.
Nachgewiesenermaßen existieren (berechenbare) Probleme, die nicht in der Klasse <math> \mathcal{P}</math> enthalten sind. Mit Hilfe verschiedener Diagonalisierungstechniken und Zeithierachiesätzen ist es möglich diese Probleme ausfindig zu machen. Es ist bekannt, dass diese Probleme nur mit exponentiellem oder meistens auch mehrfach exponentiellem Aufwand lösbar sind. Probleme mit dieser Eigenschaft werden mit <math> \mathcal{EXPTIME}</math> bezeichnet. Es ist vollständig bewiesen, dass folgendes gilt: <math>\mathcal{P} \subset \mathcal{EXPTIME}</math>.
===Klasse NP===
==Reduktion==
===Polynomiale Reduktion===
==NP-Vollständigkeit==
===NP-schwere Probleme===
===NP-vollständige Probleme===
==Stephen A. Cook==
===Zur Person Cook===
Einer der bedeutesten Professoren der Informatik ist Steven Arthur Cook. Er wurde am 14.Dezember 1939 in Buffalo, New York geboren und lebt heute in Kanada, wo er an der University of Toronto unterrichtet. Die größte Aufmerksamkeit widmete er der Komplexitätstheorie, in der er 1971 mit dem "Satz von Cook" berühmt wurde und 1982 den Turing Award erhielt, welcher an Personen verliehen wird, die besonders zur Entwicklung der Informatik beigetragen haben.
===Satz von COOK===
Für das Arbeiten mit dem "Satz von Cook" ist es wichtig zu wissen, was eigentlich das SAT-Problem ist. Das satisfiability problem zu Deutsch das Erfüllbarkeitsproblem der Aussagenlogik prüft, ob eine aussagenlogische Formel erfüllbar ist. Es ist also gefragt, wie die booleschen Belegungen der Variablen <math>x_i</math> aussehen müssen, damit ein gegebener Ausdruck wahr wird. Damit dieses Problem deterministisch gelöst werden kann, muss eine Tabelle mit allen möglichen Belegungen der Variablen erstellt werden. Bei k Variablen gibt es dabei <math>2^k</math> mögliche Belegungen.
Als Spezialfall des SAT ist noch 3-SAT zu nennen. Hierbei besitzt der gegebene Ausdruck maximal drei Variablen pro Oder-Term. Ein Beispiel hierfür ist:
:[[Bild:Formel.png]]
Da es eine deterministische Lösung gibt, könnte man annehmen, dass dieses Problem in <math> \mathcal{P}</math> liegt, was aber nicht sicher ist. Sicher ist nur, dass es in <math> \mathcal{NP}</math> liegt. Weiterhin konnte festgestellt werden, dass dieses Problem <math> \mathcal{NP}</math>-vollständig ist.
Um Probleme als <math> \mathcal{NP}</math>-vollständig zu identifizieren, müssen sie auf ein ähnliches Problem polynomial reduziert werden. Das setzt aber voraus, dass es wenigstens ein Problem gibt, dessen <math> \mathcal{NP}</math>-Vollständigkeit nicht durch Reduktion nachgewiesen wurde, da es sich ja auf kein anderes <math> \mathcal{NP}</math>-vollständiges Problem nachweisen ließ. Dieses Problem existiert auch. Es wurde von Steven A. Cook durch den "Satz von Cook" nachgewiesen, dass das Erfüllbarkeitsproblem der Aussagenlogik (kurz: SAT) <math> \mathcal{NP}</math>-vollständig ist. Bewiesen wurde es mittels einer Turingmaschine, wobei jedes Merkmal der Maschine als aussagenlogische Formel interpretiert wird.
Das SAT-Problem ist somit das erste Problem, für das die <math> \mathcal{NP}</math>-Vollständigkeit ohne polynomiale Reduktion nachgewiesen werden konnte. Jedes Problem lässt sich auf das Wahrheits-Belegungs-Problem von Cook umschreiben. Sollte eines dieser Probleme vom Typ <math> \mathcal{P}</math> sein, wären alle <math> \mathcal{NP}</math>-Probleme letztendlich einfach, also in <math> \mathcal{P}</math>.
===CLIQUEN-Problem===
==NP-Vollständigkeitsbeweis==
==Praktische Unlösbarkeit==
Nun gibt es ja auch viele Probleme, die mit dem heutigen Stand der Technik nicht gelöst werden können, oder deren Berechnung aufwandsmäßig einfach unmöglich ist. Aber gerade wegen dieser Eigenschaft der Unlösbarkeit sind sie für einen bestimmten Bereich der Informatik interessant: Die Kryptographie. Hier werden Ver- und Entschlüsselungsverfahren gesucht, die nicht so leicht, oder am besten gar nicht zu knacken sind. Die Schwierigkeit dabei liegt im Schlüssel: Jedes Verschlüsselungsverfahren benötigt irgendeine Art an Schlüssel, sei es die Anzahl der Verschiebungen der Buchstaben des Alphabets oder das Codewort zum Entschlüsseln scheinbar sinnloser Zeichen. Problem ist jetzt, den Schlüssel sicher an den Empfänger zu übertragen, ohne das Dritte ihn ebenfalls einsehen können. Um den entgegenwirken zu können, werden öffentliche Schlüssel verwendet, wie beim RSA-Verfahren, wobei RSA von den Anfangsbuchstaben der Entwickler Rivest, Shamir und Adleman abgeleitet sind. Der öffentliche Schlüssel ist jedem verfügbar, der eine Nachricht an einen Empfänger übertragen möchte.
Im Falle des RSA-Verfahrens besteht dieser Schlüssel aus zwei Teilen <math>e</math> und <math>q</math>. Der Empfänger kann die Nachricht mit Hilfe seines persönlichen Schlüssels <math>D</math> entschlüsseln. Dieser Schlüssel <math>D</math> besteht aus dem Teil <math>d</math>, der geheim gehalten werden sollte. Bei dieser Entschlüsselung wird auch der Teil <math>q</math> aus dem öffentlichen Schlüssel verwendet. Um die Nachricht entschlüsseln zu können, ohne im Besitz eines privaten Schlüssels zu sein, müssen die beiden Schlüsselteile <math>e</math> und <math>q</math> bekannt sein, da sich aus ihnen <math>d</math> ermitteln lässt. Um wiederum <math>q</math> kennen zu können, müssen die beiden Primzahlen <math>p1</math> und <math>p2</math> berechnet werden, da sich aus der Multiplikation der beiden <math>q</math> ergibt <math>(p1 * p2 = q)</math>. Allerdings sind es sehr große Primzahlen, die nur mit exponentiellem Aufwand bestimmbar sind. Selbst beim Raten bräuchte ein Codeknacker so viel Glück wie jemand, der 30mal hintereinander sechs Richtige im Lotto hat. Als Ansatz bleibt also nur die Faktorisierung von <math>q</math>. Es ist also auch nicht überraschend, dass bisher noch kein effizienter Algorithmus zum Knacken des RSA-Verfahrens entdeckt worden ist.
==Frank P. Ramsey==
===Zur Person Ramsey===
===RAMSEY-Problem===
==Pseudopolynomiale Algorithmen==
==Übungsaufgaben==
==Quellen==
===Literatur===
; [1] Christian Wagenknecht
: Algorithmen und Komplexität.- Fachbuchverlag Leipzig, 2003.- ISBN 3-446-22314-2
; [2] Robert Sedgewick
: Algorithmen, 3. unveränderte Auflage - Addison-Wesley, 1994 - ISBN 3-89319-402-9
===Weblinks===
; [1] http://de.wikipedia.org/wiki/P-NP-Problem
; [2] http://de.wikipedia.org/wiki/Komplexit%C3%A4tsklasse
; [3] http://de.wikipedia.org/wiki/Komplexit%C3%A4tstheorie
; [4] http://de.wikipedia.org/wiki/Liste_von_Komplexit%C3%A4tsklassen
; [5] http://de.wikipedia.org/wiki/Stephen_A._Cook
; [6] http://de.wikipedia.org/wiki/Frank_Plumpton_Ramsey
; [7] http://de.wikipedia.org/wiki/Millennium-Probleme
; [8] http://www.uni-protokolle.de/Lexikon/P/NP-Problem.html
; [9] http://www.informatik.uni-bremen.de/theorie/teach/lehre/thi2/2007/Folien/0406.pdf
==Siehe auch==
; [1] Hompage von Stephen A. Cook
: http://www.cs.toronto.edu/~sacook/
; [2] Clay Mathematics Institute
: http://www.claymath.org/millennium/
; [3] MacTutor History of Mathematics archive
: http://www-history.mcs.st-andrews.ac.uk/Biographies/Ramsey.html