SEMINARARBEIT Randomisierung: Komplexitätstheorie und Praxis (Studiengang Informatik) von Eugen Schilke Januar 2004 Inhaltsverzeichnis 1 Probabilistische Algorithmen 2 2 Zufallsquellen 4 3 Anwendungsbeispiele 5 4 Randomisierte Komplexitätsklassen 7 5 Schaltkreise und ihre Größe 10 6 De-Randomisierung 12 Literaturverzeichnis 13 1 1 Probabilistische Algorithmen Der Zufall spielt eine wichtige Rolle in fast allen Bereichen der Informatik. Wichtige Gebiete, wie z.B. die algorithmische Zahlentheorie und die Kryptographie sind in ihrer heutigen Form ohne probabilistische Algorithmen gar nicht denkbar. Probabilistische Algorithmen benutzen im Laufe der Berechnung Zufallszahlen. Das Resultat der Berechnung eines solchen Algorithmus ist daher nicht eine feste Antwort, sondern eine Zufallsvariable: die Antwort ist abhängig von den während der Berechnung zufällig getroffenen Entscheidungen. Dabei ist zu beachten, dass dies nichts mit Annahme über die Verteilung der möglichen Eingaben zu tun hat. Die Zufälligkeit betrifft nicht die Eingabe, sondern nur die Auswahl der Entscheidungen während der Berechnung. Randomisierte bzw. probabilistische Algorithmen sind oft schneller und einfacher als der deterministischer Algorithmus für das gleiche Problem. Dafür muss man in Kauf nehmen, dass das probabilistische Verfahren nicht mit hundertprozentiger Wahrscheinlichkeit das richtige Ergebnis liefert. Probabilistische Algorithmen werden oft in zwei Gruppen unterteilt [Sch97]: Las Vegas Algorithmen und Monte Carlo Algorithmen. Las Vegas Algorithmen Diese Algorithmen produzieren keine falschen Ausgaben. Höchstens die Ausgabe Mis” serfolg“ ist zugelassen. Beispiel: n-Damen-Problem gegeben: n x n-Brett, n Damen (Schachspiel) gesucht: Aufstellung der n Damen, sodass sie sich nicht gegenseitig bedrohen. Lösung existiert für alle n ≥ 4. Bekannte deterministische Verfahren (Backtracking) haben exponentielle Laufzeit. 1.for i = 1 to n: Wenn in Reihe i alle Felder bedroht sind, Abbruch. Anderenfalls wähle zufällig eines der nicht bedrohten Felder. 2. Wiederhole (1), bis eine Lösung gefunden ist. Algorithmus terminiert nicht immer. Wenn aber eine Lösung gefunden wird, ist diese mit Wahrscheinlichkeit 1 richtig. Monte Carlo Algorithmen Bei diesen Algorithmen können falsche Ausgaben vorkommen. Bei Entscheidungsproblemen unterscheidet man zwischen: • beidseitigem Fehler: Jede Antwort kann falsch sein. • einseitigem Fehler: Ausgabe 1 immer korrekt, Ausgabe 0 nicht immer (oder umgekehrt) 2 Die Wahrscheinlichkeit von falschen Aussagen kann aber mit verschiedenen Techniken reduziert werden. Beispiel: Symbolische Determinante Gegeben ist ein bipartiter Graph G = (U, V, E) mit U = u1 , ..., un , V = v1 , ..., vn und E ⊆ U ×V . Existiert ein perfektes Matching, d.h. existiert ein M ⊆ E, |M | = n, so dass für alle (u, v) und (u0 , v 0 ) ∈ M gilt: (u, v) 6= (u0 , v 0 ) ⇒ u 6= u0 und v 6= v 0 ? Wir können dieses Problem in der Sprache der Matrizen und Determinanten wie folgt beschreiben. Für ein bipartiter Graph G = (U, V, E) betrachten wir eine n × n Matrix AG = (aij ) wobei i, j-te Element ist eine Variable xij , wenn (ui , vj ) ∈ E, und 0 sonst. Von dieser Matrix AG betrachten wir jetzt die Determinante det AG = X σ(π) π n Y ai,π(i) i=1 Hier ist π eine Permutation von {1, ..., n} und σ(π) = 1, wenn π das Produkt einer geraden Anzahl von Transpositionen ist, und σ(π) = −1 sonst. Q Eine Permutation π defniert ein perfektes Matching genau dann, wenn ai,π(i) 6= 0. Da alle diese Produkte paarweise verschieden sind folgt: G erlaubt ein perfektes Matching ⇔ det AG 6≡ 0. Wenn wir also symbolische Determinanten ( Determinanten von Matrizen die Variablen enthalten können ) effizient berechnen könnten, dann könnten wir damit auch das Heiratsproblem lösen. Aus der linearen Algebra ist bekannt, wie man Determinanten von numerischen Matrizen berechnen kann: Man transformiere die gegebene Matrix in eine Dreiecksmatrix mit derselben Determinante und berechne das Produkt der Diagonalelemente. Dies erfordert O(n3 ) arithmetische Operationen. Außerdem bleiben die Einträge der transformierten Matrizen polynomial beschränkt, da es sich um Subdeterminanten der gegebenen Matrix handelt. Leider ist die Anwendung dieses Verfahrens auf symbolische Matrizen problematisch. Die Einträge der transformierten Matrizen sind rationale Funktionen in den Einträgen der ursprünglichen Matrix, und diese Funktionen haben im Allgemeinen exponentiell viele Terme. Gauß-Elimination scheint also nicht hilfreich zur Berechnung symbolischer Determinanten zu sein. Aber wir brauchen ja gar nicht unbedingt die Determinante von AG zu berechnen. Es reicht uns zu wissen, ob sie identisch 0 ist oder nicht. Die Idee des probabilistischen Algoritihmus für das Perfect Matching Problem besteht einfach darin, ein Tupel (i1 , ..., im ) zufällig gewählter Zahlen in die Matrix AG einzusetzen und dann mittels Gauß-Elimination die Determinante der numerischen Matrix AG (i1 , ..., im ) auszurechnen. Wenn sich herausstellt, dass det AG (i1 , ..., im ) 6≡ 0, dann ist offensichtlich die symbolische Determinante det AG nicht identisch 0. Die Umkehrung gilt jedoch natürlich nicht: Es kann passieren, dass det AG , dass wir aber zufällig eine Nullstelle von det AG erwischt haben. Das folgende Lemma1 erlaubt uns aber, durch geeignete Wahl des Bereichs aus dem wir (i1 , ..., im ) auswählen, die Wahrscheinlichkeit, dass wir Nullstellen eines nicht identisch verschwindenden Polynoms det AG erwischen, zu kontrollieren. Lemma 1.1. Sei M ∈ Z mit M > 0 und p(x1 , ..., xm ) ein Polynom mit p 6≡ 0. Jedes xi habe höchstens den Grad d. Dann gilt: 1 hier ohne Beweis, s. [Pap94] Kap. 11 3 Die Zahl der Tupel (a1 , ..., am ) ∈ {0, 1, ..., M − 1}m mit p(a1 , ..., am ) = 0 ist höchstens m · d · M m−1 . Damit können wir nun einen probabilistischen Algorithmus für das Perfect Matching Problem angeben. Sei G = (V, E) und AG (x1 , ..., xm ) die zugehörige symbolische Matrix. Ferner sei deg(det AG ) ≤ 1, da jede Variable höchstens vom Grad 1 ist. Wir setzen M = 2m. 1. Wähle zufällig m Zahlen (i1 , ..., im ) zwischen 0 und M − 1. 2. Berechne die Determinante det AG (i1 , ..., im ) mit dem Gauß-Eliminationverfahren. 3. Wenn det AG (i1 , ..., im ) 6= 0 gilt, dann ist die Ausgabe: G hat ein Perfect Matching. Wenn det AG (i1 , ..., im ) = 0 gilt, dann ist die Ausgabe: G hat kein Perfect Matching. Der Algorithmus ist vom Typ Monte Carlo mit einseitigem Fehler, da die Antwort G ” hat ein Perfect Matching“ immer korrekt ist. Die Antwort G hat kein Perfect Mat” m−1 1 = m·d ching“ gilt mit einer Wahrscheinlichkeit ≥ 21 , da m·d·M Mm M = 2 . Durch Vergrößerung von M gegenüber m kann die Fehlerwahrscheinlichkeit gedrückt werden. Auch die Zahl der unabhängigen Experimente verkleinert die Fehlerwahrscheinlichkeit. Bei k unabhängigen Experimenten ergibt sich eine Fehlerwahrscheinlichkeit von höchstens 2−k . 2 Zufallsquellen Für die Realisierung von guten probabilistischen Algorithmen brauchen wir eine perfekte Zufallsquelle, die unendliche Bitfolgen (x1 , x2 , ...) produziert, die den Anforderungen der Unabhängigkeit und der Fairness genügen sollen. Die Anforderung der Unabhängigkeit bedeutet, dass die Wahrscheinlichkeit, dass xi = 1 ist darf nicht von Ergebnissen in der Vergangenheit oder in der Zukunft abhängen. Die Anforderung der Fairness bedeutet, dass die Wahrscheinlichkeit muss exakt bei 21 liegen. Die Fairness-Anforderung ist kein echtes Problem. Mit folgenden von von Neumann stammenden Verfahren, lässt sich jede nicht faire Quelle von unabhängigen Zufallbits y1 y2 ... in eine perfekte Zufallsquelle umwandeln: 1. Zerlege die Folge y1 y2 ... in Paare 2. Interpretiere 01 als 0 und 10 als 1 3. Ignoriere 00 und 11 Um mit dem obigen Verfahren eine perfekte Zufallsfolge der Länge n zu erhalten, 2 brauchen wir eine Folge der gegebenen Quelle mit erwarteter Länge 1−c , wobei 2 2 c = p + (1 − p) die so genannte Koinzidenz-Wahrscheinlichkeit darstellt. Das echte Problem stellt die Unabhängigkeits-Anforderung dar. Durch physikalische Prozesse scheint Unabhängigkeit sehr schwierig zu realisieren. Es gibt hier verschiedene Ansätze: • Durch mathematische Konstruktion lassen sich Pseudo-Zufallsreihen erzeugen. Allerdings beruht die Unabhängigkeit dieser Reihen gemeinhin auf unbewiesenen komplexitätstheoretischen Vermutungen. 4 In vielen Computersystemen werden Pseudo-Zufallszahlen mit Kongruenzen erzeugt: 1. Fixiere a, b, c. 2. Gegeben sei ein Startwert x0 ∈ N 3. Für i > 0: xi = axi−1 + b(mod c). Es ist inzwischen bekannt, dass solche Pseudo-Zufallszahlen relativ wertlos sind. Es ist leicht aus einer Folge x0 ...xi den nächsten Wert xi+1 (und sogar die ge” heimen“ Parameter a, b, c) auszurechnen. • Schwache Zufallsquellen: Sei 0 < δ < 12 und p : {0, 1}∗ −→ [δ, 1 − δ] eine beliebige (unbekannte) Funktion. Die δ-Zufallsquelle Sp erzeugt Bitfolgen y1 y2 ...yn ..., so dass für alle n ∈ N und u = u1 ...un ∈ {0, 1}∗ gilt: n Y Pr[y1 ...yn = u] = (ui p(u1 ...ui−1 ) + (1 − ui )(1 − p(u1 ...ui−1 ))). i=1 Die Wahrscheinlichkeit Pr[yi = 1] = p(y1 ...yi − 1) ∈ [δ, 1−δ] hängt also in beliebig komplizierter Weise von vorher erzeugten Bits ab, aber diese Abhängigkeit von der Vergangenheit bestimmt ein Bit höchstens mit Wahrscheinlichkeit 1 − δ < 1. Eine perfekte Zufallsquelle wäre eine 21 -Zufallsquelle. Für δ < 21 nennen wir die δ-Zufallsquellen schwach. Echte“ Zufälligkeit ist bisher noch nicht erreicht worden, sodass hier also durchaus eine ” Fehlerquelle bei der Implementierung probabilistischer Algorithmen entstehen kann. Es ist zweifelhaft, ob perfekte Zufallsquellen, die o.g. Anforderungen genügen, physikalisch realisierbar sind. Nach dem derzeitigen Stand vermutet man, dass eine Erzeugung von Zufallszahlen auf physikalischem Wege sehr langsam sein würde im Vergleich zu der Geschwindigkeit beim Ausführen arithmetischer Operationen. 3 Anwendungsbeispiele Alle Programmierumgebungen und Programmbibliotheken bieten Routinen an, um Zufallszahlen zu erzeugen. Im letzten Kapitel habe ich zwei Methoden vorgestellt, mit deren Hilfe solche Zufallszahlen erzeugt werden können. Hinter diesen Programmen verbergen sich nicht physikalische Prozesse wie elektronisches Rauschen oder radioaktiver Zerfall, sondern deterministische Algorithmen, die so genannten Zufallszahlengeneratoren. Zur Betonung ihrer deterministischen Natur werden sie auch PseudoZufallszahlgeneratoren genannt. Für die verschiedensten Programmieranwendungen, beispielsweise Verschlüsselungen oder Glücksspiele, benötigt man echte Zufallszahlen. Bei echten Zufallszahlengeneratoren handelt es sich um mechanische oder elektrische Geräte, die Zufallszahlen aus der ihnen zugrunde liegenden Verteilung liefern. Der Vorteil von echten Zufallszahlengeneratoren ist, daß eine Prognose, wie ein Zufallsexperiment ausgehen wird, nicht möglich ist. Soll allerdings ein Zufallsexperiment mit genau den gleichen Zufallszahlen ein zweites Mal durchgeführt werden so ist dies nicht möglich. Ein Grund für ein solches Vorgehen ist z.B. die Veränderung von Parametern der zugrunde liegenden Verteilung, um Veränderungen im Simulationsablauf 5 vorher und nachher festzustellen. Ein weiterer Nachteil, der bei echten Zufallszahlengeneratoren auftreten kann, ist der, daß sich die zugrunde gelegte Verteilung aufgrund von Verschleiß der mechanischen Generatoren schleichend verändert. Echte Zufallszahlengeneratoren müssen daher immer daraufhin überprüft werden, ob die Zufallszahlen, die sie liefern, immer noch der Verteilung entsprechen, die zugrunde gelegt ist. In diesem Kapitel möchte ich einige Methoden zur Erzeugung von echten Zufallszahlen vorstellen und auf technische Details von diesen Methoden eingehen. Hotbits Im Internet stellen mehrere Dienste kostenlos echte Zufallszahlen bereit. Hotbits [Bit03] misst die Zeiten zwischen radioaktiven Zerfallsprozessen, die von einer an einen Computer gekoppelten Geiger-Müller Röhre wahrgenommenen werden. Die Zufallszahlenfolge wird mit Hilfe eines Formulars bestellt. Wenn die an den Empfänger abgeliefert wurde, wird sie auf dem Server gelöscht. Damit wird gewährleistet, dass keiner anderer die gleiche Zufallszahlenfolge bekommt. Leider wird die generierte Menge von Zufallsbits durch die Hardware auf bescheidene Tempo von etwa 30 Byte pro Sekunde reduziert. Deshalb werden die generierte Zahlen vor der Auslieferung zwischengespeichert. Eine Alternative dazu wird vom RandomX Paket für Java geliefert. Ein mit RandomX entwickeltes Programm kann aus einer Vielfalt von Pseudozufallszahlgeneratoren oder echten zufälligen Zahlen von HotBits wählen, die in diesem Fall über das Internet angefordert werden. Intel Die Sicherheitsexperten bei Intel [Cor03] haben einen auf thermischem Rauschen basierenden Zufallszahlengenerator entwickelt, der echte Zufallszahlen erzeugt. Thermisches Rauschen ist eines der wenigen Quellen natürlicher Ereignisse, die wirklich zufällig und unberechenbar sind (weitere sind z. B. radioaktiver Zerfall, Fluoreszenz oder Elektronenspin). Es entsteht durch die Erwärmung eines Widerstands auf dem Chip während des Betriebes. Die Temperatur, die der Widerstand abstrahlt, variiert im Lauf der Zeit, da sie durch Variationen im Luftstrom beeinflußt wird. Auf Hardware basierende Zufallszahlengeneratoren gibt es bereits, aber sie sind sperrig und teuer. Durch Intels Bemühungen ist zum ersten Mal ein auf Hardware basierende Zufallszahlengenerator entwickelt worden, der in Großserie auf einem Standard-Bauteil produziert wird. Intel plant, den Zufallszahlengenerator auf seinem 810-Chipsatz auszuliefern, der in den ganz normalen Desktops verwendet werden soll. FH Ravensburg-Weingarten (Projektarbeit: Erzeugen echter Zufallszahlen“) ” Ziel der Projektarbeit [RW03] ist die Bereitstellung echter Zufallszahlen über das Internet. Grundlage ist ein Forschungsprojekt von Prof. Dr. Wolfgang Ertel (FH RavensburgWeingarten) zusammen mit der Firma MAXTOR (San Jose, CA, USA). Die Erzeugung echter Zufallszahlen basiert auf einem Prozess zur Positionierung der Lese-/Schreibköpfe von Festplatten aufgrund nicht-deterministischer Einflüsse. Diese 6 Einflüsse können unter anderem Servovibrationen während des Schreibvorgangs und die aktuelle Distanz des Lese-/Schreibkopfes zum Zylinder sein. Gegenüber anderen Zufallsquellen wie z.B. der Auswertung des thermischen Rauschen eines Widerstands ist diese Methode um ein vielfaches schneller. Um den von der Festplatte erzeugten Bitstream zur Korrektur der Kopfposition auslesen zu können, kommt das Tool MAXATA von Maxtor zum Einsatz. Diese DOSAnwendung ermöglicht es, direkt auf die IDE-Controller des Systems zuzugreifen, um so makrobasiert Kommandos an das Laufwerk zu schicken. Am Ende des Kapitels möchte ich noch der Ausschnitt der geeigneten Quellen zur Erzeugung von echten Zufallszahlen geben: das Rauschen ( jitter“) auf einem geeigne” ten Oszillator, die Turbulenzen der Luftströmung um eine rotierende Festplatte, das Auslesen von /dev/audio..., wenn kein Mikrophon angeschlossen ist, das Rauschen von Videokamera mit abgedeckter Linse, Radioaktiver Zerfall. 4 Randomisierte Komplexitätsklassen Um Monte Carlo Algorithmen zu studieren, müssen wir keine neue Turingmaschine entwerfen, die eine Münze werfen kann. Stattdessen können wir eine normale nichtdeterministische Turingmaschine benutzen. Nur die Interpretation von Akzeptieren der Eingabe wird geändert. Nach Papadimitriou [Pap94] ist solche Maschine folgendermassen definiert: Definition 4.1. Sei N eine polynomial-zeitbeschränkte NTM mit folgenden Eigenschaften: • N ist präzise, das heißt bei jeder Eingabe hält die Maschine nach der gleichen Zahl von Schritten. • In jedem Schritt hat N genau zwei nichtdeterministische Wahlmöglichkeiten. So definierte Turingmaschine N nennen wir auch standardisierte NTM“ . ” Definition 4.2. Sei L eine Sprache. L ∈ RP (für randomized polynomial time) wenn eine standardisierte p(n)-zeitbeschränkte NTM N existiert, mit • N , gestartet mit x, hält für wenigstens die Hälfte der 2p(|x|) Berechnungen in akzeptierenden Zustand, wenn x ∈ L. • N , gestartet mit x, verwirft alle Eingaben, wenn x 6∈ L. Nach dieser Definition enthält die Komplexitätsklasse RP die Probleme, für die ein polynomial-zeitbeschränkter Monte Carlo Algorithmus existiert. Wenn wir nichtdeterministische Wahlen als Münzwürfe interpretieren, wird jedes Blatt des Berechnungs1 baumes mit Wahrscheinlichkeit 2p(|x|) erreicht. Satz 4.1. Es gilt : P ⊆ RP ⊆ NP 7 Beweis: P ⊆ RP gilt, weil jede deterministische Berechnung kann als Monte Carlo Algorithmus angesehen werden, wenn der Ausgang des Münzenwurfs ignoriert wird. Nach Definition ist jede Monte Carlo Algorithmus nichtdeterministisch, deshalb gilt RP ⊆ NP. Das Komplement von RP kann wie folgt definiert werden: Definition 4.3. Sei L eine Sprache. L ∈ coRP wenn eine standardisierte p(n)zeitbeschränkte NTM N existiert, mit • N , gestartet mit x, hält für weniger als die Hälfte der 2p(|x|) Berechnungen in akzeptierenden Zustand, wenn x 6∈ L. • N , gestartet mit x, akzeptiert alle Eingaben, wenn x ∈ L. Jetzt können wir uns die Frage stellen, ob RP bezüglich der Komplementbildung abgeschlossen ist? Wir definieren die Klasse ZPP (für polynomial randomized algorithms with zero probability of error ) wie folgt: Definition 4.4. ZPP := RP ∩ coRP Falls eine Sprache L in ZPP liegt, gibt es sowohl einen RP-Algorithmus für L als auch ein RP-Algorithmus für das Komplement von L. Das heißt, dass es eine probabilistische Maschine gibt, die entweder die richtige Antwort auf die Frage x ∈ L“ liefert, oder ” aber mit weiß nicht“ antwortet. Allerdings kann man die Wahrscheinlichkeit, dass ” weiß nicht“ geantwortet wird, beliebig klein machen. ” Ist also L in ZPP, so gibt es einen probabilistischen Polynomialzeitalgorithmus, der sich nie irrt und nur mit sehr geringer Wahrscheinlichkeit aufgibt. Wenn er aufgibt, so kann man den Algorithmus erneut laufen lassen. Nach Definition aus dem Kapitel 1 ist das ein Algorithmus vom Las-Vegas Typ. Definition 4.5. Sei L eine Sprache. L ∈ PP (für probabilistic polynomial time) wenn es eine standardisierte NTM N existiert und es gilt: gestartet mit x, hält N für mehr als die Hälfte der Berechnungen in akzeptierenden Zustand, wenn x ∈ L. Satz 4.2. Es gilt : NP ⊆ PP Beweis: Sei L ∈ NP berechnet durch eine polynomial-zeitbeschränkte NTM N . Wir konstruieren eine PP-Maschine N 0 für L: N 0 ist identisch mit N , mit dem einzigen Unterschied, dass N 0 einen neuen initialen Zustand hat, aus dem nichtdeterministisch in den initialen Zustand von N oder direkt in akzeptierenden Endzustand übergegangen werden kann. Sei jetzt x die Eingabe von N 0 . N macht p(|x|) viele Schritte und hat 2p(|x|) viele Berechnungen. Wenigstens die Hälfte der Berechnungen von N 0 ist akzeptierend. Das heißt mehr als die Hälfte der Berechnungen von N 0 ist akzeptierend nur wenn mindestens eine Berechnung von N akzeptierend ist. Dann gilt x ∈ L und L ∈ PP. Wir haben gesehen, dass die Klasse ZPP den Probabilismus der Klasse RP einschränkt, bis er praktisch kaum noch in Erscheinung tritt. Jetzt möchten wir die Forderungen an unsere probabilistischen Maschinen aufweichen. 8 Die Idee ist, dass wir eigentlich nicht darauf bestehen müssen, dass eine RP-Maschine die Eingaben x 6∈ L immer verwirft. Da wir uns sowieso mit gewisser Fehlerwahrscheinlichkeit abgefunden haben, liegt es nahe, auch im Falle x 6∈ L lediglich zu verlangen, dass die Eingabe mit sehr kleiner Wahrscheinlichkeit akzeptiert wird. Die Sprachen in der Klasse BPP haben genau diese Eigenschaft. Definition 4.6. Sei L eine Sprache. L ∈ BPP (für bounded probability of error) wenn es ein ε und eine standardisierte polynomial-zeitbeschränkte NTM N existiert, mit • x ∈ L ⇒ Pr(N akzeptiert x) ≥ 1/2 + ε • x 6∈ L ⇒ Pr(N verwirf t x) ≥ 1/2 + ε, d.h. Pr(N akzeptiert x) ≤ 1/2 − ε Abbildung 1: BPP Komplexitätsklasse Die Fehlerwahrscheinlichkeit von RP- und BPP-Algorithmen kann man durch ein Majoritätsvotum reduzieren. Diese Technik wird auch die Wahrscheinlichkeitsverstärkung genannt. Die Wahrscheinlichkeitsverstärkung bedeutet im Wesentlichen das Vergrößern der Wahrscheinlichkeitslücke. Man läßt einen Algorithmus mehrere Male auf dieselbe Eingabe durchlaufen, mit jeweils neuen Zufallszahlen. Je mehr Einzelergebnisse, desto größer die Wahrscheinlichkeitsversärkung. Bei RP-Algorithmus kann die Eingabe akzeptiert werden, wenn die im mindestens einem Durchlauf akzeptiert wurde. Die Ausgabe eines BPP-Algorithmus ist in beiden Fällen (d.h. akzeptieren oder verwerfen) zu mißtrauen. Trotzdem liefert jedes Einzelergebnis eine gewissen Evidenz, die sich bei mehreren Versuchen verstärken kann. In diesem Kapitel wurden vier Komplexitätsklassen RP, ZPP, PP und BPP definiert. Die Fehlerarten können auf die folgende Weise klassifiziert werden: Es gibt zweiseitigen Fehler (d.h., Wörter aus der Sprache L dürfen auch verworfen werden, Wörter, die nicht in L sind, dürfen auch akzeptiert werden), einseitigen Fehler (Wörter aus L dürfen verworfen werden, Wörter, die nicht L sind, dürfen aber nicht akzeptiert werden), sowie den fehlerfreien Fall (der Algorithmus darf die Antwort verweigern, wenn er aber antwortet, muss das Ergebnis stimmen. Die Fehlerwahrscheinlichkeit bei zweiseitigem Fehler muss kleiner als 12 und bei einseitigem Fehler kleiner als 1 sein. Man unterscheidet daher auch die Falle, dass die Fehlerwahrscheinlichkeit beliebig nahe an der trivialen Schranke sein darf (hier spricht man auch von unbeschranktem Fehler) oder dass die Fehlerwahrscheinlichkeit einen konstanten Abstand von der trivialen Fehlerschranke haben muss, in diesem Fall spricht man von beschranktem Fehler. Bei dieser Klassifizierung der Fehlerarten erhält man sechs mögliche Definitionen von probabilistischen Komplexitatsklassen, die in der Tabelle 4.1 dargestellt sind. Die Beziehungen zwischen Komlexitätsklassen sind in einer Inklusionsdiagramm ( Abbildung 2 ) zusammengefasst. Man sieht, dass die BPP, RP und co-RP Algorithmen auch praktisch realisierbar sind. 9 zweiseitiger Fehler unbeschränkter Fehler beschränkter Fehler ⊇ PP | einseitiger Fehler ∪ NP | ⊇ BPP fehlerfrei ⊇ ∪ RP NP ∩ co-NP | ⊇ ∪ ZPP Tabelle 4.1: Fehlerartenklassifizierung Abbildung 2: Komlexitätsklassenhierarhie 5 Schaltkreise und ihre Größe Einen Schaltkreis kann man als Beschreibung einer booleschen Funktion f : {0, 1}n → {0, 1} auffassen. Der besteht aus booleschen Gattern, die fest verdrahtet sind. Die Aufgabe jedes Gatters im Schaltkreis ist, einmal im Laufe der Berechnung eine feste, ihm zugewiesene boolesche Funktion auszuführen. Das Modell ist deshalb sehr restriktiv, weil die Kommunikationsstruktur konstant ist und der Nachrichtentransport nur in eine Richtung verläuft. Alle Knoten des Schaltkreises haben Eingangsgrad 0, 1 oder 2. Die Knoten mit Eingangsgrad 0 sind die Eingangsknoten, mit Ausgangsgrad 0, die Ausgangsknoten. Die Gatter des Schaltkreises sind mit Elementen einer vollständigen Basis {∨, ∧, ¬} gelabelt. Ein Beispielschaltkreis für das XOR Gatter ist in der Abbildung 3 dargestellt. Aus dem Beispiel sollte klar sein, wie man aus dem Schaltkreis die Funktion erhält, die der Schaltkreis berechnet. Definition 5.1. Die Größe eines Schaltkreises ist die Anzahl der Gatter im zugrunde liegenden Graphen. 10 Abbildung 3: Schaltkreis für das XOR auf 2 Bits Definition 5.2. Eine Schaltkreisfamilie ist eine Menge C = {Cn }n∈N von Schaltkreisen, wobei Cn genau n Eingangsknoten besitzt. Wir sagen, dass eine Sprache L ⊆ {0, 1}∗ hat polynomial große Schaltkreise wenn das eine Schaltkreisfamilie C = {Cn }n∈N ist und folgendes gilt: • Die Grösse von Cn für irgendeinen bestimmten Polynom p ist höchstens p(n). • Für alle x ∈ {0, 1}∗ ist die Ausgabe von C|x| true, wenn x ∈ L und false, wenn x 6∈ L. Welche Arten von Sprachen haben polynomial große Schaltkreise? Satz 5.1. Alle Probleme in P haben polynomial große Schaltkreise. Beweis: Sei L ∈ P eine Sprache, die von einer Türingmaschine in Zeit p(n) entschieden wird. Für jede Eingabe x kann ein Schaltkreis C mit O(p|x|2 ) vielen Gatter konstruiert werden, so dass C(x) = true wenn x ∈ L, und C(x) = false sonst2 . Da L ⊆ {0, 1}∗, können wir aus der Eingabe x gültige Belegung von Eingängen des Schaltkreises erzeugen. Liegen alle Sprachen, die polynomial große Schaltkreise haben, in P? Leider nicht. Auch für nichtberechenbare Funktionen existieren Schaltkreisfamilien. Beispiel: Für das unär kodierte diagonalisierte Halteproblem {1n | die n − te T uringmaschine stoppt bei Eingabe n} existiert eine Schaltkreisfamilie mit logarithmischer Tiefe. Um Schaltkreise als Modell für effiziente Berechnungen zu verwenden, müssen die Schaltkreise deshalb selber effizient berechenbar sein. Es wird meistens verlangt, dass die Schaltkreise von einer logarithmisch platzbeschränkten Turingmaschine berechnet werden können. Solche Schaltkreise werden uniform genannt. Alle Sprachen, die uniforme polynomial große Schaltkreise haben, liegen in P. 2 Die Konstruktion von Schaltkreisen ist in [Pap94] beschrieben. 11 6 De-Randomisierung Jetzt möchen die Aussage über die Komplexität von probabilistischen Algorithmen treffen. Folgender Satz hilft uns dabei: Satz 6.1. Alle Probleme in BPP haben polynomial große Schaltkreise. Beweis: Sei L ∈ BPP die Sprache, die von einer nichtdeterministischen Maschine N nach Mehrheit entschieden wird. Wir behaupten, dass L eine polynomiale Schaltkreisfamilie Cn hat. Unser Schaltkreis basiert auf Serie von Bitfolgen An = (a1 , ..., am ) mit ai ∈ {0, 1}p(n) für i = 1, ..., m, wobei p(n) die Berechnungslänge von N mit Eingabe von Länge n ist und m = 12(n + 1). Jede Bitfolge ai aus An ist die mögliche Entscheidungsfolge für N und damit beschreibt sie vollständig die Berechnung von N mit der Eingabe der Länge n. Das bedeutet, Cn mit Eingabe x simuliert N für jede Bitfolge aus An und nimmt nach Mehrheit der Ergebnis aus m Durchläufen. Wir wissen wie man polynomiale Berechnungen mit Schaltkreisen simuliert, deshalb können wir für An die Schaltkreisfamilie Cn so konstruieren, dass die polynomial viele Gatter hat. Jetzt müssen wir noch zeigen, dass es so ein An gibt, so dass Cn richtig funktioniert. Das heißt, wir müssen folgendes zeigen: Behauptung: Für alle n > 0 gibt es ein Satz An von m = 12(n + 1) Bitfolgen, so dass für alle Eingaben x mit |x| = n weniger als die Hälfte der Entscheidungen falsch sind. Beweis: Sehen wir uns die Serie An von m Bitfolgen der Länge p(n), die zufällig aus m unabhängigen Stichproben aus {0, 1}p(n) ausgewählt wurden. Wie groß ist die Wahrscheinlichkeit dass für jede x aus {0, 1}n mehr als die Hälfte der Entscheidungen richtig sind? Wir sollen zeigen, dass diese Wahrscheinlichkeit wenigstens 12 ist. Für jede x aus {0, 1}n sind höchstens 41 der Berechnungen falsch. Da die Folgen aus An zufällig und unabhängig ausgewählt wurden, ist die erwartete Anzahl von falschen Einsen 14 m. Nach Chernoff Ungleichung ist die Wahrscheinlichkeit, dass die Anzahl der m 1 . falschen Bitfolgen 12 m oder größer ist, höchstens e− 12 < 2n+1 n Jetzt gilt letzte Ungleichung für alle x aus {0, 1} . Also, die Wahrscheinlichkeit, dass in An keine akzeptierende Folge für x gibt, ist höchstens die Summe aller Wahrscheinlich1 keiten unter allen x; und diese Summe ist höchstens 2n 2n+1 = 12 . Wir können daraus schließen, dass mit Wahrscheinlichkeit von mindestens 12 hat unsere zufällige Auswahl von Folgen die gewünschte Eigenschaft. Andererseits betrachten wir die Menge von allen 2p(n)12(n+1) Auswahlmöglichkeiten von 12(n+1) Bitfolgen (Abbildung 4). Die Untermenge Sx enthält alle Folgen, bei denen die richtige Antwort für Eingabe x nach Mehrheit abgelehnt wurde. Die Grosse von solcher p(n)12(n+1) Untermenge ist höchstens 2 2(n+1) . Die Vereinigung von solchen Mengen kann sicher p(n)12(n+1) nicht größer als 2n 2 2(n+1) Elementen enthalten. Wenn wir die von 2p(n)12(n+1) großen Menge aller Elemente subtrahieren, sehen wir dass mindestens die Hälfte aller Folgen für Eingabe x akzeptierend sind. Bemerkung: Wir wissen nur, dass so eine tolle Folge An existieren muss, nicht aber wie wir die finden können. 12 Abbildung 4: Bitfolgen Der Beweis des Theorems ist jetzt vollständig: Wenn wir so eine Folge An haben, dann können wir ein Schaltkreis Cn mit O(n2 p2 (n)) Gatter bauen, der simuliert N mit jeder von diesen Folgen und nimmt dann Ergebnis nach Mehrheit. Aus der Eigenschaft von An folgt, dass Cn nur dann true ausgibt, wenn Eingabe aus L ∩ {0, 1}n ist. Folglich hat L polynomial große Schaltkreise. Literatur [Bit03] Hot Bits. Zufallszahlen. http://www.fourmilab.ch/hotbits/, 2003. 6 [Cor03] Intel Corporation. RNG. http://www.intel.com/design/security/rng/rng.htm, 2003. 6 [Pap94] Christos M. Papadimitriou. Computational complexity. Addison-Wesley Publishing Company, Inc., 1994. 3, 7, 11 [RW03] FH Ravensburg-Weingarten. Projektarbeit: Erzeugen echter Zufallszahlen“. ” http://erde.fbe.fh-weingarten.de/rrng//., 2003. 6 [Sch97] Uwe Schöning. Algorithmen - kurz gefasst. Spektrum, Akad. Verl., 1997. 2 13