19.11.2014 Aufrufe

Das Auswerten von Determinanten - Universität Bonn

Das Auswerten von Determinanten - Universität Bonn

Das Auswerten von Determinanten - Universität Bonn

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!