Verfahren von Booth z Was haben wir bisher durch das Verfahren von Booth gewonnen? y Einsparung von Additionen bzw. Subtraktionen durch Berücksichtigung von 0-Blöcken bzw. 1-Blöcken y Aber: Weiterhin n Takte (n Shifts) nötig! z Verbesserung: y Zusammenfassen von k 1-Bit-Shifts in k Takten zu k-Bit-Shifts in einem Takt Ô Barrelshifter Ô Dazu muß am Ende des (geshifteten) Multiplikators die Länge des aktuellen 0- bzw. 1-Blocks bestimmt werden. Ô Benutze dazu Prioritätsencoder CS - RA - SS01 Kap. 2.1 2.1/1 Prioritätsencoder xn-1 n = 2k .... x0 xn-1 .... x0 PE_FIRST_0 PE_FIRST_1 ... ... z yk-1 y0 z yk-1 y0 z = 1, < y >= i , falls ∃i : xi = 0 z = 1, < y >= i , falls ∃i : xi = 1 und ∀j < i : x j = 1 z = 0, y bel., falls xi = 1 ∀i und ∀j < i : x j = 0 z = 0, y bel., falls xi = 0 ∀i Prioritätsencoder lassen sich mit O(n) Gattern in Tiefe O(log n) realisieren. CS - RA - SS01 Kap. 2.1 2.1/2 Division natürlicher Zahlen z Bestimme zu n-Bit-Zahlen a, b y den Quotienten < a > / < b > y und den Divisionsrest < a > mod < b > z Alternativen bei Division durch 0: y keine hardwaremäßige Fehlerbehandlung, Test muß durch Software erfolgen y Setzen bestimmter Flags im Statusregister y Auslösen eines Interrupts (siehe später) CS - RA - SS01 Kap. 2.1 2.1/3 Division ganzer Zahlen z Meist Division der Beträge, dann Vorzeichenbestimmung und evtl. Negieren des Ergebnisses, d.h. Zurückführen auf Division natürlicher Zahlen z Ergibt das eindeutige Ergebnisse? y (+7)/(+2) = +3, Rest +1 Probe: (+2)*(+3)+(+1) = (+7) y (-7)/(+2) = -3, Rest -1 Probe: (+2)*(-3)+(-1) = (-7) y Aber auch: (-7)/(+2) = -4, Rest +1 Probe: (+2)*(-4)+(+1) = (-7) z Regel: Dividend und Divisionsrest haben immer gleiches Vorzeichen! z Also: y (+7)/(+2) = +3, Rest +1 y (-7)/(+2) = -3, Rest -1 y (+7)/(-2) = -3, Rest +1 y (-7)/(-2) = +3, Rest -1 CS - RA - SS01 Kap. 2.1 2.1/4 Division natürlicher Zahlen: Realisierung z Divisionsalgorithmen sind meist angegeben für Festkommazahlen mit bestimmten Größenbedingungen. z Anwendung auf natürliche Zahlen erfordert evtl. y vorheriges Shiften y Festkommadivision mit geeigneter Genauigkeit (Stellenanzahl des Ergebnisses) y Shiften des Ergebnisses CS - RA - SS01 Kap. 2.1 2.1/5 Division natürlicher Zahlen: Darstellung durch Festkommazahlen z Schulmethode auf Festkommazahlen: z Festkommadarstellung a0 .a−1a− 2...a−( n−1) mit Wert | a0 .a−1...a−(n −1) | = a0 2 0 + a−1 2 −1 + ... + a−( n−1) 2 −(n −1) z Gegeben: ( 0) ( 0) (0) (0) y Dividend R = r0 .r−1 ...r−( n −1) y Divisor D = d 0 .d −1...d −( n −1) y Größenbedingung: 0 < | R ( 0 ) | < | D | < 1 z Berechnet wird in n Schritten y Quotient Q = q0 .q−1...q− ( n −1) (n) ( n) (n) ( n) y Rest R = r0 .r−1 ...r− ( n −1) CS - RA - SS01 Kap. 2.1 2.1/6 Division nach Schulmethode z Prinzip wie „schriftliche Division“: y Bestimme aktuelles Quotientenbit: Falls Differenz von aktuellem Partialrest und Divisor negativ werden würde: Quotientenbit = 0, sonst Quotientenbit = 1. y Shifte neuen Partialrest und wiederhole Verfahren. CS - RA - SS01 Kap. 2.1 2.1/7 Division nach Schulmethode z Beispiel: y Hier: Dividiere 2n-Bit-Zahl durch n-Bit-Zahl R ( 0 ) = r0( 0 ) .r−(10 ) ...r−((02)n −1) = 0.101001 D = d 0 .d −1...d −( n −1) = 0.111 y Es gilt: 0 < | R (0) |<| D|< 1 y Gesucht: Quotient Q = q0 .q−1...q− 3 Rest R ( 4 ) = r0( 4 ) .r−(14 ) ...r−(34 ) y − | D | = | 1.001| CS - RA - SS01 Kap. 2.1 2.1/8 R(0) 0.101001 Subtrahiere D probeweise +1.001 1.110001 <0, also q0 = 0 Rückaddition von D +0.111 0.101001 01.01001 Shifte um eine Stelle nach links ⇒ R(1) Subtrahiere D +11.001 ≥ 0, also q-1 = 1, keine Rückaddition von D 00.01101 (2) 0.1101 Shifte um eine Stelle nach links ⇒ R Da klar ist, daß +1.001 Subtrahiere D das Ergebnis ≥ <0, also q-2 = 0 1.1111 0 und <1, kann +0.111 Rückaddition von D man führende 0.1101 Stelle schon Shifte um eine Stelle nach links ⇒ R(3) 1.101 vor Addition +1.001 Subtrahiere D weglassen 0.110 ≥ 0, also q-3 = 1, keine Rückaddition von D ⇒ man kommt 1.10 Shifte um eine Stelle nach links ⇒ R(4) mit n-BitInsgesamt gilt:| Q | = | q0 .q−1...q−3 | = | 0.101| = 58 Addierer aus CS - RA - SS01 | R ( 4) | = | r0( 4 ) .r−(14 ) ...r−(34) | = | 1.100 | = 64 | R( 0 ) | = | Q | ⋅ | D | + | R ( 4 ) | ⋅2 − 4 41 = 5 ⋅ 7 + 6 64 8 8 4⋅16 Kap. 2.1 2.1/9 Division nach Schulmethode z Prinzip wie „schriftliche Division“: y Bestimme aktuelles Quotientenbit: Falls Differenz von aktuellem Partialrest und Divisor negativ werden würde: Quotientenbit = 0, sonst Quotientenbit = 1. y Shifte neuen Partialrest und wiederhole Verfahren. ( j) ( j) 2 | R | , falls | R |-| D|< 0 ( j +1) |R |= ( j) ( j) 2 (| R | − | D |) , falls | R |−| D|≥ 0 q− j y Es gilt: CS - RA - SS01 0, falls | R ( j ) - D | < 0 = ( j) 1 , falls | R − D|≥ 0 | R ( j +1) | = 2(| R ( j ) | − q− j | D |) Kap. 2.1 2.1/10 Division nach Schulmethode | R ( j +1) | = 2(| R ( j) | − q− j | D |) = 2 | R ( j ) | − 2 q− j | D | Daraus folgt: | R ( n) | = 2 | R (n −1) | − 2q −( n−1) | D | = 2 ⋅ (2 | R ( n − 2 ) | − 2 q− ( n − 2 ) | D |) − 2 q− ( n −1) | D | = 4 | R ( n− 2) | − 4q −( n −2) | D | − 2 q−(n −1) | D | . . . =2 |R n ( 0) | − | D | ⋅∑ j =0 2 n − j q− j n−1 2 n | R (0) | = | D | ⋅2 n ⋅ | Q | + | R ( n) | Also insgesamt: | R ( 0) | = | D | ⋅ | Q | + | R ( n) | ⋅2 −n CS - RA - SS01 Kap. 2.1 2.1/11 Restoring und nonrestoring division z Die vorgestellte Division nach der Schulmethode heißt auch „restoring division“, da nach Subtraktion von D mit negativem Resultat der ursprüngliche Partialrest durch Rückaddition wieder „restauriert“ wird. z Die Rückaddition kann jedoch vermieden werden ⇒ „nonrestoring division“: y Idee: Kombiniere die Rückaddition mit der nächsten probeweisen Subtraktion! ( j) y Ist DIFF = | R ( j ) | − | D | negativ, so erfolgt bei der restoring division Rückadition, Linksshift um eine Stelle und wieder probeweise Subtraktion von D. ( j) ( j) y Wegen 2( DIFF + | D |)− | D | = 2 DIFF + | D | kann man dies ersetzen durch Linksshift um eine Stelle und Addition von D. CS - RA - SS01 Kap. 2.1 2.1/12 Nonrestoring division z Bei der nonrestoring division ergibt sich also für DIFF ( j ) = | R ( j ) | − | D | , j = 0,...,n-2: DIFF ( j +1) 2 ⋅ DIFF ( j ) + | D |, falls DIFF ( j ) < 0 = ( j) ( j) 2 ⋅ DIFF − | D | , falls DIFF ≥0 z Rückaddition ist nur nötig zur Berechnung von R(n): R ( n) CS - RA - SS01 2 ⋅ ( DIFF (n −1) + | D |), falls DIFF ( n−1) < 0 = ( n −1) ( n −1) 2 ⋅ DIFF , falls DIFF ≥0 Kap. 2.1 2.1/13 Nonrestoring division: Beispiel restoring division R(0) R(1) R(2) R(3) R(4) 0.101001 +1.001 1.110001 +0.111 0.101001 01.01001 +11.001 00.01101 0.1101 +1.001 1.1111 +0.111 0.1101 1.101 +1.001 0.110 1.10 CS - RA - SS01 nonrestoring division <0, also q0 = 0 0.101001 +1.001 1.110001 <0, also q-2 = 0 1.10001 +0.111 0.01101 0.1101 +1.001 1.1111 ≥ 0, also q-3 = 1 1.111 +0.111 0.110 1.10 ≥ 0, also q-1 = 1 Kap. 2.1 R(0) R(1)-|D| R(2)-|D| R(3)-|D| R(4) 2.1/14 Restoring und nonrestoring division z Restoring und nonrestoring division lassen sich wie die Multiplikation durch kombinatorische und sequentielle Schaltkreise realisieren. z Realisierung durch sequentiellen Schaltkreis: Es genügen y 1 Addierer (O(n) Gatter), Schieberegister mit Größe O(n) y O(n) Takte, in jedem Takt Addition in Zeit O(log n) z Realisierung durch kombinatorischen Schaltkreis: y n Addierer ⇒ O(n2) Gatter y Laufzeit O(n log n) CS - RA - SS01 Kap. 2.1 2.1/15 Division nach Schulmethode z Division nach der Schulmethode führt zu einem kombinatorischen Schaltkreis der Größe O(n2) und Tiefe O(n log n). z Im Gegensatz zur Schultmethode der Multiplikation, bei der die Partialprodukte in beliebiger Reihenfolge addiert werden dürfen, ist die Division nach Schulmethode ein „trial and error“-Prozess. Die Quotienten-Bits werden der Reihe nach bestimmt. z Frage: Kann man Division beschleunigen? CS - RA - SS01 Kap. 2.1 2.1/16 Schnellere Division z Antwort: Ja, man kann Division schneller als bei der Schulmethode durchführen! z Verfahren, die schneller arbeiten als die Schulmethode: y SRT-Division y iterative Verfahren wie x Newton-Verfahren x Goldschmidt-Verfahren CS - RA - SS01 Kap. 2.1 2.1/17 SRT-Division z Benannt nach Sweeney, Robertson und Tocher. z Der Dividierer des Pentium ist ein SRT-Dividierer. z Grundidee: y Arbeite ähnlich wie die nonrestoring division mit n Stufen. y Versuche die Tiefe der einzelnen Stufen zu reduzieren von logarithmischer Tiefe zu konstanter Tiefe. x Verwende dazu ein redundantes Zahlensystem, in dem in konstanter Zeit addiert bzw. subtrahiert werden kann. In einem redundanten Zahlensystem ergibt sich der Wert einer Zahlendarstellung (an−1 ,..., a0 ) zur Basis b wie bekannt über die n −1 gewichtete Summe ∑i =0 aib i , nur sind die einzelnen Ziffern nicht lediglich aus {0,1}, sondern z.B. aus {-2,-1,0,1,2}. (1,−1) ˆ = 1 ⋅ 21 + (−1) ⋅ 20 = 1 Beispiel: 1 0 (0,1) = ˆ 0 ⋅ 2 + 1⋅ 2 = 1 CS - RA - SS01 Kap. 2.1 2.1/18 SRT-Division z Grundidee: y ... y Versuche die Tiefe der einzelnen Stufen zu reduzieren von logarithmischer Tiefe zu konstanter Tiefe. x Verwende dazu ein redundantes Zahlensystem, in dem in konstanter Zeit addiert bzw. subtrahiert werden kann. x Wähle das aktuelle Quotientenbit aus anhand von Präfixen konstanter Länge von Partialrest und Divisor. Intuition: Durch die redundante Darstellung des Quotienten kann man „kleinere Fehler“ bei der Auswahl, die durch die eingeschränkte Sicht auf Partialrest und Divisor verursacht werden, bei der Wahl späterer Quotientenbits wieder ausgleichen. ⇒ Bestimmung der Quotientenbits über eine Tabelle möglich (hier lag der Fehler beim Bug im Pentiumdividierer!) z Resultat: Dividierer mit O(n2) Gattern und Tiefe O(n) CS - RA - SS01 Kap. 2.1 2.1/19 Iterative Verfahren z Die Berechnung einer Approximation für |x|/|z| wird hier zurückgeführt auf die Berechnung des Kehrwertes 1/|z| von |z| und anschließende Multiplikation mit |x|. z Voraussetzung: z = 0.z −1 z− 2...z −n mit z−1 = 1. x = 0.x−1 x− 2 ...x−n mit x−1 = 1. Also : 12 ≤ | x |,| z | < 1 − n +1 z Hat man eine um höchstens 2 abweichende Approximation y = 1. y−1 y− 2 ...y−n von 1/|z| berechnet, so erhält man nach Multiplikation mit |x| < 1 eine Approximation für |x|/|z| ebenfalls − n +1 mit Abweichung von höchstens 2 . z Abschneiden des Ergebnisses der Multiplikation (2n Nachkommastellen!) auf n Nachkommastellen führt insgesamt zu einem Fehler < 2 −n +1 + 2 − n < 2 −n +2. CS - RA - SS01 Kap. 2.1 2.1/20 Newton-Verfahren siehe z.B. I. Wegener: Effiziente Algorithmen für grundlegende Funktionen, Teubner, 1989 z Aufgabe: Berechne aus z = 0.z −1 z− 2...z −n mit z−1 = 1. eine um höchstens 2 −n+1 abweichende Approximation y = 1. y−1 y− 2 ...y−n von 1/|z| z Benutze dazu das bekannte Newtonverfahren zur Nullstellenbestimmung einer konvexen, monoton fallenden Funktion f. −1 z Wähle dazu f ( x) = x − z. Dann ist 1 z die einzige Nullstelle von f. Diese Nullstelle ist mit dem Newtonverfahren zu approximieren. CS - RA - SS01 Kap. 2.1 2.1/21 Newton-Verfahren allgemein f konvex, monoton fallend. Sei die Nullstelle mit N bezeichnet. Es sei ein zi mit 0 < zi ≤ N und f ( zi ) bekannt. Konstruiere die Tangente T(x) , die f im Punkt ( zi , f ( zi )) berührt. T(x) liegt wegen Konvexität unterhalb von f . Schnittpunkt zi+1 von T mit x-Achse liegt im Intervall ( zi , N ] ⇒ bessere Approximation der Nullstelle als zi Steigung von T(x) : f ' ( zi ) Geradengleichung von T(x) : T ( x) = f ' ( zi )( x − zi ) + f ( zi ) Berechne Nullstelle zi+1 von T(x) : 0 = f ' ( zi )( zi +1 − zi ) + f ( zi ) zi+1 = zi − f ( zi ) / f ' ( zi ) Folge der zi ist monoton wachsend, durch N beschränkt ⇒ konvergent − zi+1 = f ( zi ) / f ' ( zi ) und lim( zi − zi +1 ) = 0 gilt i →∞ lim f ( zi ) = 0 und damit lim zi = N . Wegen zi i →∞ CS - RA - SS01 i →∞ Kap. 2.1 2.1/22 Newton-Verfahren für Division −1 Betrachte f ( x) = x − z. Nullstelle ist N = 1 z . Wähle z0 mit 0 < z0 ≤ N = 1 / z wegen 12 ≤ z < 1 als z0 = 1. −2 f ' ( zi ) = − zi , also −1 −2 zi+1 = zi − f ( zi ) / f ' ( zi ) = zi − ( zi − z ) /(− zi ) = 2 zi − zzi 2 Man sieht also: Bei der Berechnung von zi+1 fällt in diesem Spezialfall für f glücklicherweise die Division weg! Pro Approximationsschritt: (1 Shift), 2 Multiplikationen, 1 Subtraktion CS - RA - SS01 Kap. 2.1 2.1/23 Newton-Verfahren: Konvergenzgeschwindigkeit Sei εi = z zi +1 −1 − zi > 0 der Fehler in Schritt i . 2 = 2 zi − zzi und damit Beweis: εi +1 εi +1 = z −1 − zi +1 < εi2 = z −1 − zi+1 = z −1 − (2 zi − zzi2 ) = z −1 − 2( z −1 − εi ) + z ( z −1 − εi ) 2 = z −1 − 2 z −1 + 2εi + zz −2 − 2 zz −1εi + zεi2 = zεi2 < εi2 , da z < 1. Wegen z0 = 1 gilt ε1 = z −1 − z1 = z −1 − (2 z0 − zz02 ) = z −1 − 2 + z −1 und wegen 12 ≤ z < 1 : ε1 = 1 z 4−224 +3z ≤ CS - RA - SS01 maximal für z = 12 Kap. 2.1 1 2 2.1/24 Newton-Verfahren: Konvergenzgeschwindigkeit Wegen εi +1 < ε und ε1 2 i ≤ 1 2 gilt: εi < 2 −2i−1 Nach log n + 1 Schritten gilt dann: εlog n +1 < 2 − 2log n < 2− n Durch Abrunden des Ergebnisses nach log n + 1 Schritten nach der n-ten Nachkommastelle kann man sich zusätzlich einen Fehler von −n maximal 2 einhandeln. Insgesamt hat man nach log n + 1 Schritten das Ergebnis in der gewünschten Genauigkeit (höchstens Abweichung von 2 −n+1 ). Problem: In jedem Schritt werden 2 Multiplikationen ausgeführt, so daß sich die Zahlenlänge pro Schritt verdreifachen kann! CS - RA - SS01 Kap. 2.1 2.1/25 Newton-Verfahren: Verbesserung z Abhilfe: y Beschränke die Zahlenlänge grundsätzlich auf 2n. y Verdopple die Anzahl der Iterationen. z Man kann beweisen, daß man das Ergebnis auch mit dieser Methode in der gewünschten Genauigkeit erhält. z Neuer Algorithmus: y y y ẑ0 = 1 zi+1 = 2 ˆ zi − zˆ zi2 ˆzi+1 = zi +1 abgerundet nach 2n-ter Nachkommastelle. CS - RA - SS01 Kap. 2.1 2.1/26 Newton-Verfahren: Verbesserung Behauptung: Der maximale Fehler nach 2i Iterationen dieses − 2i −1 geänderten Verfahrens ist höchstens 2 (d.h. höchstens so groß wie unsere Abschätzung des maximalen Fehlers des ursprünglichen Verfahrens nach i Iterationen). Beweis: − 2i −1 Führe E (i − 1) = 2 als abkürzende Schreibweise ein. Aufgrund des Rundens nach 2n Nachkommastellen gilt für den Fehlerε̂i des geänderten Verfahrens in Schritt i: εˆi +1 ≤ εˆi2 + 2 − 2n εˆi +2 ≤ εˆi2+1 + 2 −2 n ≤ (εˆi2 + 2 − 2n ) 2 + 2 − 2n ≤ εˆi4 + εˆi2 2 −2 n+1 + 2 −4 n + 2 −2 n CS - RA - SS01 Kap. 2.1 2.1/27 Newton-Verfahren: Verbesserung Beweis: ... εˆi +2 ≤ εˆi2+1 + 2 − 2n ≤ (εˆi2 + 2 −2 n ) 2 + 2 − 2n ≤ εˆi4 + εˆi2 2 −2 n +1 + 2 −4 n + 2 −2 n Setzt man nun nach Induktionsannahme voraus, daß −2( i −1) εˆ2i ≤ E (i − 1) (= 2 = εi ) (gilt für i=1) so ist zu zeigen: ε ˆ2i+2 ≤ E (i) εˆ2i+ 2 ≤ εˆ24i + εˆ22i 2 −2 n+1 + 2 −4 n + 2 −2 n ≤ E(i-1 )4 + E (i − 1) 2 2 − 2n +1 + 2 −4 n + 2 −2 n = E(i)2 + E (i )2 −2 n +1 + 2 − 4n + 2 − 2n − 2n +1 = E(i)( E (i ) + 2123 + { 1 εˆ2i+2 ≤ E (i) CS - RA - SS01 ≤ 12 ≤8 für n≥2 −4 n+ 2i 2123 ≤2− 3 n für i ≤log n ,≤ 641 für n≥ 2 Kap. 2.1 + −2 n +2i 2123 ) ≤2− n für i ≤log n,≤ 14 für n≥ 2 2.1/28 Newton-Verfahren: Verbesserung z Insgesamt hat man nach 2(log n + 1) Schritten ein Ergebnis, das höchstens 2 − n von der exakten Lösung abweicht. z Nach Runden von 2n auf n Nachkommastellen ergibt sich eine Abweichung < 2 −n +1. z Kosten des Newton-Verfahrens unter Verwendung eines WallaceTree-Multiplizierers (O(n2) Gatter, Tiefe O(log n)): y O(n2 log n) Gatter y Tiefe O(log2 n) z Durch eine Verfeinerung des Verfahrens läßt sich dies verbessern zu y O(n2) Gatter y Tiefe O(log2 n) CS - RA - SS01 Kap. 2.1 2.1/29 Goldschmidt-Verfahren siehe z.B. J. Hayes: Comp. Architecture & Organization, 1998 I. Wegener: Effiziente Algorithmen für grundlegende Funktionen, Teubner, 1989 z Das Goldschmidt-Verfahren wurde 1967 von Anderson, Earle, Goldschmidt und Powers eingeführt. z Es wurde eingesetzt im IBM System/360 und wird daher auch als „IBM-Methode“ bezeichnet. z Wie beim Newton-Verfahren wird zunächst zu einer Zahl z = 0.z −1 z −2 ...z− n mit z−1 = 1. eine um höchstens 2 − n +1 abweichende Approximation y = 1. y−1 y− 2 ...y−n von 1/z berechnet, d.h. Kehrwertbildung wird als Hauptproblem isoliert. CS - RA - SS01 Kap. 2.1 2.1/30 Goldschmidt-Verfahren z Idee: Erweitere 1/z so, daß der Nenner ungefähr 1 wird, so daß die approximative Berechnung des Zählers einen Näherungswert für 1/z liefert. z Verfahren: y Berechne x = 1 − z (⇒ 0 < x ≤ 12 ). y Mit der abkürzenden Schreibweise berechne x( j ) = x 2j 1 1 1 1 + x(0) 1 + x(1) 1 + x(k ) Pk ( x) = = L = z 1 − x 1 − x 1 + x(0) 1 + x(1) 1 + x(k ) 1 − x(k + 1) z Der Nenner 1-x(k+1) ergibt sich durch fortgesetzte Anwendung der Binomischen Formel (a+b)(a-b)=a2-b2. z Da x ≤ 12 , ist 1-x(k+1) nach genügend Iterationen nahezu 1. CS - RA - SS01 Kap. 2.1 2.1/31 Goldschmidt-Verfahren z Zu berechnen wäre Pk ( x) = (1 + x(0))(1 + x(1)) ⋅ ... ⋅ (1 + x(k )) 2 j +1 z x( j + 1) = x ergibt sich aus x( j ) = x durch Quadrieren. z Fehler gegenüber dem idealisierten Verfahren ergeben sich ähnlich wie beim Newton-Verfahren durch Abrunden zu Zahlen fester Länge. 2j y Bei Berechnung der x(j) : ⇒ x*(j). y Nach Multiplikation mit 1+ x*(j). z Fehler außerdem durch Annahme 1-x(k+1) = 1. z Auch hier läßt sich zeigen: Trotz Verwendung von Zahlen fester Länge O(n) läßt sich in O(log n) Schritten der Kehrwert in gewünschter Genauigkeit berechnen. z Insgesamt ergibt sich bei Verwendung von Wallace-TreeMultiplizierern ein Schaltkreis mit y O(n 2 log n) Gattern y Tiefe O(log2 n) CS - RA - SS01 Kap. 2.1 2.1/32