|
|
Lexikon auf Ihrer Homepage |
|
Lexikon als Lesezeichen hinzufügen |
Dieser Artikel wurde aufgrund von inhaltlichen Mängeln auf der Qualitätssicherungsseite der Redaktion Informatik eingetragen. Dies geschieht, um die Qualität der Artikel aus dem Themengebiet Informatik auf ein akzeptables Niveau zu bringen. Hilf mit, die inhaltlichen Mängel dieses Artikels zu beseitigen, und beteilige dich an der Diskussion! (+)
Die Reduktion ist eine Methode der Theoretischen Informatik. Eine Reduktion ist die Lösung eines Problems mit Hilfe eines hypothetischen Algorithmus für ein anderes Problem. Die Reduzierbarkeit ist somit eine Relation zwischen zwei Problemen. Durch sie können die Berechenbarkeit oder die Komplexität von Problemen zueinander in Bezug gesetzt werden.
Man unterscheidet verschiedene Typen von Reduktionen. Bei einer nicht weiter spezifizierten Reduktion ist meist die many-one-Reduktion gemeint; weitere wichtige Varianten sind one-one-Reduktion und tt-Reduktion (von engl. truth table, Wahrheitstabelle). Alle sind Sonderfälle der Turingreduktion.
In der Berechenbarkeitstheorie genügt in der Regel der Nachweis der Anwendbarkeit beziehungsweise Nichtanwendbarkeit einer Reduktion. Dagegen werden in der Komplexitätstheorie zusätzliche Anforderungen an Reduktionen gestellt, wie etwa die logarithmisch platzbeschränkte Reduktion. Hierbei wird gefordert, dass die Reduktion innerhalb einer bestimmten Komplexitätsschranke durchgeführt werden kann. Eine andere Form solcher beschränkten Reduktionen sind die FO-Reduktionen der deskriptiven Komplexitätstheorie.
Ein erweitertes Reduktionskonzept ist für Approximationsalgorithmen notwendig, die PTAS-Reduktion.
Inhaltsverzeichnis |
Die allgemeinste Form der Reduktion ist die Turingreduktion. Hier darf der vorausgesetzte Algorithmus beliebig oft aufgerufen werden um das betrachtete Problem zu lösen. Jeder Aufruf wird dabei als einzelner Rechenschritt gewertet. Zur formalen Definition dieser Reduktion wird die Orakel-Turingmaschine verwendet.
Die Turingreduktion ist eine sehr mächtige Form der Reduktion. Dies macht es einerseits einfach, Reduktionen zu entwerfen, bringt aber andererseits auch Probleme mit sich. Insbesondere ist es durch Turingreduktion nicht möglich, zwischen einem Problem und seinem Komplement zu unterscheiden. Aus diesem Grund ist zum Beispiel nicht bekannt, ob die Komplexitätsklasse NP unter Polynomialzeit-Turingreduktion abgeschlossen ist.
Es werden daher eingeschränkte Reduktionsvarianten verwendet. Bei many-one-Reduktionen darf der Algorithmus für das Problem, auf das reduziert wird, nur ein einziges Mal aufgerufen werden. Das Ergebnis muss anschließend ohne weitere Bearbeitung ausgegeben werden. Durch diese zweite Bedingung kann zwischen einem Entscheidungsproblem und seinem Komplement unterschieden werden. Die many-one-Reduktion entspricht einer Umformung von einem Problem in ein anderes Problem.
Formal werden für die Relation „A ist reduzierbar auf B“ die Schreibweisen <math>A\preceq B</math> oder <math>A\leq B</math> verwendet. Oft werden dabei tiefgestellt der Typ der Reduktion und hochgestellt eine Komplexitätsschranke angegeben, beispielsweise <math>A\preceq_m^p B</math> für „A ist polynomiell many-one-reduzierbar auf B“.
Ein Problem A ist turingreduzierbar auf ein Problem B, <math>A\preceq_T B</math>, wenn es eine Orakel-Turingmaschine mit Orakel B gibt, welche A berechnet.
Formale Definition:[1] Seien R, R' Relationen über <math>\Sigma^*</math>. Eine Turing-Reduktion <math>\alpha_T</math> von R auf R' (<math>R \alpha_T R'</math>), ist eine Orakel-Turing-Maschine <math>\mathcal{M}</math>, deren Orakel die Relation R' realisiert und die selber in polynomialer Zeit die Funktion f berechnet, die R realisiert.
Eine Formale Sprache <math>L'</math> ist auf eine Sprache <math>L</math> many-one-reduzierbar, <math>L'\preceq_m L</math>, wenn eine totale, berechenbare Funktion <math>f: \Sigma^* \longrightarrow \Sigma^*</math> auf der Menge aller Eingabewörter Σ* existiert, so dass gilt: <math>w \in L' </math> genau dann, wenn <math>f(w) \in L</math>.
Wenn <math>L'\preceq_m L</math> gilt und es außerdem eine injektive Reduktionsfunktion f gibt, heißt <math>L'</math> one-one-reduzierbar auf L, <math>L'\preceq_{1}L</math>.
Die Sprache aller Quadratzahlen
lässt sich auf die Sprache aller Multiplikationen mit 2 Faktoren
reduzieren, da über die Abbildung <math>f\colon \Z^2 \to \Z^3, \, (a,b) \mapsto (a,a,b)</math> jedes Wort aus <math>L_Q</math> in ein Wort aus <math>L_M</math> abgebildet werden kann und jedes Bild dieser Funktion <math>f\;</math> wiederum ein Urbild in <math>L_Q</math> besitzt.
Mit dieser Reduktion ist gezeigt, dass ein Algorithmus, welcher zwei natürliche Zahlen miteinander multipliziert, auch eine natürliche Zahl quadrieren kann, das Quadrieren kann also auf das Multiplizieren reduziert werden.
Das Halteproblem ist nicht auf sein Komplement many-one-reduzierbar, denn es ist nur rekursiv aufzählbar, aber nicht entscheidbar.
In der Komplexitätstheorie möchte man nicht nur qualitativ wissen, ob eine Reduktion existiert, sondern auch quantitativ den Aufwand zueinander in Bezug setzen. So will man ausdrücken: „Eine Sprache ist auf eine andere komplexitätstheoretisch reduzierbar genau dann, wenn die eine nicht schwerer ist als die andere.“ Hierfür müssen an die Reduktionsfunktion <math>f</math> zusätzliche Anforderungen gestellt werden:
Solcherart beschränkte Reduktionen sind die Basis der Vollständigkeit, einem wichtigen Werkzeug der Komplexitätstheorie. Ein Problem ist vollständig für eine Komplexitätsklasse, wenn es selbst dieser Klasse angehört und jedes andere Problem der Klasse darauf reduziert werden kann.
Diese Eigenschaft kann auch zur Definition einer Komplexitätsklasse herangezogen werden, indem zunächst ein vollständiges Problem der Klasse festgelegt wird. Beispielsweise kann die Klasse NP als Reduktionsklasse verstanden werden, nämlich als die Klasse aller Probleme, die logarithmisch platzbeschränkt (oder auch polynomiell zeitbeschränkt) auf das Erfüllbarkeitsproblem der Aussagenlogik many-one-reduzierbar sind.