13.3 Additionsschaltkreis 101
13.3.3 Der Carry-Look-Ahead-Addierer
13-22 Warum der naive Addierer so lange braucht. 13-22
– Der naive Addierer braucht lange, da die Carry-Bits hinten einen Einfluss auf das Ergebnis vorne haben können.
– Bei einemCarry-Look-Ahead-Addiererversucht man deshalb, den Einfluss der Carry- Bits schneller zu berechnen.
13-23 Die drei Effekte, die zwei Bits haben können. 13-23
Sei an. . .a1bn. . .b1die Eingabe und betrachten wir zwei Bitsai und bi. Ihr Einfluss auf das Carry-Bit lässt sich in drei Klassen unterteilen:
generate Falls beide Bits1sind, erzeugen sieauf jeden Fall ein Carry-Bit, unabhängig davon, was an den niederwertigeren Stellen passiert.
kill Falls beide Bits0 sind, erzeugen sieauf keinen Fall ein Carry-Bit.
propagate Falls genau ein Bit0ist, soreichen sie das Carry-Bit der niederwertigen Bits einfach durch.
13-24 Wie die Effekte zusammenwirken. 13-24
Nehmen wir nun an, der Effekt zweier Bitsai und bi istg,koder p und der Effekt von ai−1 undbi−1ist ebenfallsg,koderp. Dann ist der Gesamteffekt:
Effekt von ai,bi Effekt vonai−1,bi−1 Gesamteffekt
g g g
g k g
g p g
p g g
p p p
p k k
k g k
k k k
k p k
13-25 Der Carry-Look-Ahead-Addierer. 13-25
Ein Carry-Look-Ahead-Addierer ist wie folgt aufgebaut:
– Zunächst wird parallel in TiefeO(1)für jedes Bitpaar(ai,bi)der Effekt ausgerechnet.
– Dann wird für jede Stelle der Effekt ausgerechnet, den alle Bits haben, die nieder- wertiger sind.
– Dazu kann man einenPostfixsummeberechnen. Dies geht in TiefeO(log n)und Platz O(n).
– Ist für jede Stelle der Übertrag der vorherigen Stellen bekannt, kann die Ausgabe in TiefeO(1)und PlatzO(n)berechnet werden.
Beispiel
Bitposition i 4 3 2 1 0
ai 0 1 1 1
bi 0 0 0 1
Effekt vonai undbi k p p g Gesamteffekt bisi. . . k g g g . . . und folglicher Übertragci 0 1 1 1 Summeai+bi+ci−1 0 1 0 0 0
Zusammenfassung dieses Kapitels
13-26 1. Das mathematische Schaltkreismodellabstrahiertvon vielen Details. 13-26
2. Die wichtigsten Schaltkreisklassen sind POLYSIZE,NCi undACi.
3. Man kann Zahlen in TiefeO(log n)und PlatzO(n)addieren.
13 Boole’sche Schaltkreise
13.4 Übungen zu diesem Kapitel 103
Übungen zu diesem Kapitel
Übung 13.1 (Simmulation der Sprache der Palindrome durch Schaltkreise, leicht) Geben Sie eineAC0- oder eineNC1-Schaltkreisfamilie für die Sprache der Palindrome an. Begrün- den Sie auch, warum Ihre Schaltkreisfamilie logspace-uniform ist.
Übung 13.2 (AC versus NC, mittel)
Zeigen Sie, dass für alle i∈N gilt: NCi⊆ACi⊆NCi+1. Folgern Sie daraus, dass für NC :=
S
i∈NNCi undAC :=S
i∈NACigilt:AC=NC.
Übung 13.3 (Schaltkreiskomplexität von regulären Sprachen, schwer) Zeigen Sie, dass jede reguläre Sprache inNC1 ist.
Aus Ihrem Beweis sollte einem »geübten Leser« aufgrund Ihrer Beschreibung klar sein, wie der Schaltkreis zu konstruieren ist; es müssen nicht alle Gatter einzeln beschrieben werden.
Tipp:Benutzen Sie die Charakterisierung von regulären Sprachen durch deterministische endliche Automaten und verknüpfen Sie die Zustände eines solchen Automaten ähnlich wie beim Carry- Look-Ahead-Addierer.
104 14 Multiplizieren und Dividieren
14-1 14-1
Kapitel 14
Multiplizieren und Dividieren
Computer rechnen nicht so, wie wir es in der Schule gelernt haben
14-2 14-2
Lernziele dieses Kapitels
1. NC1-Multiplikationsalgorithmus kennen
2. NC2-Divisionsalgorithmus kennen
Inhalte dieses Kapitels
14.1 Multiplikationsschaltkreis 105 14.1.1 Ziel . . . 105 14.1.2 Ein Trick . . . 105 14.1.3 Der Schaltkreis . . . 106
14.2 Divisionsschaltkreis 106
14.2.1 Problemstellung . . . 106 14.2.2 Division in modernen Prozessoren . . . 107 14.2.3 Vorbereitungen . . . 107 14.2.4 Das Newton-Verfahren . . . 108 14.2.5 Der Schaltkreis . . . 109 Übungen zu diesem Kapitel 110
Worum es heute geht
Worum es heute geht
Zwei Zahlen zu multiplizieren oder gar zu dividieren ist eine Kunst für sich. Beide Ope- rationen sind so grundlegend, dass die Menschheit sich wirklichvieleGedanken darüber gemacht hat, wie man diese beiden Operationen möglichst effizient hinbekommt. Um so verblüffender erscheint es, dass die Komplexität der Division aus komplexitätstheoretischer Sicht erst im Jahr 2001 endgültig geklärt werden konnte (das Dividieren ist vollständig für TC0, eine Klasse zwischen AC0und NC1).
Dabei erscheinen beide Operationen zunächst ganz einfach, schließlich lernt jedes Kind in der Schule schon recht früh, wie dies geht. Die »Schulmethoden« haben aber den Nachteil, dass sie (a) »sehr sequentiell« sind, insbesondere die Methode zur Division, und (b) quadratischen Aufwand (in der Länge der Zahlen) haben, was bei sehr großen Zahlen – wie sie zum Beispiel in der Kryptologie oft auftreten – zu viel erscheint.
Ist man nicht an einer Parallelisierung interessiert, dann bietet der Algorithmus von Ana- tolij Alexejewitsch Karazuba eine schnellere Methode. Soll es aber parallel gehen, so muss man sich etwas neues ausdenken. Mit etwas Informatiksachverstand sieht man schnell, dass die Multiplikation mit einem Divide-and-Conquer-Algorithmus recht gut parallelisiert wer- den kann, was recht einfach einen NC2-Algorithmus liefert. Für einen NC1-Algorithmus, unser erstes Ziel für dieses Kapitel, ist ein netter kleiner Zusatztrick nötig.
Bei der Division muss man schon mit größeren Kalibern hantieren. In diesem Kapitel wird eine Newton-Iteration für die Division vorgestellt, welche einen NC2-Algorithmus liefert.
Dies ist noch ein sehr kleines Geschütz verglichen mit den mathematischen Schwerge- wichten, die im Beweis für die TC0-Vollständigkeit der Division notwendig sind. Da sie für diese Veranstaltung eine Nummer zu groß sind, lassen wir deshalb lieber die Finger davon.
14 Multiplizieren und Dividieren
14.1 Multiplikationsschaltkreis 105
14.1 Multiplikationsschaltkreis
14.1.1 Ziel
14-4 Die Problemstellung zum Multiplikationsproblem. 14-4
Problemstellung
Für ein gegebenes nwollen wir die Funktionmn:{0,1}2n→ {0,1}2n berechnen.
Sie multipliziert die ersten n Bits der Eingabe mit den zweiten n Bits und liefert das Ergebnis zurück.
Beispiel
– m4(01001101) =00110100. – m4(00010001) =00000001. Ziel
Eine NC1-Schaltkreisfamilie für die Funktion.
14-5 Wie einNC2-Schaltkreis für die Multiplikation funktioniert. 14-5
1. Mit einem Schaltkreiskonstanter Tiefewerdenn Zahlen ermittelt, deren Summe das gesuchte Produkt ist. (Schulmethode.)
2. Wir wissen schon, dass sich zwei Zahlen in TiefeO(log n)addieren lassen.
3. Addieren wirn Zahlen baumartig, so müssen erhalten wir einen Additionsbaum der TiefeO(log n).
4. Dies liefert eine Gesamttiefe vonO(log2n). Beispiel (Ein Produkt)
1001·1101= 00001001+ 00000000+ 00100100+ 01001000= 00001001+ 01101100= 01110101