Unser Ziel in diesem Teilkapitel ist es, Schaltkreise für die Majority-Funktion zu bauen:
Diese nimmt Bits als Input und gibt 1 aus, wenn mehr als davon 1 sind.
Für heißt dass, das mindestens zwei Input-Bits 1 sein müssen. Als Formel
kann man das so schreiben:
und als Schaltkreis so:
Wie können wir das sinnvoll verallgemeinern für größere ?
Was geschieht, wenn wir einfach die Wahrheitstabellen-Methode anwenden?
Falls ungerade ist, dann sieht man leicht, dass die Wahrheitstabelle
in genau vielen Zeilen eine 1 stehen hat und in ebenso vielen eine 0.
Übungsaufgabe 2.5.1
Sei eine ungerade Zahl. Zeigen Sie, dass für genau
die Hälfte aller möglichen Eingaben eine 1 ausgibt (und für die
andere Hälfte eine 0).
Wir erhielten also eine DNF mit vielen AND-Gates. Das ist
sehr groß, gemessen daran, dass Zählen und mit vergleichen
ja nicht besonders schwierig klingt.
Hier ist eine kleine Verbesserung, demonstriert am Beispiel
. Wenn wir für mit Hilfe einer Wahrheitstabelle
eine DNF konstruieren, erhalten wir ja unter Anderem den Term
da der Input ist. Schauen wir uns nun den Term
an, den wir erhalten, wenn wir alle negativen Literale aus löschen:
Wenn dieser Term 1 wird, dann sind sein, also
insgesamt fünf Input-Bits 1, und gibt 1 aus. Hier ist also eine Vereinfachung:
wir folgen der Wahrheitstabellen-Methode, lassen aber alle negativen Literale weg.
Das Ergebnis ist etwas kleiner und immer noch korrekt.
Schauen Sie sich nun den Term
an. Auch dieser kommt in der Wahrheitstabelle vor, da gilt.
In unserer neuen Konstruktion wird dieser zu vereinfacht.
Nun schauen Sie: wenn den Wert 1 ausgibt, dann
gibt auf jeden Fall 1 aus, und wird 1; ist
also redundant. Irgendwie ist das ja auch klar: zu verlangen, dass die fünf
Variablen alle mit 1 abstimmen, ist zwar hinreichend,
aber eben schon mehr als nötig. Es reicht also, sich auf alle Terme mit genau 4 Variablen zu
beschränken.
Im allgemeinen sei . Dann gilt
Diese Konstruktion hat nun Terme, von denen jeder aus Variablen
besteht.
Ist das nun gut oder schlecht?
Lemma. 2.5.1
Es gilt
Beweis.
Sei . Vergleichen wir mit :
und somit
Aus der letzten Zeile folgt nun, dass durch
maximiert wird, also
gilt.
Als nächstes müssen wir uns die Definition von ins Gedächtnis rufen.
Nein, ist nicht die Definition, sondern eine Formel dafür. Die
Definition ist:
ist die Menge der Teilmengen von , die Größe
haben.
Wieviele Teilmenge (jeglicher Größe) gibt es insgesamt? Genau viele: Sie müssen
für
jede
Zahl die Entscheidung treffen, ob in die Menge soll oder
nicht,
haben also insgesamt Wahlmöglichkeiten. Daher gilt:
Intuitiv gesprochen heißt das: diese Summe hat Terme ( wandert von 0 bis
,
also muss
der größte Term mindestens ein -tel des Gesamtbetrages sein. Formal:
und somit
wie behauptet.
Unsere neue, bessere Konstruktion benötigt also immer noch mindestens
Terme,
was bereits für moderate Werte wie nicht vertretbar ist.
Majority Top-Down mit if-then-else-Gates
Wenden wir nun statt Wahrheitstabelle die Top-Down-Methode an, modifiziert
für monotone Funktionen wie in den
Lösungen zu den Übungsaufgaben dargestellt.
Insbesondere definieren wir Verallgemeinerungen von wie folgt:
Die Funktion ist also ein Speziallfall für
. Wir können rekursiv zerlegen wie folgt:
und somit aus und
berechnen. Rekursiv fortgefühtr sieht das dann so aus:
Die Konstruktion endet mit , was immer ausgibt, und
mit , was ist. Die
Konstruktion ist leider auch nicht effizient; wenn man
mit die Anzahl der und in diesem
Baum zählt, dann sieht man, dass
gilt; sie erfüllt also die gleiche Rekursionsgleichung wie der Binomialkoeffizient
, also gilt . Die Konstruktion ist
asymptotisch auch nicht besser als die, aus der Wahrheitstabelle direkt
eine monotone DNF zu basteln.
Allerdings können wir die obige Konstruktion offensichtlich
effizienter machen, indem wir mehrfach verwendete Zwischenergebnisse wie
nicht doppelt berechnen, also statt dem obigen
Baum einen Schaltkreis nach folgendem Pyramidenschema bauen:
Um eine Analogie mit der Programmierpraxis zu bemühen: der Unterschied
zwischen den beiden Konstruktionen für per Baum versus
per Pyramidenschema entspricht dem Unterschied zwischen dem
rekursiven Code für ,
def binomial(n,k): if k == 0 or k == n: return 1 else: return binomial(n-1,k-1) + binomial(n-1,k)
der exponentielle Laufzeit aufweist, und der effizienten Implementierung mittels
Dynamic Programming, bei welchem wir uns die Zwischenergebnisse merken.
Um Größe und Tiefe des Schaltkreises zu analysieren, machen wir
eine grobe Abschätzung. Für jedes , das in unserer
Pyramide vorkommt, brauchen wir 2 Gates; kann die
Werte annehmen und die Werte ,
also bekommen wir insgesamt höchstens graue Kästchen
und Gates.
Die Tiefe ist , da in jedem Schritt von grauem Kasten
zu dem nächsttieferen der Wert von abnimmt. Insgesamt also haben wir
gezeigt:
Theorem 2.5.2
Die Funktion
kann mit einem Schaltkreis der Größe ,
Tiefe und Fan-in 2 berechnet werden.
Majority durch Zählen
zu bestimmen sollte doch einfach sein: wir zählen die Anzahl der 1en
und
vergleichen sie mit . Wie aber sollen wir zählen? Ganz einfach: mit einem
Binäraddierer! Sei die Anzahl der Bits in der Binärdarstellung von
.
Wir interpretieren jede Input-Variable als -stellige Binärzahl,
wobei der Zahl , also 1 entspricht, und der Zahl
, also 0, und addieren die dann auf:
Übungsaufgabe 2.5.2
Bestimmen Sie asymptotisch die Größe und die Tiefe dieses Schaltkreises.
Achten Sie besonders bei der Berechnung der Größe darauf, dass die untersten Add-Gadgets
ja 1-stellige oder dann 2-stellige Zahlen addieren müssen und erst die weniger obersten Gadgets
Zahlen mit Bits als Input bekommen.
Tiefe mit 2-for-3-Addierern.
Die vorherige Konstruktion mit den Addierern war schon deutlich effizienter
als unsere pyramidenartige -Konstruktion, allerdings wurde
das Ziel, eine Tiefe von zu erreichen, wieder verfehlt, wenn auch
knapp. Die Idee, die eine Tiefe von erreichen wird, ist ebenso
einfach wie genial.
Lemma (2-for-3 Adder) 2.5.3
Es gibt einen Schaltkreis mit Gates,
Tiefe 2 und Fan-In 2, der als Input drei
-stellige Binärzahlen nimmt
und zwei -stellige Binärzahlen ausgibt, so dass
gilt.
Beweis.
Ich demonstriere das Beweisprinzip erst einmal mit drei Zahlen in Basis 10:
Wir addieren also pro Stelle drei (einstellige) Zahlen,
führen den Übertrag (das Carry) aber nicht der weiter links stehenden Stelle
zu, sondern sammeln alle Überträge und bilden daraus die -stellige
Zahl .
Für Binärzahlen ist das natürlich noch einfacher:
Dieser Schaltkreis hat insgesamt Gates und Tiefe 2 (wobei wir
die NOT-Gates im -Gate nicht mitzählen).
Wir interpretieren nun die Inputs
von Majoroty als einstellige Binärzahlen, sortieren sie in
Dreiergruppen und machen per 2-for-3-Addierer daraus
Zahlen. Dann machen wir (mit den mittlerweile
2-stelligen Zahlen) weiter und bekommen circa
Zahlen. Auf jeder Ebene schrumpft die Anzahl
der Zahlen um einen Faktor von ; nach
Ebenen haben wir schließlich noch zwei mittlerweile ()-stellige Zahlen, die
wir mit einem "normalen" Binäraddierer addieren. Das Ergebnis vergleichen
wir mit dem -Schaltkreis mit . Was ist die
Tiefe des Gesamtschaltkreises? Es ist
äüü
Die Größe des Schaltkreises wird dominiert von den 2-for-3-Addierern. Wir
haben viele davon, allerdings hat jeder bis zu
viele Gates, da wir ja ()-stellige Zahlen addieren müssen;
wir haben insgesamt also viele Gates.
Theorem. 2.5.4
Die Konstruktion mit 2-for-3-Addierern gibt uns einen Schaltkreis
für Majority mit Fan-in 2, Tiefe und
Größe
Übungsaufgabe 2.5.3
Führen Sie eine genauere Abschätzung der Größe durch. Untersuchen Sie insbesondere:
Wieviele 2-for-3-Addierer haben Sie in Ebene des Baumes?
Wieviel Bits haben die Zahlen auf Ebene , und wie groß muss daher
der 2-for-3-Addierer sein?
Was ergibt sich insgesamt in Summe?
Wir haben nun also fast alle unserer Ziele erreicht. Allerdings hat
die Konstruktion mit 2-for-3-Addierern einen Schönheitsfehler: sie ist nicht
monoton. Warum sollten wir das wollen? Nun ja, Majority ist eine
monotone Funktion, also ist es ja irgendwie verständlich, dass wir auch einen
monotonen Schaltkreis wollen. Unser Pyramidenschema, in dem wir
alle berechnen, ist monoton, hat allerdings leider
Tiefe .
Monoton und polylogarithmische Tiefe durch Halbierung und Aufzählung.
Die Idee ist, dass wir, anstatt aus
, und zu berechnen,
versuchen, irgendwie von auf runterzukommen. Dann könnten wir
rekursiv weitermachen und müssten uns nur durch logarithmisch viele Werte von wühlen.
Wir sehen, dass wir auf Weisen als Summe zweier nichtnegativer
Zahlen schreiben können. Des weiteren zerlegen wir
in
und
und sehen, dass
ü
und somit
Wenn wir diese Konstruktion rekursiv fortsetzen, erhalten
wir Ebenen und somit auf den ersten Blick logarithmische
Tiefe. Auf den zweiten Blick erkennen wir, dass wir etwas geschummelt haben:
die -Gates haben sehr großen Fan-in, nämlich bis zu . Um
Fan-in 2 zu erreichen, müssen wir jedes -Gate durch einen Binärbaum
aus normalen -Gates von Fan-in 2 ersetzen. Dies gibt uns zusätzlich
Tiefe pro -Gate; wir erhalten also insgesamt
eine Tiefe von .
Übungsaufgabe 2.5.4
dass polynomiell viele (in diesem Falle: viele) Gates ausreichen.
Zeigen Sie, wie die gerade skizzierte Konstruktion so ausgeführt werden kann,
Monoton und logarithmische Tiefe: Valiants probabilitische Konstruktion
Theorem. 2.5.5
Es gibt einen monotonen Schaltkreis mit Fan-in 2, Tiefe und Größe
, der berechnet.
Beweis.
Die Beweismethode, die wir verwenden, ist womöglich neu für Sie. Wir verwenden
bei der Konstruktion des Schaltkreises Zufall; am Ende werden
wir zeigen, dass dieser zufällige Schaltkreis mit hoher Wahrscheinlichkeit
auf allen möglichen Inputs korrekt berechnen, und folgern
daraus, das etwas, was mit hoher Wahrscheinlichkeit eintritt, auch existieren muss.
Die Existenz folgt also schlussendlich aus einer Wahrscheinlichkeitsrechnung.
Das heißt auch, dass ich Ihnen für konkretes , sagen wir ,
nicht hinschreiben könnte, wie ein korrekter Schaltkreis aussähe; ich könnte
die randomisierte Konstruktion durchführen und Ihnen erklären, das der
resultierende Schaltkreis höchstwahrscheinlich korrekt ist.
Während des ganzen Beweises müssen Sie sich vor Augen halten, dass wir
bei der Konstruktion des Schaltkreises Zufall verwenden;
wir nehmen nicht an, dass die Inputs in irgendeiner
Weise zufällig sind. Wir verwenden also
Wahrscheinlichkeitsverteilungen über Schaltkreisen, nicht
von über Inputs. Zuerst definieren wir
die Signalstärke von Verteilungen über Schaltkreise.
Definition (Signalstärke) 2.5.6
Sei eine Verteilung über Schaltkreise mit Input-Variablen
. Wir sagen, dass Signalstärke mindestens
hat, wenn
gilt.
In Worten, wenn der zufällig ausgewählte Schaltkreis den Wert
besser als ein Münzwurf vorhersagt, und zwar um besser.
Wir können einen ganz einfachen (zufälligen Schaltkreis)
bauen, der ein schwache aber positive Signalstärke hat.
Lemma. 2.5.7
Es gibt eine Wahrscheinlichkeitsverteilung über monotone Schaltkreise der
Größe 1,
die Signalstärke hat.
Genauer gesagt gilt für jeden Input :
ein nach dieser Verteilung zufällig ausgewählter Schaltkreis
ist mit Wahrscheinlichkeit
mindestens korrekt ist.
Formal ausgedrückt:
Beweis.
Der Schaltkreis bzw. die Wahrscheinlichkeitsverteilung ist extrem einfach.
Wir wählen zufällig einen Index und
geben als unseren Schaltkreis (bestehend aus einem einzigen Input-Gate,
das gleichzeitig das Output-Gate ist) aus. Dieser Schaltkreis
ist natürlich monoton.
Beachten Sie, dass ich den Index groß geschrieben mit bezeichne,
nicht ; das ist Konvention, weil eine Zufallsvariable ist.
Sei nun ein festes gegeben. Mit welcher Wahrscheinlichkeit
ist unser (recht primitiver) Schaltkreis korrekt?
Wir unterscheiden nun zwei Fälle. Wenn ist, dann
gibt es mindestens Indizes mit . Wenn wir
mit einen solchen ausgewählt haben, dann sind wir erfolgreich. Die
Wahrscheinlichkeit hierfür ist
Wenn nun ist, dann gibt es mindestens Stellen mit
, und somit ist auch wieder mit Wahrscheinlichkeit mindestens
korrekt.
Um eine Analogie aus dem Alltag zu bemühen: wenn Sie für eine
Wahlprognose einen zufällig ausgewählten Bürger befragen, so
ist das Ergebnis zwar nicht wirklich repräsentativ, aber immerhin leicht
besser, als wenn Sie einfach raten würden. Unser zufälliger
Schaltkreis sendet uns also ein schwaches aber positives Signal in die
richtige Richtung. Die Signalstärke ist .
Die zweite Zutat ist nun ein "Signalverstäker".
Angenommen, eine Verteilung hat Signalstärke , also
Dann können wir drei Schaltkreise
unabhängig voneinander samplen und
einen neuen Schaltkreis bauen: . Dies gibt
uns wiederum eine Verteilung über Schaltkreise, die wir
nennen. Diese hat eine höhere Signalstärke:
Lemma 2.5.8
Falls eine Verteilung über Schaltkreise der Tiefe
und Größe ist und Signalstärke hat, dann gilt:
alle Schaltkreise in haben Tiefe
;
alle Schaltkreise in haben Größe
;
die Signalstärke von ist
.
Beweis.
Wir betrachten ein festes mit ; der
Fall ist analog. Wir definieren
nun , und . Da
zufällige Schaltkreise sind, sind
Zufallsvariable
über , und zwar unabhängig, weil wir auch unabhängig
gesampelt haben. Wir wissen: .
Was ist nun ?
Die Signalstärke von ist also mindestens
.
Wir beginnen nun mit der Verteilung über Schaltkreise der
Größe 1 und definieren
Zur Wiederholung: um zu sampeln, sampeln wir unabhängig
drei Schaltkreise und verknüpfen deren Output-Gates mit einem
-Gadget. Wenn die Signalstärke hat, dann
hat Signalstärke
.
Wenn sein sollte, dann ist das mindestens .
Daraus folgt, dass nach höchstens Rekursionsstufen eine Signalstärke
von mindestens erreicht ist: hat Signalstärke mindestens
.
Wenn wir jetzt die rekursive Konstruktion fortsetzen, steigt die Signalstärke weiter an und
konvergiert gegen : . Die Frage ist nur,
wie schnell konvergiert es? Da wir nun nicht mehr an Wahrscheinlichkeiten interessiert sind,
die
knapp über liegen, sondern an solchen, die knapp unter liegen,
führen wir einen Parameterwechsel durch: eine Verteilung von Schaltkreisen
mit Inputs
hat Fehlerwahrscheinlichkeit , wenn
Eine Signalstärke von entspricht einer Fehlerwahrscheinlichkeit von
.
Die Verteilung hat also eine Fehlerwahrscheinlichkeit von
höchstens . Das obige Lemma, nun aus der Sicht der
Fehlerwahrscheinlichkeit,
liest sich so:
Behauptung. Wenn
Fehlerwahrscheinlichkeit
hat, dann hat Fehlerwahrscheinlichkeit
Beweis. Wie im Beweis vom Lemma setzen wir
und erhalten
Somit hat Fehlerwahrscheinlichkeit .
Für hat eine Fehlerwahrscheinlichkeit von
höchstens . Für wird das zu und
für zu .
Wenn nun ist, dann gilt .
Wir definieren , also die Fehlerwahrscheinlichkeit von
. Es gilt also für alle
und somit
Qualitativ sehen wir: solange gilt, wächst die Signalstärke exponentiell
an. Dieses exponentielle Wachstum kann natürlich nicht beliebig weitergehen. Jenseits
hört das auf, dafür fällt nun die Fehlerwahrscheinlichkeit
doppelt exponentiell. Für gilt dann
In Bildern:
Graph der Funktion
Signalstärke wächst für exponentiell.
Fehlerwahrscheinlichkeit fällt für doppelt
exponentiell.
Wir setzen nun und
sehen, dass eine Verteilung über Schaltkreise mit
Tiefe und Fehlerwahrscheinlichkeit kleiner als ist.
Was nun kommt, ist ein absolutes Standardargument in probabilitischen Beweisen:
ein Union Bound. Das geht ungefähr so: wenn für jedes feste
ein Schaltkreis mit Wahrscheinlichkeit irrt,
dann ist die Wahrscheinlichkeit, dass sich für irgendein irrt,
höchstens
. Formal: für jedes definieren wir
als die Menge der Schaltkreise mit Input-Variablen
, die sich auf irren, also
ü
Die Verteilung existiert ja im Wahrscheinlichkeitsraum aller
Boolescher Schaltkreise mit Inputs . Die Menge
ist somit ein Ereignis in diesem Raum. Ein extrem unwahrscheinliches Ereignis:
Oder kompakt ausgedrückt: . Wir haben nun
ein Ereignis für jedes und definieren
Was ist ? Es ist die Menge der Schaltkreise, die sich auf mindestens einem
irren. Was ist das Komplement ? Das ist die Menge der Schaltkreise, die sich
auf keinem irren, also die Menge der Schaltkreise, die korrekt
berechnen. Es gilt nun
Also und somit . Das
bedeutet,
dass ein zufälliger Schaltkreis mit positiver Wahrscheinlichkeit
die Funktion korrekt berechnet. Jeder Schaltkreis, der unter
gesampelt werden kann, hat Tiefe , Fan-in 2 und ist monoton, und somit schließen
wir:
es gibt einen monotonen Schaltkreis mit Fan-in 2 und Tiefe , der
berechnet.
Es bleibt die Frage, wie groß dieser Schaltkreis ist. Seien wir hier bequem: ein
Schaltkreis mit Fan-in 2 und einem Output-Gate hat höchstens Gates, die Abstand
vom Output-Gate haben. Somit hat ein Schaltkreis mit Fan-in 2 und Tiefe höchstens
Gates. Ein Schaltkreis mit Fan-in 2 und Tiefe hat also
insgesamt höchstens Gates.
Übungsaufgabe 2.5.5
Präzisieren Sie die Größe von Valiants Schaltkreis und bestimmen ein , so dass
er die Größe hat.
Wir könnten nun noch ehrgeiziger sein und einen monotonen Schaltkreis mit Fan-in 2,
Tiefe und linearer Größe anstreben.