Das Auswerten von Determinanten - Universität Bonn
Das Auswerten von Determinanten - Universität Bonn
Das Auswerten von Determinanten - Universität Bonn
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Institut für Informatik I<br />
Theoretische Informatik und formale Methoden<br />
Rheinische Friedrich-Wilhelms-Universität <strong>Bonn</strong><br />
<strong>Das</strong> <strong>Auswerten</strong> <strong>von</strong> <strong>Determinanten</strong><br />
Seminar: Robuste geometrische Algorithmen<br />
<strong>von</strong><br />
Darius Wieczorek<br />
Matrikel-Nr: 1518575<br />
Studiengang Informatik<br />
Sommersemester 2005<br />
Betreuer: Dr. Elmar Langetepe
<strong>Das</strong> <strong>Auswerten</strong> <strong>von</strong> <strong>Determinanten</strong><br />
Inhaltsverzeichnis<br />
I<br />
Seite<br />
Abbildungsverzeichnis..........................................................................................................II<br />
Symbolverzeichnis...............................................................................................................III<br />
1 Einführung..........................................................................................................................1<br />
Was soll bei den <strong>Determinanten</strong> ausgewertet werden?........................................................1<br />
Wozu wird das Vorzeichen einer Determinante benötigt?...................................................1<br />
Warum nur (b+1)-Bit Arithmetik?......................................................................................2<br />
Grundidee des Algorithmus:...............................................................................................2<br />
2 Der zweidimensionale Fall..................................................................................................3<br />
2.1 Voraussetzung für dieses Kapitel..................................................................................3<br />
2.2 Der Algorithmus bei 2x2 <strong>Determinanten</strong>.......................................................................5<br />
3 Der dreidimensionale Fall....................................................................................................6<br />
3.1 Einleitung.....................................................................................................................6<br />
3.2 Der Algorithmus.........................................................................................................11<br />
3.3.1 Vorbereitender Schritt..............................................................................................11<br />
3.3.2 Der erste Schritt.......................................................................................................11<br />
3.3.2.1 Standardisieren der Basis..................................................................................12<br />
3.3.2.2 Vorbereitung auf das lokalisieren <strong>von</strong> u<br />
3<br />
..........................................................13<br />
3.3.2.3 Grobes Lokalisieren <strong>von</strong> u<br />
3<br />
..............................................................................14<br />
3.3.2.4 Bestimmung <strong>von</strong> l<br />
f<br />
..........................................................................................16<br />
3.3.2.5 Lokalisieren der Zelle, die u<br />
3<br />
enthält................................................................17<br />
3.3.2.6 Ende des ersten Schrittes...................................................................................17<br />
3.3.3 Die Arithmetik.........................................................................................................17<br />
3.3.4 Zweiter Schritt: Exponentielle Reduktion.................................................................20<br />
3.3.5 Nicht linear unabhängige Vektoren..........................................................................21<br />
3.3.6 Komplexitätsanalyse des Algorithmus .....................................................................22<br />
Literaturverzeichnis..............................................................................................................22
II<br />
Darius Wieczorek<br />
Abbildungsverzeichnis<br />
Bild 1:<br />
Bild 2:<br />
Bild 3:<br />
Bild 4.1:<br />
Bild 4.2:<br />
Seite<br />
Box B....................................................................................................................8<br />
Ebene H und Box B...............................................................................................9<br />
Gitter L..................................................................................................................9<br />
Vereinigung der Boxen B.................................................................................10<br />
Vereinigung der Boxen B und Ebene H............................................................10<br />
Bild 5.1: Zellen C,C u,C u,C ( u u )<br />
Bild 5.2:<br />
- - - + .........................................................12<br />
0 0 1 0 2 0 1 2<br />
L schneidet eine der acht Kanten......................................................................13<br />
Bild 6: Die Geraden D1 und D<br />
2<br />
.......................................................................................14<br />
Bild 7: Grobes lokalisieren <strong>von</strong> u<br />
3<br />
..................................................................................15<br />
Bild 8a: Darstellung des Falles: ( l - 1 ) ( l -<br />
SP<br />
1<br />
)<br />
l1 - l1 -<br />
Bild 8b: Darstellung des Falles: ( ) SP ( )<br />
c 2 Ï undc 2 + v 2<br />
Ï SP .................................19<br />
c 2 -u Ï undc 2 + v -u<br />
Ï SP ..................19<br />
3 2 3<br />
Bild 9:<br />
Unterteilung der Box B.........................................................................................21
<strong>Das</strong> <strong>Auswerten</strong> <strong>von</strong> <strong>Determinanten</strong><br />
III<br />
Symbolverzeichnis<br />
U bezeichnet den Vektor ( x,y,z )<br />
i<br />
i i i<br />
u<br />
i<br />
bezeichnet die Projektion des Vektors<br />
i<br />
E bezeichnet die Einheitsvektoren, mit iÎ<br />
{ x,y,z}<br />
i<br />
U auf die Horizontalebene mit z=0<br />
H ist eine Ebene, die durch den Ursprung geht und <strong>von</strong> Uund<br />
1<br />
U<br />
2<br />
aufgespannt wird<br />
L<br />
H<br />
Gitter in der Ebene H, dass <strong>von</strong><br />
1 2<br />
LH = lU<br />
1 1+ lU;l,l<br />
2 2 1 2΢<br />
L Gitter in der Horizontalebene das durch u1 undu2erzeugt wird:<br />
L= { lu<br />
1 1+ lu;l,l<br />
2 2 1 2΢<br />
}<br />
C Zelle aus dem Gitter L: ( ) ( )<br />
U und U erzeugt wird: { }<br />
{ 1 1 1 2 2 2 1 2 }<br />
C= l +e u + l +e u,0 £e , e £ 1 mit dem<br />
Referenzpunkt lu 1 1<br />
+ lu 2 2<br />
Å Minkowski Summe<br />
B eine Box der Höhe z1+ z2, die durch die zylindrische Projektion des Parallelogramms<br />
u1Å u2<br />
entlang der z-Achse entsteht<br />
B Vereinigung aller Boxen B<br />
K() bezeichnet Gitterkanten<br />
c() bezeichnet Eckpunkte einer Gitterkante, mit c( l) ÎK( l )<br />
SP<br />
„single precision“
<strong>Das</strong> <strong>Auswerten</strong> <strong>von</strong> <strong>Determinanten</strong> 1<br />
1 Einführung<br />
Was soll bei den <strong>Determinanten</strong> ausgewertet werden?<br />
Es soll das Vorzeichen der <strong>Determinanten</strong> herausgefunden werden, wobei man nur (b+1)-Bit<br />
Arithmetik benutzten darf. Dabei steht b für die Anzahl der Bits aus denen der größte Eintrag<br />
der Determinante besteht. Bei den <strong>Determinanten</strong> handelt es sich um 2x2 oder 3x3<br />
<strong>Determinanten</strong>.<br />
Wozu wird das Vorzeichen einer Determinante benötigt?<br />
Es gibt viele geometrische Algorithmen, bei denen das Vorzeichen der <strong>Determinanten</strong><br />
entscheidet wie der Algorithmus weiter verfahren soll, z.B. „which_side“<br />
(„Orientierungstest“).<br />
Im Zweidimensionalen: Seien A= ( A,A<br />
x y)<br />
und B ( B,B<br />
x y)<br />
bilden und C ( C,C<br />
x y)<br />
= zwei Punkte, die eine Gerade<br />
= ein weiterer Punkt. Um zu bestimmen, auf welcher Seite der<br />
Geraden AB C liegt, muss man das Vorzeichen der Determinante D ausrechnen.<br />
Mit<br />
A -C A -C<br />
D=<br />
B - C B - C<br />
x x y y<br />
x x y y<br />
Ist die Determinante D negativ, so liegt C rechts <strong>von</strong> AB . Falls D positiv ist, liegt C links <strong>von</strong><br />
AB , ansonsten (D = 0) existiert eine Gerade, auf der alle drei Punkte liegen.<br />
Es sei gesagt, dass dieser Test auch auf den d-Dimensionalen Raum angewandt werden kann.<br />
Dabei bilden die Punkte A,...,A<br />
1 deine Hyperebene und C sei wieder der zu suchende Punkt.<br />
Dann gibt das Vorzeichen der Determinante<br />
D=<br />
A<br />
A<br />
1<br />
d<br />
-C<br />
M<br />
- C<br />
an, ob C zu der Hyperebene oder zu einem der Halbräume gehört.
2 Darius Wieczorek<br />
Warum nur (b+1)-Bit Arithmetik?<br />
Die Zielsetzung dieses Algorithmus ist es, so wenige Bits wie möglich zu verwenden. Dies<br />
impliziert, dass der Algorithmus keine Zahlen miteinander multipliziert und daher auch keine<br />
Ergebnisse der <strong>Determinanten</strong> liefert.<br />
Grundidee des Algorithmus:<br />
Sollte das Vorzeichen der Determinante nicht direkt ermittelt werden können, so wird die<br />
ursprüngliche Matrix durch eine Matrix ersetzt, deren Determinante gleich ist, aber deren<br />
Einträge eindeutig kleiner sind. Dadurch wir sichergestellt, dass der Algorithmus terminiert.<br />
Als Hilfsmittel wird die Standard-Zeilenaddition verwendet, bei der zu einer Zeile eine<br />
Linearkombination einer anderen Zeile hinzuaddiert wird.<br />
Die Ausführungen in dieser Arbeit basieren auf dem Artikel Evaluating signs of determinants<br />
using single-precision arithmetic <strong>von</strong> Avnaim et al.
<strong>Das</strong> <strong>Auswerten</strong> <strong>von</strong> <strong>Determinanten</strong> 3<br />
2 Der zweidimensionale Fall<br />
Sei D =<br />
x<br />
x<br />
y<br />
1 1<br />
y<br />
2 2<br />
eine 2x2 Determinante deren Einträge b-Bit Integer Zahlen sind.<br />
2.1 Voraussetzung für dieses Kapitel<br />
· Die Einträge der Determinante sind immer ungleich Null. Wäre ein Eintrag gleich<br />
Null, so würde sich die Determinante auf das Produkt zweier Zahlen reduzieren und<br />
man bräuchte nur noch die Vorzeichen der beiden Zahlen zu vergleichen um das<br />
Vorzeichen der Determinante zu erhalten.<br />
· O.B.d.A soll gelten, dass alle Einträge der Determinante positiv sind. Deshalb wird<br />
eine Fallunterscheidung gemacht, um zu sehen inwiefern sich das Vorzeichen der<br />
<strong>Determinanten</strong> verändert, wenn man alle Einträge positiv macht. Hierbei wurden nur<br />
die Vorzeichen der Einträge verwendet, da die Größe der Einträge keine<br />
Auswirkung auf das Vorzeichen der Determinante hat. Hierbei soll eine<br />
Determinante mit einem positiven Vorzeichen und mit positiven Einträgen, wie folgt<br />
+ + Þ + * + - + * + = ( + ) - ( + )<br />
aussehen: ( ) ( )<br />
+ +<br />
o Ein Eintrag ist negativ:<br />
+ - + +<br />
• , Þ ( + * + ) - ( + * - ) Þ<br />
+ + - +<br />
Determinante ist positiv.<br />
- + + +<br />
• , Þ ( - * + ) - ( + * + ) Þ<br />
+ + + -<br />
Determinante ist negativ.<br />
<strong>Das</strong> Vorzeichen der<br />
<strong>Das</strong> Vorzeichen der<br />
In allen vier Fällen kann nicht bestimmt werden wie sich das Vorzeichen der<br />
Determinante verändert. Dies ist auch nicht nötig, da das Vorzeichen der<br />
Determinante sofort bestimmt werden kann.<br />
o Zwei Einträge sind negativ:<br />
+ - - + + + - -<br />
, , , Þ ( + * - ) - ( + * - ) = ( - ) - ( - )<br />
• + - - + - - + +<br />
=- [( + )-( + )] Þ<strong>Das</strong> Vorzeichen wechselt<br />
+ -<br />
• Þ ( + * + ) - ( - * - ) = ( + ) - ( + ) Þ<br />
- +<br />
nicht.<br />
<strong>Das</strong> Vorzeichen ändert sich<br />
- +<br />
• Þ ( - * - ) - ( + * + ) = ( + ) - ( + ) Þ<br />
+ -<br />
nicht.<br />
<strong>Das</strong> Vorzeichen ändert sich
4 Darius Wieczorek<br />
o Drei Einträge sind negativ:<br />
+ - - -<br />
• , Þ ( + * - ) - ( - * - ) = ( - ) - ( + ) Þ<br />
- - - +<br />
Determinante ist negativ.<br />
<strong>Das</strong> Vorzeichen der<br />
- - - +<br />
• , Þ ( - * - ) - ( + * - ) = ( + ) - ( - ) Þ<br />
+ - - -<br />
Determinante ist positiv.<br />
<strong>Das</strong> Vorzeichen der<br />
Wie im Fall mit einem negativen Eintrag, kann auch hier nicht bestimmt<br />
werden wie sich das Vorzeichen der Determinante verändert. Dies ist ebenfalls<br />
nicht nötig, da das Vorzeichen der Determinante auch hier sofort bestimmt<br />
werden kann.<br />
o Alle Einträge sind negativ:<br />
- -<br />
• Þ<br />
- -<br />
( - * - ) - ( - * - ) = ( + ) - ( + ) Þ<br />
nicht.<br />
<strong>Das</strong> Vorzeichen ändert sich<br />
Es wurde gezeigt, dass man alle Einträge einer 2x2 Determinante positiv machen kann<br />
und sich dabei nur in wenigen Fällen das Vorzeichen der Determinante verändert.<br />
Damit ist die oben genante Voraussetzung erfüllt.<br />
· O.B.d.A soll gelten, dass x2 ³ x1 und y2 ³ y1. Deshalb muss auch hier eine<br />
Fallunterscheidung gemacht werden, inwiefern das Vertauschen <strong>von</strong> Einträgen einen<br />
Einfluss auf das Vorzeichen der Determinante hat. In den meisten Fällen, kann aber<br />
das Vorzeichen der Determinante sofort herausgefunden werden, so dass die<br />
Auswirkungen der Vertauschungen nicht mehr wichtig sind.<br />
o Falls x2 > x,y<br />
1 2<br />
£ y1 oder x2 ³ x,y<br />
1 2<br />
< y1<br />
Þ xy < xy<br />
1 2 2 1<br />
Þ xy - xy < 0<br />
Þ D<<br />
0<br />
1 2 2 1<br />
o Fallsx2 < x,y<br />
1 2<br />
³ y1 oder x2 £ x,y<br />
1 2<br />
> y1<br />
Þ xy > xy<br />
1 2 2 1<br />
Þ xy - xy > 0<br />
Þ D><br />
0<br />
1 2 2 1<br />
o In den beiden anderen Fällen:<br />
x ³ x ,y ³ y und<br />
2 1 2 1<br />
x £ x ,y £ y<br />
2 1 2 1
<strong>Das</strong> <strong>Auswerten</strong> <strong>von</strong> <strong>Determinanten</strong> 5<br />
kann man das Vorzeichen noch nicht herausfinden, aber man kann o.B.d.A.<br />
voraussetzen, dass gilt: x2 ³ x1 und y2 ³ y1<br />
Im ersten Fall muss nicht verändert werden. Im zweiten Fall müssen die Zeilen<br />
vertauscht werden, wodurch sich das Vorzeichen der Determinante verändert.<br />
2.2 Der Algorithmus bei 2x2 <strong>Determinanten</strong><br />
Unter den oben genannten Annahmen können wir schreiben:<br />
und definieren:<br />
Dann ist<br />
x = xk + x mit k Î N und 0 £ x < x<br />
2 1 1 r 1 r 1<br />
y = y - ky<br />
r<br />
2 1 1<br />
x y x y x y<br />
D = = =<br />
x y x - kx y - ky x y<br />
1 1 1 1 1 1<br />
2 2 2 1 1 2 1 1 r r<br />
· Falls<br />
y<br />
1<br />
b<br />
2<br />
> ist, kann y<br />
r<br />
nicht berechnet werden. In diesem Fall ist y<br />
r<br />
jedoch<br />
k<br />
1<br />
negativ, daher muss D < 0 sein (da x,x<br />
1 r<br />
und y<br />
1<br />
stets positiv sind).<br />
· Falls y<br />
r<br />
berechnet werden kann, aber außerhalb des Intervalls [0,y]<br />
1<br />
liegt, kann das<br />
Vorzeichen <strong>von</strong> D bestimmt werden:<br />
o<br />
yr<br />
< 0 Þ D<<br />
0<br />
o yr > y1<br />
Þ D><br />
0<br />
· Außerdem direkt bestimmt werden kann das Vorzeichen in den folgenden Fällen:<br />
x<br />
y<br />
x < und y > Þ D><br />
0<br />
2 2<br />
1 1<br />
o<br />
r<br />
r<br />
x<br />
y<br />
x > und y < Þ D<<br />
0<br />
2 2<br />
1 1<br />
o<br />
r<br />
r<br />
· In allen anderen Fällen wird die Determinante D wie folgt neu gesetzt:<br />
x1<br />
y1<br />
o Falls xr<br />
< und yr<br />
< , dann ist<br />
2<br />
2<br />
x1<br />
y1<br />
o Falls xr<br />
> und yr<br />
> , dann ist<br />
2 2<br />
x y<br />
D = x y<br />
1 1<br />
r<br />
x<br />
D 1 1<br />
= x 1- x y y<br />
r 1-<br />
r<br />
Sollte der Algorithmus nicht bereits bei der ersten Wiederholung das Vorzeichen der<br />
Determinante berechnen, so erhalten wir eine neue Determinante. Dabei sind die Werte in der<br />
zweiten Zeile der neuen Determinante jeweils höchstens halb so groß wie die in der<br />
r<br />
y
6 Darius Wieczorek<br />
vorherigen Determinante. Dieser Vorgang wird so lange wiederholt, bis das Vorzeichen<br />
berechnet ist.<br />
Zusammenfassend:<br />
In jeder Wiederholung werden nur Vergleiche bzw. Divisionen mit Rest gemacht. Die Anzahl<br />
der Wiederholungen ist nach oben hin beschränkt durch den Logarithmus des größten<br />
Eintrags der Determinante, d.h. durch die Anzahl b der Bits, die man benötigt um den größten<br />
Wert der Determinante darzustellen. Hieraus ergibt sich das folgende Theorem:<br />
Theorem 1:<br />
Sei D eine 2x2 Determinante mit b-Bit Integer Einträgen. Dann existiert ein Algorithmus, der<br />
das Vorzeichen <strong>von</strong> D mit nur b-Bit Arithmetik berechnet. Der Algorithmus erfordert<br />
höchstens b-Wiederholungen. Jede Wiederholung bringt O(1) Additionen / Subtraktionen,<br />
Vergleiche und Divisionen mit Rest mit sich.<br />
3 Der dreidimensionale Fall<br />
3.1 Einleitung<br />
Sei<br />
x y z<br />
1 1 1<br />
D= x y z eine 3x3 Determinante, deren Einträge b-Bit Integer Zahlen sind.<br />
2 2 2<br />
x y z<br />
3 3 3<br />
Der Vektor (x<br />
i,y,z) i i<br />
wird mit U<br />
i<br />
bezeichnet und die Einheitsvektoren entlang der drei<br />
Achsen werden mit E,E<br />
x y<br />
und E<br />
z<br />
bezeichnet. Die z-Richtung wird Vertikale genannt und u<br />
bezeichnet die vertikale Projektion des Vektors U auf die Horizontalebene mit z = 0.<br />
O.B.d.A soll gelten, dass alle z<br />
i<br />
nicht negativ sind und dass z3 > z,z<br />
1 2<br />
ist.<br />
· Damit ein negatives z<br />
i<br />
positiv wird, muss die i-te Zeile der Determinante mit (-1)<br />
multipliziert werden. Dies hat zur Folge, dass sich das Vorzeichen der Determinante<br />
verändert.<br />
· Damit z<br />
3<br />
größer wird als z1 und z<br />
2<br />
muss man gegebenenfalls eine Zeilenvertauschung<br />
vornehmen. Diese hat ebenfalls zur Folge, dass sich das Vorzeichen<br />
der Determinante verändert.<br />
· Falls die Summe aus der Anzahl der negativen z<br />
i<br />
Einträge und der Anzahl<br />
benötigter Zeilenvertauschungen ungerade ist, verändert sich das Vorzeichen der<br />
Determinante, andernfalls nicht.<br />
Hier und in den Abschnitten 3.1-3.3.4 wird angenommen, dass die Projektionen u,u<br />
1 2<br />
<strong>von</strong><br />
U,U<br />
1 2<br />
nicht colineare Vektoren sind (z.B. die Vektoren sind linear unabhängig). Daraus geht<br />
hervor, dass die drei Vektoren U,U<br />
1 2<br />
und E<br />
z<br />
linear unabhängig sind, und man kann U<br />
3<br />
ersetzen durch
<strong>Das</strong> <strong>Auswerten</strong> <strong>von</strong> <strong>Determinanten</strong> 7<br />
mit k1, k2,<br />
kΡ<br />
3<br />
.<br />
Daraus folgt, dass<br />
U3 =k<br />
1U1+k 2U2 +k<br />
3Ez<br />
(1)<br />
x y z<br />
1 1 1<br />
D=<br />
x y z<br />
2 2 2<br />
x3 y3 z<br />
{<br />
3<br />
*<br />
(1)<br />
=<br />
x y z<br />
1 1 1<br />
x y z<br />
2 2 2<br />
k x +k x +k E k y +k y +k E k z +k z +k E<br />
1 1 2 2 3 z 1 1 2 2 3 z 1 1 2 2 3 z<br />
=<br />
x y z<br />
1 1 1<br />
x y z<br />
2 2 2<br />
k x +k x k y +k y k z +k z +k<br />
1442443<br />
-k U; -k U<br />
*<br />
1 1 2 2 1 1 2 2 1 1 2 2 3 1 1 2 2<br />
=<br />
x y z<br />
1 1 1<br />
x y z<br />
2 2 2<br />
0 0 k : k<br />
3 3<br />
=k<br />
x y z<br />
1 1 1<br />
3 2 2 2<br />
( )<br />
x y z 2<br />
0 0 1<br />
Daraus folgt wiederum: Falls das Vorzeichen <strong>von</strong> k<br />
3<br />
bekannt ist, reduziert sich das Problem<br />
auf eine 2x2 Determinante:<br />
x y z<br />
1 1 1<br />
x y z = xy - xy=<br />
2 2 2 1 2 2 1<br />
0 0 1<br />
x<br />
x<br />
y<br />
1 1<br />
y<br />
2 2<br />
Nun wird gezeigt, in welchen Fällen das Vorzeichen <strong>von</strong> k<br />
3<br />
festgestellt werden kann:
8 Darius Wieczorek<br />
Aus den oberen Umformungen entnehmen wir die Gleichung (siehe *):<br />
z3 =k<br />
3+k 1z1+k2z2 Þ k<br />
3<br />
= z3-k1z1-k 2z2<br />
(3)<br />
Hierbei sei k<br />
1<br />
= k<br />
1+r1, k<br />
2<br />
= k<br />
2<br />
+r<br />
2, mit k<br />
1<br />
= êëk 1úû,k 2<br />
= êëk 2úû<br />
und 0 £r1, r<br />
2<br />
< 1.<br />
Wir definieren: R = U3-kU 1 1-<br />
kU<br />
2 2<br />
Indem man R bezüglich der z-Komponente ausrechnet, erhält man mit Hilfe <strong>von</strong> (1):<br />
z =k U +k U +k E -kU 144424443<br />
-kU<br />
=<br />
U<br />
R 1 1 2 2 3 z 1 1 2 2<br />
3<br />
= (k +r )z + (k +r )z +k -kz -kz<br />
1 1 1 2 2 2 3 1 1 2 2<br />
=r z +r z +k<br />
1 1 2 2 3<br />
Falls zR<br />
< 0 ist, dann ist k<br />
3<br />
< 0 und falls zR > z1+ z2<br />
ist, dann ist k<br />
3<br />
> 0 . Ansonsten liegt R<br />
im Durchschnitt B der zylindrischen Projektion des Parallelogramms u1Å u2<br />
entlang der z-<br />
Achse mit 0£ zW £ z1+ z2<br />
(siehe Bild 1).<br />
Bild 1: Box B<br />
In diesem Fall ist das Vorzeichen <strong>von</strong> k<br />
3<br />
immer noch unbekannt, aber man kann eine neue<br />
Determinante aufstellen, bei der die Zeile mit dem höchsten z-Eintrag durch R ersetzt wird:<br />
x y z<br />
1 1 1<br />
D= x y z (4)<br />
2 2 2<br />
x y z<br />
R R R
<strong>Das</strong> <strong>Auswerten</strong> <strong>von</strong> <strong>Determinanten</strong> 9<br />
Geometrische Interpretation der bislang verwendeten Definitionen:<br />
Sei H die Ebene, die durch den Ursprung geht und <strong>von</strong> Uund<br />
1<br />
U<br />
2<br />
aufgespannt wird. Die<br />
Vektoren Uund<br />
1<br />
U<br />
2<br />
erzeugen in der Ebene H ein Gitter LH = { lU<br />
1 1+ lU,l,l<br />
2 2 1 2΢ } (siehe<br />
Bild 2). L<br />
H<br />
wird auf das Gitter L der Horizontalebene projiziert, das durch u1 undu<br />
2<br />
C= l +e u + l +e u,0 £e , e £ 1 <strong>von</strong> L<br />
{ 1 1 1 2 2 2 1 2 }<br />
aufgespannt wird (siehe Bild 3). Jeder Zelle ( ) ( )<br />
wird ein Referenzpunkt lu 1 1<br />
+ lu 2 2<br />
zugeordnet. Insbesondere ist ku<br />
1 1+ ku<br />
2 2der Referenzpunkt<br />
der Zelle L die u3<br />
enthält. Des Weiteren wird jeder Zelle C mit dem Referenzpunkt lu 1 1<br />
+ lu 2 2<br />
eine Box zugeordnet. Die Box ist eine Kopie <strong>von</strong> der Box B, jedoch wird sie durch den<br />
Vektor lU 1 1<br />
+ lU 2 2<br />
abgebildet. Sei B die Vereinigung aller Boxen, dann enthält B die Ebene<br />
H und man kann B als einen Näherungswert <strong>von</strong> H ansehen (siehe Bild 4.1 und 4.2).<br />
Bild 2: Ebene H und Box B<br />
Bild 3: Gitter L
10 Darius Wieczorek<br />
Bild 4.1:<br />
Vereinigung der Boxen B<br />
Bild 4.2:<br />
Vereinigung der Boxen B und Ebene H<br />
· Falls U<br />
3<br />
sich oberhalb <strong>von</strong> B befindet ist k<br />
3<br />
positiv,<br />
· falls U<br />
3<br />
sich unterhalb <strong>von</strong> B befindet ist k<br />
3<br />
negativ oder<br />
· ansonsten kann U<br />
3<br />
durch einen Vektor aus B ersetzt werden.
<strong>Das</strong> <strong>Auswerten</strong> <strong>von</strong> <strong>Determinanten</strong> 11<br />
3.2 Der Algorithmus<br />
Der Algorithmus benötigt höchstens O(b) Wiederholungen, wobei jede Wiederholung aus<br />
drei Schritten besteht.<br />
· Vorbereitender Schritt (siehe Unterpunkt 3.3): Hierbei werden einige einfache Fälle<br />
sofort gelöst und die Determinante wird für weitere Berechnungen vorbereitet.<br />
· Erster Schritt (siehe Unterpunkt 3.4): Der Algorithmus stellt fest, ob U<br />
3<br />
sich<br />
oberhalb, unterhalb oder innerhalb <strong>von</strong> B befindet. In den beiden ersten Fällen wird<br />
die 3x3 Determinante auf eine 2x2 Determinante reduziert und <strong>von</strong> dem zweidimensionalen<br />
Algorithmus weiter berechnet. Im dritten Fall wird U<br />
3<br />
in eine<br />
Richtung die parallel zu H ist abgebildet, damit gilt R = U3 -kU 1 1-kU 2 2<br />
Î B.<br />
Obwohl R innerhalb <strong>von</strong> B liegt kann man nicht ohne weiteres mit den Vektoren<br />
U,U,R weiter rechnen, da die Binärdarstellung <strong>von</strong> R größer als (b+1)-Bits sein<br />
( )<br />
1 2<br />
kann. Außerdem erfüllt z<br />
R<br />
nur die Bedingung 0£ zR £ z1+ z2<br />
nicht aber, dass<br />
z<br />
< z ist.<br />
R 3<br />
· Zweiter Schritt (siehe Unterpunkt 3.6): In diesem Schritt findet der Algorithmus<br />
'<br />
entweder das Vorzeichen <strong>von</strong> k<br />
3<br />
oder einen Vektor R = R+q 1U1+q 2U2<br />
mit<br />
( q1, q2Î- { 1,0, + 1}) . Die Kodierlänge der x und y Komponenten ist dabei nicht<br />
z<br />
länger als b und die z Komponente ist kleiner als<br />
3<br />
2 .<br />
Nach höchstens drei Wiederholungen ist eine Halbierung der größten z-Komponente<br />
erreicht. Daraus folgt, dass man insgesamt höchstens 3b Wiederholungen benötigt, um<br />
herauszufinden, dass D=0 ist, oder um eine 2x2 Determinante zu erhalten.<br />
3.3.1 Vorbereitender Schritt<br />
Als erstes werden die Zeilen mit negativen z-Einträgen mit (-1) multipliziert. Falls die Anzahl<br />
der negativen z-Einträge ungerade ist ändert sich das Vorzeichen. Als nächstes werden die<br />
Zeilen so vertauscht, dass U<br />
3<br />
die größte z-Komponente besitzt. Hierbei gilt ebenfalls: falls<br />
die Anzahl der Vertauschungen ungerade ist ändert sich das Vorzeichen <strong>von</strong> D.<br />
Falls nach den Umformungen der Determinante alle drei Unterdeterminanten<br />
x1 y1 x2 y2<br />
x3 y3<br />
, und<br />
x y x y x y<br />
2 2 3 3<br />
1 1<br />
positiv (negativ) sind, dann ist auch D positiv (negativ).<br />
3.3.2 Der erste Schritt<br />
In jeder Wiederholung wird als erstes entweder das Vorzeichen <strong>von</strong> k<br />
3<br />
bestimmt, oder falls<br />
U<br />
3<br />
in B liegt, wird der Vektor R = U3-kU 1 1- kU<br />
2 2<br />
bestimmt.
12 Darius Wieczorek<br />
Weil der Vektor U<br />
3<br />
b-Bit Integer Komponenten enthält, sind die Koordinaten der Punkte aus<br />
b<br />
dem Liniensegment 0U3 und0u<br />
3<br />
stets kleiner als 2 . Um R auszurechnen wird eine<br />
Teilmenge <strong>von</strong> O(b) Kanten, die <strong>von</strong> 0u3<br />
geschnitten werden, aus dem Gitter L überprüft. Für<br />
jede dieser Kanten wird die entsprechende Kante aus dem Gitter L<br />
H<br />
betrachtet. Falls die z-<br />
Koordinate aller betrachteten Kanten innerhalb der Grenzen der (b+1)-Arithmetik bleibt, dann<br />
endet die Prozedur sobald die Zelle, die u<br />
3<br />
beinhaltet, gefunden wird. Falls aber eine der<br />
betrachteten Kanten aus L<br />
H<br />
zu einer Box gehört deren z-Bereich die (b+1)-Bit Darstellung<br />
vollkommen übersteigt, dann erstreckt sich der z-Bereich dieser Kante vollkommen außerhalb<br />
der Grenzen der b-Bit Darstellung. In diesem Fall kann das Vorzeichen <strong>von</strong> k<br />
3<br />
leicht<br />
bestimmt werden und die Berechnung <strong>von</strong> R wird angehalten.<br />
3.3.2.1 Standardisieren der Basis<br />
Die Grenze des Parallelogramms, das sich aus den vier Zellen C,C<br />
0 0<br />
-u,C 1 0<br />
- u,<br />
2<br />
C0 -( u1+ u2)<br />
zusammensetzt (mit C0 = u1Å u2), besteht aus acht Zell-Kanten (in den<br />
folgenden Zeichnungen werden die Kanten mit *1 bis *8 bezeichnet. Siehe Bild 5.1 und 5.2):<br />
Bild 5.1: Zellen C,C -u,C -u,C -( u + u )<br />
0 0 1 0 2 0 1 2<br />
Sei L eine Halbgerade, die in 0 ihren Ursprung hat und u3<br />
enthält. Um herauszufinden <strong>von</strong><br />
welcher der acht Kanten L geschnitten wird, wird eine gradlinige dreistufige binäre Suche<br />
ausgeführt („straightforward tree-step binary search“). Die Suche sieht wie folgt aus:<br />
· Es werden die Vorzeichen <strong>von</strong> vier 2x2 <strong>Determinanten</strong> ausgerechnet, wobei die<br />
<strong>Determinanten</strong> die Form<br />
u 3<br />
w mit w { u,u,u }<br />
1 2 1<br />
u,u<br />
2 1<br />
u2<br />
Î + - haben.<br />
· Anhand der Vorzeichen der <strong>Determinanten</strong> lässt sich die Kante eindeutig bestimmen<br />
<strong>von</strong> der L geschnitten wird.<br />
o Beispiel: Falls alle vier <strong>Determinanten</strong> negativ sind und u,u<br />
1 2<br />
stets positive<br />
Einträge haben, dann kann L nur die Kante *8 schneiden (siehe Bild 5.2).
<strong>Das</strong> <strong>Auswerten</strong> <strong>von</strong> <strong>Determinanten</strong> 13<br />
Bild 5.2:<br />
L schneidet eine der acht Kanten<br />
· Auf diese Weise lässt sich ebenfalls die Zelle bestimmen die <strong>von</strong> L geschnitten wird.<br />
'<br />
Sei C C eu eu e,e Î 0,1 eine solche Zelle.<br />
= - - mit { }<br />
0 0 1 1 2 2<br />
1 2<br />
· Falls eine der <strong>Determinanten</strong> 0 ist, dann ist entweder k1 = k2<br />
oder eines der k´s=0,<br />
i<br />
in beiden Fällen kann man R wie im zweidimensionalen Fall ausrechnen.<br />
x y z x y z x y z<br />
1 1 1 1 1 1 1 1 1<br />
x y z = x y z = x y z<br />
2 2 2 2 2 2 2 2 2<br />
x y z x -kx -kx y -ky -ky z -kz -kz x y z<br />
3 3 3 3 1 1 2 2 3 1 1 2 2 3 1 1 2 2 R R R<br />
Damit der Algorithmus unabhängig <strong>von</strong> den Vorzeichen <strong>von</strong> u1 undu<br />
2<br />
fortfahren kann, wird<br />
die ursprüngliche Basis ( ) 1 2<br />
u,u durch die Basis ( v,v ) , mit ( )<br />
1 2<br />
v = - 2e + 1u,undi=<br />
1,2<br />
i i i<br />
ersetzt. c<br />
u<br />
(bzw.c)<br />
v<br />
bezeichnet hierbei den Referenzpunkt der Zelle C, aus dem Gitter L, die<br />
u,u bzw. v,v als Basisvektor <strong>von</strong> C verwendet wird. Daraus<br />
u beinhaltet, falls ( ) ( )<br />
3<br />
( )<br />
1 2 1 2<br />
ergibt sich die folgende Gleichung:<br />
Sei<br />
cu = cv + eu<br />
1 1+ eu<br />
2 2<br />
(5)<br />
D,i<br />
i<br />
= 1,2 die horizontale Gerade die v<br />
i<br />
enthält.<br />
3.3.2.2 Vorbereitung auf das lokalisieren <strong>von</strong> u<br />
3<br />
'<br />
Als nächstes muss getestet werden, ob u<br />
3<br />
zu der Zelle C<br />
0<br />
gehört, oder nicht. Dieser Test<br />
beinhaltet das Lokalisieren <strong>von</strong> u<br />
3<br />
mit Hilfe der Kante, die <strong>von</strong> der Halbgeraden L<br />
geschnitten wird. Will man u<br />
3<br />
lokalisieren, so muss man entweder das Vorzeichen <strong>von</strong>
14 Darius Wieczorek<br />
u<br />
v<br />
1<br />
- v<br />
3 2<br />
mit Bezug auf die Gerade D1+ v2<br />
oder das Vorzeichen <strong>von</strong><br />
u<br />
- v<br />
3 1<br />
v<br />
2<br />
mit Bezug auf<br />
die Gerade D2 + v1<br />
berechnen. Dabei enthält die Gerade D1+ v2 bzw. D2 + v1<br />
die Kante, die<br />
<strong>von</strong> der Halbgeraden L geschnitten wird. Falls das Vorzeichen der Determinante negativ ist,<br />
'<br />
'<br />
' '<br />
dann gilt u3Î C0. Falls u<br />
3<br />
sich innerhalb der Zelle C<br />
0<br />
befindet, dann gilt k1 = k2<br />
= 0und<br />
man leitet c<br />
u<br />
und den dazugehörigen Punkt C<br />
u<br />
aus L<br />
H<br />
mit Hilfe <strong>von</strong> (5) her. Dann wird<br />
R = U3<br />
- C berechnet und man fährt mit dem Schritt 3.3.2.6 fort. Ansonsten, wird mit dem<br />
Schritt 3.3.2.3 fortgefahren.<br />
3.3.2.3 Grobes Lokalisieren <strong>von</strong> u<br />
3<br />
.<br />
Bild 6: Die Geraden D1 und D<br />
2<br />
Sei K(1) die erste Gittergerade, die <strong>von</strong> 0u<br />
3<br />
durchquert wird. O.B.d.A wird vorausgesetzt,<br />
dass jetzt und später K1 ( ) = D2 + v1<br />
(siehe Bild 6). Für lÎ¥ , bezeichnen wir mit K( l ) die<br />
D v<br />
0u geschnitten wird und zu ( )<br />
Linie<br />
2<br />
+l<br />
1. Die Eckpunkte der Kante, die <strong>von</strong><br />
3<br />
werden mit c( ) undc( ) v2<br />
'<br />
'<br />
lÎ ¥ ,mit0£l
<strong>Das</strong> <strong>Auswerten</strong> <strong>von</strong> <strong>Determinanten</strong> 15<br />
l1<br />
1 Falls der Punkt c( 2 - l 1<br />
) errechnet wurde, dann schneidet 0u<br />
3<br />
die Gerade K( 2 -<br />
)<br />
l1 - l1 -<br />
' ''<br />
zwischen c( 2 ) undc( 2 ) + v 2<br />
. Seien zundz die z-Koordinaten der zwei<br />
korrespondierenden Punkte des Gitters<br />
• Falls<br />
• Falls<br />
L<br />
H<br />
, mit<br />
' ''<br />
zundz negativ sind, dann ist k<br />
3<br />
> 0<br />
' ''<br />
zundz jeweils größer sind als<br />
' ''<br />
z z z 2<br />
- = .<br />
b<br />
2 , dann ist k<br />
3<br />
< 0<br />
In diesen Fällen ist das Vorzeichen <strong>von</strong> D bekannt und der Algorithmus hält an. In den<br />
anderen Fällen sind die Kodierlängen der z-Koordinaten höchstens (b+1)-Bits lang und<br />
der Algorithmus kann fortfahren.<br />
2 Als nächstes wird durch das Berechnen des Vorzeichens <strong>von</strong><br />
l<br />
ob die Gerade K( 2 ) <strong>von</strong> 0u<br />
3<br />
geschnitten wird. Man beachte dabei, dass<br />
l-1<br />
l<br />
2c( 2 ) Î K( 2 ) ist.<br />
· Falls 0<br />
l<br />
D< ist, dann wird ( )<br />
Schritt 3.3.2.4 fort.<br />
c 2<br />
· Ansonsten wird ( l<br />
)<br />
l 1<br />
3 Weil K( 2 - ) <strong>von</strong><br />
3<br />
l-1<br />
( )<br />
u3<br />
-2c 2<br />
D= bestimmt,<br />
v<br />
K 2 <strong>von</strong> 0u3<br />
nicht geschnitten und man fährt mit<br />
, so wie in Teilschritt 3 beschrieben, berechnet.<br />
l1 - l1 -<br />
0u zwischen c( 2 ) undc( 2 ) + v 2<br />
geschnitten wird, muss auch<br />
l<br />
l-1 l-1<br />
K( 2 ) <strong>von</strong> 0u<br />
3<br />
zwischen ( ) ( )<br />
( l<br />
l 1<br />
c 2 ) entweder 2c( 2 - l-1<br />
) , oder 2c( 2 ) + v 2<br />
sein (siehe Bild 7). Welcher der beiden<br />
Kandidaten letztendlich c( 2 l<br />
) ist, kann durch das Berechnen des Vorzeichens der 2x2<br />
Determinante<br />
u<br />
3<br />
l-1<br />
( )<br />
2c 2<br />
+ v<br />
2c 2 und2c 2 + 2v 2<br />
geschnitten werden. Folglich muss<br />
2<br />
herausgefunden werden.<br />
Falls im Teilschritt 2 herausgefunden wird, dass<br />
3<br />
u zu der Geraden (<br />
l<br />
)<br />
l<br />
l1<br />
u zwischen K( 2 ) undK( 2 + ) . Daher wird<br />
f<br />
l<br />
2<br />
2<br />
K 2 gehört ( D= 0 ),<br />
dann befindet sich<br />
3<br />
l = gesetzt und es geht<br />
mit dem Schritt 3.3.2.5 weiter. Ansonsten wird die Suche in den Teilschritten 1-3 fortgesetzt.<br />
Bild 7: Grobes lokalisieren <strong>von</strong> u<br />
3
16 Darius Wieczorek<br />
3.3.2.4 Bestimmung <strong>von</strong> l<br />
f<br />
Es wird vorausgesetzt, dass<br />
3<br />
k<br />
k 1<br />
0u die Gerade K( 2 ) aber nicht die Gerade K( 2 +<br />
)<br />
schneidet.<br />
Die Integer Zahl l wird <strong>von</strong> dem Algorithmus derart berechnet, dass 0u3<br />
dieGeradeK( l )<br />
schneidet, aber nicht die Gerade K( l+ 1)<br />
. Außerdem wird l<br />
f<br />
=l gesetzt. Bei der<br />
Bestimmung <strong>von</strong> l handelt es sich um eine binäre Suche. Die Suche besteht aus k Schritten,<br />
die wie folgt nummeriert werden: k-1, k-2, …, 0. l<br />
h<br />
wird so bezeichnet, dass gilt:<br />
0u schneidet ( )<br />
3<br />
h<br />
K l<br />
h<br />
aber nicht K( l<br />
h<br />
+ 2 )<br />
In den folgenden Teilpunkten wird schrittweise gezeigt werden, wie<br />
h<br />
undc( h)<br />
aus undc( )<br />
h+ 1 h+<br />
1<br />
l l induktiv<br />
l l berechnet werden. Die Basis für die Induktion ist gegeben durch<br />
h+ 1= kund l = 2<br />
h+<br />
1<br />
k<br />
1 Seien, wie bereits im Teilschritt 1 <strong>von</strong> Schritt 3.3.2.3,<br />
c undc v<br />
lh+ 1<br />
l<br />
h+<br />
1<br />
+<br />
2<br />
aus dem Gitter<br />
H<br />
den Punkten ( ) ( )<br />
• Falls beide z-Koordinaten negativ sind, dann ist k<br />
3<br />
> 0.<br />
' ''<br />
zundz die z-Koordinaten die<br />
L entsprechen.<br />
b<br />
• Falls beide z-Koordinaten größer als 2 sind, dann ist k<br />
3<br />
< 0 .<br />
In diesen beiden Fällen ist das Vorzeichen <strong>von</strong> D bekannt und der Algorithmus hält an.<br />
' ''<br />
Ansonsten sind die Kodierlängen <strong>von</strong> zundz jeweils höchstens (b+1)-Bit groß.<br />
2 Als nächstes wird durch das Feststellen des Vorzeichens der 2x2 Determinante<br />
h<br />
u3 -c( l<br />
'<br />
h+<br />
1) -c2<br />
( )<br />
h<br />
D= bestimmt, auf welcher Seite <strong>von</strong> K( h+<br />
1<br />
2 )<br />
v<br />
2<br />
l + der Punkt u<br />
3<br />
h<br />
liegt. Dabei wird c( 2 ) <strong>von</strong> dem Stapel S entfernt. Falls u<br />
3<br />
auf der selben Seite <strong>von</strong><br />
h<br />
'<br />
K( l<br />
h+<br />
1+ 2 ) wie 0 liegt ( D< 0 ), dann ist<br />
h+ 1 h,c( h) c( h+<br />
1)<br />
dem Schritt h-1 weiter. Ansonsten, falls<br />
c( l<br />
h ) berechnet werden.<br />
3 Weil K( l<br />
h ) <strong>von</strong><br />
3<br />
wird, muss ( h )<br />
l =l l = l und es geht mit<br />
'<br />
D³ 0 ist, ist<br />
l =l + und es muss<br />
h<br />
h h+<br />
1<br />
2<br />
h<br />
h<br />
0u zwischen ( + ) ( ) ( + ) ( )<br />
h<br />
h<br />
c l entweder c( + ) c2 ( ) oderc( + ) c( 2 ) v<br />
c l + c 2 undc l + c 2 + 2v geschnitten<br />
h 1 h 1 2<br />
l + l + + sein. Welcher<br />
h 1 h 1 2<br />
der beiden Kandidaten letztendlich c( l<br />
h ) , ist kann durch das Vorzeichen der 2x2<br />
Determinante<br />
u<br />
3<br />
h<br />
( + ) ( )<br />
c l + c 2 + v<br />
h 1 2<br />
bestimmt werden.<br />
'<br />
Im dem Spezialfall aus dem Teilschritt 2, wenn die Determinante D= 0 ist, wird<br />
h<br />
l =l + gesetzt und der Algorithmus fährt mit dem Schritt 3.3.2.5 fort.<br />
f h+<br />
1<br />
2<br />
Die Suche wird so lange fortgeführt bis eines der folgenden Ereignisse zutrifft:<br />
· Der Algorithmus hält an,<br />
· Der Algorithmus geht in den Schritt 3.3.2.5 über,<br />
· Alle k Schritte (k-1, k-2, …, 0) wurde durchgeführt<br />
Im letzten Fall wird l<br />
f<br />
=l<br />
0<br />
gesetzt und der Algorithmus fährt mit dem Schritt 3.3.2.5 fort.
<strong>Das</strong> <strong>Auswerten</strong> <strong>von</strong> <strong>Determinanten</strong> 17<br />
3.3.2.5 Lokalisieren der Zelle, die u<br />
3<br />
enthält<br />
In diesem Unterpunkt wird die Zelle aus dem Gitter L bestimmt, die u<br />
3<br />
enthält. Es ist bereits<br />
bekannt, dass u<br />
3<br />
sich in dem Parallelogramm c ( lf) ,c( l<br />
f) + v,c<br />
1 ( l<br />
f ) + v1+ 2v<br />
2,c( l<br />
f ) + 2v2<br />
befindet. Ein letzter Test lokalisiert<br />
3<br />
die Zelle C aus dem Gitter L, die u<br />
3<br />
enthält. Falls<br />
u bezogen auf die Gerade ( )<br />
u -c( l ) -v<br />
3 f 2<br />
v<br />
1<br />
D + c l + v und bestimmt<br />
1 f 2<br />
³ 0 ist, dann ist C die<br />
Zelle deren Referenzpunkt c( l<br />
f ) ist. Ansonsten ist C die Zelle deren Referenzpunkt<br />
c( ) v<br />
c <strong>von</strong> C mit der Basis ( )<br />
l<br />
f<br />
+<br />
2<br />
ist. Der Referenzpunkt<br />
u<br />
u,u<br />
1 2<br />
und den entsprechenden<br />
Punkt Cu <strong>von</strong> L<br />
H<br />
erhält man durch die Gleichung (5) und man berechnet R = U3- Cu.<br />
3.3.2.6 Ende des ersten Schrittes<br />
Falls zR<br />
< 0 ist, dann ist k<br />
3<br />
< 0 und falls zR > z1+ z2<br />
ist, dann ist k<br />
3<br />
> 0 . Ansonsten geht der<br />
Algorithmus in den zweiten Schritt über.<br />
Damit endet die Beschreibung des ersten wichtigen Schrittes des Algorithmus. Der Vektor<br />
r= u - c gehört zu der Zelle aus L deren Referenzpunkt 0 ist, folglich ist die Kodierlänge<br />
3 u<br />
<strong>von</strong> xR<br />
und y<br />
R<br />
höchstens (b+1)-Bit groß und 0£ zR £ z1+ z2.<br />
3.3.3 Die Arithmetik<br />
In diesem Absatz wird gezeigt, dass (b+1)-Bit Arithmetik ausreicht, um den oben genannten<br />
Algorithmus auszuführen. Dabei muss die Annahme, dass U,U<br />
1 2<br />
und U<br />
3<br />
b-Bit Integer<br />
Zahlen sind, gelten.<br />
Als erstes wird gezeigt, dass alle c( l) undc( l ) + v2<br />
durch (b+1)-Bits repräsentiert werden<br />
können. Weil p= K( l) Ç 0u3<br />
zu dem Liniensegment 0u<br />
3<br />
gehört, ist die Kodierlänge seiner<br />
Koordinaten kleiner als die <strong>von</strong> u,<br />
3<br />
und weil c( l ) zu dem Liniensegment p- u,p<br />
2<br />
+ u2<br />
gehört, reicht ein Bit mehr aus um c( l ) zu speichern.<br />
Als nächstes wird gezeigt, dass die Berechnung <strong>von</strong> R, die in den Schritten 3.3.2.2 und 3.3.2.6<br />
durchgeführt wird, nicht mehr als (b+1)-Bit benötigt. Die Berechnung der x- und y-<br />
Komponenten <strong>von</strong> R ist unproblematisch, weil c,u<br />
v 3-c,und v<br />
u3 - cu<br />
mit höchstens (b+1)-<br />
Bits dargestellt werden kann. Sei z<br />
v<br />
die z-Komponente <strong>von</strong> dem Punkt Cv <strong>von</strong> L<br />
H, die sich<br />
auf c<br />
v<br />
bezieht und sei z<br />
u<br />
die z-Komponente <strong>von</strong> C<br />
u<br />
. Die Bitlänge <strong>von</strong> z<br />
v<br />
beträgt höchstens<br />
b+1 und aus der Gleichung (5) kann man entnehmen, dass die Bitlänge <strong>von</strong> z<br />
u<br />
nicht die<br />
Bitlänge <strong>von</strong> z<br />
v<br />
überschreitet.<br />
b<br />
· Falls zu<br />
< 2 , dann kann zR = z3- zu<br />
mit (b+1)-Bit Arithmetik berechnet werden<br />
· Falls z<br />
u<br />
negativ ist mit<br />
berechnet werden.<br />
z 2<br />
u<br />
b<br />
> , dann sind zR 3<br />
und k negativ und R muss nicht
18 Darius Wieczorek<br />
Als letztes wird gezeigt, dass das Vorzeichen der <strong>Determinanten</strong> aus den Teilschritten 2 und 3<br />
mit (b+1)-Bit Arithmetik herausgefunden werden kann. Die Vektoren, die in diesen<br />
u,u,u undeinigenc l :<br />
<strong>Determinanten</strong> auftauchen sind Kombinationen aus den Vektoren ( )<br />
1 2 3<br />
l 1<br />
z.B. Im Teilschritt 3, aus dem Schritt 3.3.2.3, muss 2c( 2 -<br />
)<br />
berechnet werden. Aus der<br />
Beschreibung des Algorithmus geht hervor, dass dieser Vektor mit (b+3)-Bit Arithmetik<br />
berechnet werden kann. Im Folgenden wird gezeigt, wie man die Anzahl an Bits derart<br />
reduzieren kann, dass für jeden Unterpunkt lediglich (b+1)-Bit Arithmetik benötigt wird.<br />
Teilschritt 2, aus Schritt 3.3.2.3: In diesem Schritt wird getestet, auf welcher Seite <strong>von</strong><br />
l<br />
K( 2 ) der Punkt u<br />
3<br />
liegt. Ein Problem tritt auf, falls mindestens eine der Koordinaten <strong>von</strong><br />
l 1<br />
u3<br />
2c( 2 -<br />
l 1<br />
- ) nicht mit (b+1)-Bits darstellbar ist. Daher wird der Punkt 2c( 2 -<br />
)<br />
l<br />
anderen Punkt w aus K( 2 ) ersetzt, so dass u3<br />
b b b b<br />
é ù é ù<br />
- w mit (b+1)-Bits darstellbar ist. Sei<br />
durch einen<br />
SP @ ë -2 ,2 û ´ ë -2 ,2 û der „single precision“-Bereich. Es wird verlangt, dass solch eine<br />
Konstruktion erreicht werden kann, falls wenigstens einer <strong>von</strong> den beiden Punkten<br />
{ ( l - 1 l1 -<br />
c 2 ),c2 ( ) v 2 }<br />
( l - 1 ) ( l - 1<br />
)<br />
{ c 2 u,c2 v u }<br />
3 2 3<br />
+ und wenigstens einer <strong>von</strong> den beiden Punkten<br />
- + - zu dem SP-Bereich gehört. Seien w1 und w2 - u3<br />
Punkte aus<br />
dem SP-Bereich, die aus den beiden Mengen ausgewählt wurden, dann folgt daraus, dass der<br />
-w -(w - u) = u -(w + w) mit (b+1)-Bits darstellbar ist und dass<br />
Punkt<br />
1 2 3 3 1 2<br />
+ Î ( l<br />
) ist, weil w,w ( l 1<br />
1 2<br />
K 2 -<br />
)<br />
w w K 2<br />
u<br />
1 2<br />
3<br />
- w<br />
v<br />
2<br />
Î sind. Daraus folgt, dass die Determinante<br />
mit (b+1)-Bits darstellbar ist. Die Alternativen sehen wie folgt aus:<br />
(i) ( l - 1 ) SP ( l - 1<br />
)<br />
l<br />
auf der selben Seite <strong>von</strong> K( 2 ) befinden. Weil v2<br />
l 1<br />
K( 2 - ) das Quadrat SP* mit den Eckpunkten ( 0, 2 b<br />
) und( b<br />
2,0)<br />
c 2 Ï undc 2 + v 2<br />
Ï SP und es wird gefordert, dass u3<br />
und0 sich<br />
Î SP ist, schneidet die Gerade<br />
± ± nicht (siehe Bild<br />
l<br />
8a). Daraus folgt, dass die Gerade K( 2 ) sich komplett außerhalb des Quadrates<br />
2SP*, das SP enthält, befindet.<br />
l1 - l1 -<br />
(ii) c( 2 ) u3 SPundc( 2 ) v2 u3<br />
SP<br />
u3<br />
und0 auf verschiedenen Seiten <strong>von</strong> der Geraden (<br />
l<br />
)<br />
l 1<br />
schneidet die Gerade K( 2 - *<br />
) das Quadrat u3<br />
l-1<br />
wenn p der Schnitt <strong>von</strong> K( 2 ) und0u 3<br />
ist, dann gilt:<br />
- Ï + - Ï und es wird gefordert, dass<br />
K 2 liegen. Weil v2<br />
Î SP<br />
SP + nicht (siehe Bild 8b). Folglich,<br />
1<br />
b 1<br />
pu ³ -<br />
3<br />
pu3 2<br />
¥ 1<br />
2<br />
> ,<br />
*<br />
weil p sich außerhalb <strong>von</strong> dem Quadrat SP + u3<br />
befindet und daraus folgt, dass der<br />
b<br />
'<br />
L1<br />
- Abstand <strong>von</strong> u3<br />
undp größer als 2 sein muss. Der Punkt p = 2p ist der Punkt<br />
l<br />
an dem sich die Geraden<br />
3 ( )<br />
0u undK 2 schneiden und daraus folgt:<br />
ist,
<strong>Das</strong> <strong>Auswerten</strong> <strong>von</strong> <strong>Determinanten</strong> 19<br />
'<br />
b<br />
0p 20p 20u3 2pu3 20u3 2 0u<br />
3<br />
,<br />
¥ ¥ ¥ ¥ ¥<br />
¥ = = - < - £<br />
damit wird die Forderung, dass<br />
3<br />
befinden, erfüllt.<br />
l<br />
0undu sich auf verschiedenen Seiten <strong>von</strong> K( 2 )<br />
Bild 8a: Darstellung des Falles: ( l - 1 ) ( l -<br />
SP<br />
1<br />
)<br />
c 2 Ï undc 2 + v 2<br />
Ï SP<br />
l1 - l1 -<br />
Bild 8b: Darstellung des Falles: ( ) SP ( )<br />
c 2 -u Ï undc 2 + v -u<br />
Ï SP<br />
3 2 3
20 Darius Wieczorek<br />
Teilschritt 2, aus Schritt 3.3.2.4: Die Modifikation dieses Schrittes ähnelt der<br />
Modifikation des Teilschrittes 2 aus Schritt 3.3.2.3. In diesem Fall wird das Vorzeichen der<br />
u3<br />
- w<br />
h<br />
Determinante berechnet, wobei der Punkt w aus der Geraden K( l<br />
h+<br />
1+<br />
2 )<br />
v<br />
2<br />
herausgesucht werden muss. Wie bereits bekannt ist, befinden sich u3<br />
und0auf<br />
h 1<br />
verschiedenen Seiten <strong>von</strong> K( 2 +<br />
)<br />
h<br />
h<br />
c( 2 ) undc( 2 ) v 2<br />
und damit muss einer der beiden Punkte<br />
+ mit b-Bits darstellbar sein. Sei w<br />
1<br />
dieser Vektor. Wie ebenfalls bekannt<br />
ist, befinden sich u3<br />
und0 auf derselben Seiten der Geraden K ( h+<br />
1)<br />
der beiden Punkte c( ) u undc( ) v u<br />
l und damit muss einer<br />
lh+ 1<br />
-<br />
3<br />
l<br />
h+<br />
1<br />
+<br />
2<br />
-<br />
3<br />
mit b-Bits darstellbar sein. Sei w2 - u3<br />
dieser Vektor. <strong>Das</strong> mit (-1) multiplizierte Ergebnis der Summe der beiden Vektoren<br />
- w + w - u = u - w + w wird mit (b+1)-Bits dargestellt und<br />
( 1 ( 2 3)<br />
) 3 ( 1 2)<br />
1 2 h 1<br />
h<br />
( + )<br />
w @ w + w ÎK l + 2<br />
, wie es gefordert wurde.<br />
Teilschritt 3, aus Schritt 3.3.2.3 und 3.3.2.4: Die Einträge der Determinante<br />
u3<br />
aus dem Schritt 3.3.2.3 können mit (b+1)-Bits dargestellt werden, weil<br />
l-1<br />
2c 2 + v<br />
( ) 2<br />
l-1<br />
( ) + entweder ( l<br />
l<br />
c 2 ) oder ( )<br />
2c 2 v 2<br />
Schritt 3.3.2.4.<br />
c 2 + v 2<br />
ist. <strong>Das</strong>selbe gilt für die Determinante aus dem<br />
3.3.4 Zweiter Schritt: Exponentielle Reduktion<br />
Der zweite wichtige Schritt des Algorithmus besteht darin, entweder das Vorzeichen <strong>von</strong> k<br />
3<br />
'<br />
R = R -qU -q U,mit q , q Î - 1,0, + 1 , zu finden, so<br />
herauszufinden oder einen Vektor { }<br />
1 1 2 2 1 2<br />
z3<br />
dass x<br />
R'<br />
,y<br />
R'<br />
b-Bit Integer Zahlen sind und zR'<br />
£ ist. Um dies zu erreichen, wird die Box<br />
2<br />
B in vier Unterboxen aufgeteilt, so dass für jedes r das in jeder dieser Boxen liegt entweder<br />
'<br />
ein Vektor R bestimmt werden kann, oder das Vorzeichen <strong>von</strong> k<br />
3<br />
leicht erhalten werden<br />
kann.<br />
Die Projektion der Box B auf die Ebene entspricht dem Parallelogramm u1Å<br />
u2. Der<br />
Algorithmus lokalisiert die Projektion r <strong>von</strong> R in Bezug auf die beiden Diagonalen des<br />
Parallelogramms, die u1 mit u2 und0mit u1+ u<br />
2<br />
verbinden, indem die Vorzeichen <strong>von</strong> den<br />
<strong>Determinanten</strong><br />
r r-u1<br />
und<br />
u + u u -u<br />
1 2 2 1<br />
berechnet werden (siehe Bild 9).<br />
Im Folgenden wird der nächste Schritt nur für eine der vier Subboxen gezeigt, weil die<br />
Behandlung der anderen Boxen analog geschieht. Daher soll O.B.d.A gelten, dass r zu dem<br />
æ u1+<br />
u2<br />
ö<br />
Dreieck ç 0,u, 1 ÷<br />
è 2 ø gehört.
<strong>Das</strong> <strong>Auswerten</strong> <strong>von</strong> <strong>Determinanten</strong> 21<br />
Bild 9: Unterteilung der Box B<br />
æ z1+<br />
z2<br />
ö<br />
· Falls zR > supç z,<br />
1 ÷<br />
è 2 ø ist, dann ist k<br />
3<br />
> 0<br />
· Falls zR<br />
< 0 ist, dann ist k<br />
3<br />
< 0<br />
'<br />
· Ansonsten wird der Vektor R aus den beiden Vektoren RundR- U1<br />
ausgewählt.<br />
Ausschlaggebend für die Auswahl ist dabei der kleinere modulo Wert der dritten<br />
Komponente. Daraus folgt, dass<br />
sup( z,z<br />
1 2)<br />
z3<br />
zR'<br />
£ £ .<br />
2 2<br />
3.3.5 Nicht linear unabhängige Vektoren<br />
Bislang wurde stets angenommen, dass ( u,u<br />
1 2)<br />
linear unabhängige Vektoren sind. Falls die<br />
Vektoren nicht unabhängig sind, dann ist die Unterdeterminante<br />
x y z<br />
1 1 1<br />
=<br />
2 2 2<br />
gleich Null. Weil die Unterdeterminante mit der<br />
3<br />
D x y z<br />
x y z<br />
3 3 3<br />
x<br />
x<br />
y<br />
1 1<br />
y<br />
2 2<br />
<strong>von</strong><br />
z Komponente <strong>von</strong> u<br />
3<br />
in<br />
Verbindung steht kann z<br />
3<br />
durch 0 ersetzt werden, ohne dass die Determinante verändert wird:<br />
x y z<br />
1 1 1<br />
D=<br />
x y z<br />
2 2 2<br />
x y 0<br />
3 3
22 Darius Wieczorek<br />
3.3.6 Komplexitätsanalyse des Algorithmus<br />
In jeder Wiederholung berechnet der Algorithmus entweder das Vorzeichen <strong>von</strong> k<br />
3<br />
und endet<br />
mit der Berechnung einer 2x2 Determinante oder er wiederholt sich mit einer 3x3<br />
Determinante, deren größter Eintrag aus der letzten Spalte mindestens halbiert wurde,<br />
während die anderen Einträge unverändert blieben. Daraus folgt, dass die Anzahl an<br />
Wiederholungen höchstens 3b groß ist.<br />
Jede Wiederholung besteht aus den Schritten 3.3.2.1 bis 3.3.2.6 und dem Schritt 3.3.4. Die<br />
Kosten für jeden dieser Schritte werden durch die Anzahl der Berechnungen der Vorzeichen<br />
<strong>von</strong> 2x2 <strong>Determinanten</strong> mit (b+1)-Bit Integer Einträgen dominiert. Schritt 3.3.2.1 benötigt<br />
drei solcher Schritte, Schritt 3.3.2.2 einen, Schritt 3.3.2.3 höchstens 2b, Schritt 3.3.2.4<br />
höchstens 2b, Schritt 3.3.2.5 höchstens einen und der Schritt 3.3.4 benötigt höchstens 2<br />
solcher Schritte.<br />
Mit Hilfe des Theorems 1 erhält man das folgende Theorem.<br />
Theorem 2 Sei D eine 3x3 Determinante mit b-Bit Einträgen. Es existiert ein Algorithmus,<br />
der das Vorzeichen <strong>von</strong> D mit nur (b+1)-Arithmetik berechnet. Der Algorithmus benötigt<br />
höchstens 3b Wiederholungen, wobei jede Wiederholung höchstens 4b+9 Vorzeichen <strong>von</strong> 2x2<br />
<strong>Determinanten</strong> mit (b+1)-Bit Einträgen herausfinden muss. Im schlimmsten Fall benötigt der<br />
2<br />
3b 4b+9 elementare Schritte, wobei jeder elementare Schritt O(1)<br />
Algorithmus höchstens ( )<br />
Additionen/Subtraktionen, Vergleiche und Divisionen mit Rest beinhaltet.<br />
Literaturverzeichnis<br />
Avnaim, Boissonnat, Devillers, Preparata, Yvinec, Evaluating signs of determinants using<br />
single-precision arithmetic, Rapport de recherche Nr. 2306, veröffentlicht vom INSTITUT<br />
NATIONAL DE RECHERCHE EN INFORMATIQUE ET EN AUTOMATIQUE (INRIA)<br />
im Juli 1994