04.11.2012 Aufrufe

Algorithmen zur Berechnung der Smith-Normalform und deren ...

Algorithmen zur Berechnung der Smith-Normalform und deren ...

Algorithmen zur Berechnung der Smith-Normalform und deren ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Algorithmen</strong> <strong>zur</strong> <strong>Berechnung</strong> <strong>der</strong><br />

<strong>Smith</strong>-<strong>Normalform</strong> <strong>und</strong> <strong>der</strong>en Implementation<br />

auf Parallelrechnern<br />

Gerold Jäger<br />

Institut für Experimentelle Mathematik<br />

Ellernstraße 29<br />

45326 Essen<br />

27. Juli 2001


1 Einführung<br />

Sei R im folgenden entwe<strong>der</strong> <strong>der</strong> Ring <strong>der</strong> ganzen Zahlen Z<br />

o<strong>der</strong> ein Polynomring F[x] über einem Körper.<br />

Für R = Z ist<br />

<strong>und</strong> für R = F[x]<br />

R := N0<br />

R := Normierte Polynome über F[x]<br />

ein Repräsentantensystem bzgl. <strong>der</strong> Äquivalenzrelation<br />

Assoziiertheit.<br />

1


1.1 Hermite-<strong>Normalform</strong><br />

Definition 1.1.1 Eine Matrix A ∈ R m,n ist in Hermite-<br />

<strong>Normalform</strong> (HNF), wenn gilt:<br />

a) Die Matrix ist in unterer Treppenform.<br />

b) Die Pseudodiagonalelemente liegen in R \ {0}.<br />

c) Die Elemente links von den Pseudodiagonalelementen<br />

liegen in N0 <strong>und</strong> sind kleiner als das entsprechende<br />

Pseudodiagonalelement (R = Z) bzw. <strong>der</strong>en Grad ist<br />

kleiner als <strong>der</strong> Grad des entsprechenden Pseudodiagonalelements<br />

(R = F[x]).<br />

Die Matrix A ist in Zeilen-Hermite-<strong>Normalform</strong><br />

(LHNF), wenn ihre Transponierte A T in HNF ist.<br />

Beispiele:<br />

⎛<br />

⎜<br />

⎝<br />

R = Z<br />

⎞<br />

4 0 0 0<br />

⎟<br />

5 6 0 0 ⎟<br />

−3 2 0 0 ⎠<br />

R = F3[x]<br />

⎛<br />

x<br />

⎜<br />

⎝<br />

3 4 7 0<br />

2 + 1 0 0<br />

2x<br />

0<br />

2 + x x3 + 1 0<br />

2x<br />

0<br />

4 x5 + 2 x6 + x2 0<br />

x2 x + 1 2 x5 + x<br />

2<br />

⎞<br />

⎟<br />


Satz 1.1.2 (Hermite) Sei A ∈ R m,n . Dann gibt es eine<br />

Matrix V ∈ GLn(R), so daß H = AV in HNF ist. Die<br />

Matrix H ist durch A eindeutig bestimmt.<br />

Satz 1.1.3 (Chou, Collins)<br />

Sei A ∈ Rm,n <strong>und</strong> p = max{m, n}. Dann gibt es einen<br />

HNF-Algorithmus, <strong>der</strong><br />

a) für R = Z O(p6 log 2 2(p�A�∞)) Bitoperationen benötigt.<br />

b) für R = F[x] O(p6⌈A⌉2 deg ) Körperoperationen benötigt.<br />

3


1.2 <strong>Smith</strong>-<strong>Normalform</strong><br />

Definition 1.2.1 Eine Matrix A ∈ R m,n mit Rang r ist<br />

in <strong>Smith</strong>-<strong>Normalform</strong> (SNF), wenn gilt:<br />

a) A ist eine Diagonalmatrix.<br />

b) Ai,i ∈ R \ {0} für 1 ≤ i ≤ r.<br />

c) Ai,i | Ai+1,i+1 für 1 ≤ i ≤ r − 1.<br />

d) Ai,i = 0 für r + 1 ≤ i ≤ min{m, n}.<br />

Satz 1.2.2 Sei A ∈ R m,n . Dann gibt es Matrizen U ∈<br />

GLm(R) <strong>und</strong> V ∈ GLn(R), so daß C = UAV in SNF<br />

ist. Die Matrix C ist durch A eindeutig bestimmt.<br />

Definition 1.2.3 a) Die Diagonalelemente d1, · · · , dr<br />

von C heißen die Elementarteiler.<br />

b) Die Matrizen U, V heißen die linke <strong>und</strong> die rechte<br />

Transformationsmatrix <strong>zur</strong> <strong>Smith</strong>-<strong>Normalform</strong>.<br />

4


2 <strong>Algorithmen</strong> <strong>zur</strong> <strong>Berechnung</strong><br />

<strong>der</strong> <strong>Smith</strong>-<strong>Normalform</strong><br />

Das folgende bekannte Lemma ermöglicht es, einen beliebigen<br />

Eintrag einer Matrix zu Null zu machen.<br />

Lemma 2.0.1 Seien a, b ∈ R, nicht beide Null. Sei d =<br />

ggT (a, b) ∈ R, u, v ∈ R mit d = au+bv, s = a<br />

d<br />

Sei weiter<br />

Dann gilt:<br />

a) V ∈ GL2(R).<br />

b) (a, b) V = (d, 0).<br />

V =<br />

� u −t<br />

v s<br />

5<br />

�<br />

<strong>und</strong> t = b<br />

d .


2.1 Algorithmus von Havas, Holt <strong>und</strong><br />

Rees<br />

Schritt 1: Sei A ∈ R m,n . Für 1 ≤ l ≤ min{m, n} seien die<br />

ersten l−1 Zeilen <strong>und</strong> Spalten schon in Diagonalform. Transformiere<br />

die Matrix, so daß in <strong>der</strong> l-ten Zeile die Einträge<br />

ab Spalte l + 1 Null sind. Dann transformiere die Matrix so,<br />

daß in <strong>der</strong> l-ten Spalte die Einträge ab Zeile l + 1 Null sind.<br />

Führe diese beiden Schritte durch, bis auch die l-te Zeile <strong>und</strong><br />

Spalte in Diagonalform ist.<br />

Schritt 2: Wandle die Diagonalform mit einem elementaren<br />

Algorithmus in die <strong>Smith</strong>-<strong>Normalform</strong> um.<br />

6


Beschreibung von Schritt 1 am Beispiel einer<br />

(4 × 4)-Matrix<br />

⎛<br />

⎞ ⎛<br />

⎞<br />

18 12 24 42<br />

⎜<br />

⎟<br />

⎜ 7 9 7 3 ⎟<br />

⎜<br />

⎟<br />

⎝ 10 12 7 10 ⎠<br />

⇒<br />

6<br />

⎜ −2<br />

⎜<br />

⎝ −2<br />

0<br />

13<br />

16<br />

0<br />

15<br />

15<br />

0<br />

17<br />

24<br />

⎟<br />

⎠<br />

4 −6 9 10<br />

10 −26 −31 −60<br />

⇒<br />

⎛<br />

⎜<br />

⎝<br />

⎛<br />

⎜<br />

⎝<br />

2 −13 −15 −17<br />

0 39 45 51<br />

0 3 0 7<br />

0 39 44 25<br />

1 0 0 0<br />

0 78 −540 −612<br />

0 6 −45 −44<br />

0 78 −541 −638<br />

⎞<br />

⎟<br />

⎠ ⇒<br />

⎞<br />

⎟<br />

⎠<br />

⎛<br />

⎜<br />

⎝<br />

⇒ · · ·<br />

7<br />

1 0 0 0<br />

−39 78 −540 −612<br />

−3 6 −45 −44<br />

−39 78 −541 −638<br />

⎛<br />

⎜<br />

⎝<br />

1 0 0 0<br />

0 1 0 0<br />

0 0 2 0<br />

0 0 0 3630<br />

⎞<br />

⎟<br />

⎠<br />

⎞<br />

⎟<br />

⎠ ⇒


2.2 Algorithmus von Kannan <strong>und</strong> Bachem<br />

Schritt 1: Führe an <strong>der</strong> Matrix solange abwechselnd HNF<strong>und</strong><br />

LHNF-<strong>Berechnung</strong>en durch, bis die Matrix in Diagonalform<br />

ist.<br />

Schritt 2: Wandle die Diagonalform mit einem elementaren<br />

Algorithmus in die <strong>Smith</strong>-<strong>Normalform</strong> um.<br />

8


Beschreibung von Schritt 1 am Beispiel einer<br />

(4 × 4)-Matrix<br />

⎛<br />

⎞<br />

2100 −2100 6300 4200<br />

⎜<br />

⎟<br />

⎜ 600 630 570 −30 ⎟<br />

⎜<br />

⎟<br />

⎝ 420 −376 1216 796 ⎠<br />

90 −60 42 51<br />

⇒<br />

⎛<br />

⎞<br />

2100<br />

⎜ 600<br />

⎜<br />

⎝ 420<br />

0<br />

1230<br />

44<br />

0<br />

0<br />

0<br />

0<br />

⎟<br />

0 ⎟<br />

0 ⎠<br />

90 30 99 0<br />

⇒<br />

⎛<br />

⎜<br />

⎝<br />

⎛<br />

⎜<br />

⎝<br />

30 0 693 0<br />

0 2 594 0<br />

0 0 990 0<br />

0 0 0 0<br />

3 0 0 0<br />

0 2 0 0<br />

0 0 9900 0<br />

0 0 0 0<br />

⎞<br />

⎟<br />

⎠<br />

⎞<br />

⎟<br />

⎠<br />

9<br />

⇒<br />

⎛<br />

⎜<br />

⎝<br />

3 0 0 0<br />

0 2 0 0<br />

990 0 9900 0<br />

0 0 0 0<br />

⎞<br />

⎟<br />

⎠ ⇒


2.3 Dreiecksbandmatrix-Algorithmus<br />

Schritt 1: Führe an <strong>der</strong> Matrix A ∈ R m,n mit Rang r eine<br />

HNF-<strong>Berechnung</strong> durch.<br />

Schritt 2: Transformiere A, so daß die (r × r)-Teilmatrix<br />

(Ai,j)1≤i,j≤r vollen Rang hat, <strong>und</strong> alle Einträge außerhalb<br />

dieser Teilmatrix Null sind. Die Einträge außerhalb dieser<br />

Teilmatrix bleiben auch im Rest des Algorithmus Null.<br />

Schritt 3: Wandle die Matrix in eine obere Dreiecksbandmatrix<br />

um.<br />

Schritt 4: Wandle die obere Dreiecksbandmatrix in eine<br />

Diagonalform um.<br />

Schritt 5: Wandle die Diagonalform mit einem elementaren<br />

Algorithmus in die <strong>Smith</strong>-<strong>Normalform</strong> um.<br />

10


Beschreibung <strong>der</strong> Schritte 1 <strong>und</strong> 2 am Beispiel<br />

einer (4 × 4)-Matrix<br />

⎛<br />

⎞ ⎛<br />

⎞<br />

7 7 28 21<br />

⎜<br />

⎟<br />

⎜ 31 −29 34 3 ⎟<br />

⎜<br />

⎟<br />

⎝ 23 −25 20 −3 ⎠<br />

Schritt 1<br />

⇒<br />

7 0 0 0<br />

⎜<br />

⎟<br />

⎜ 1 30 0 0 ⎟<br />

⎜<br />

⎟<br />

⎝ −1 24 0 0 ⎠<br />

5 3 22 12<br />

4 1 5 0<br />

⇒<br />

⎛<br />

⎜<br />

⎝<br />

⎛<br />

⎜<br />

⎝<br />

7 0 0 0<br />

1 30 0 0<br />

4 1 5 0<br />

−1 24 0 0<br />

1 0 0 0<br />

2 6 0 0<br />

4 1 5 0<br />

0 0 0 0<br />

⎞<br />

⎟<br />

⎠<br />

⎞<br />

⎟<br />

⎠<br />

⇒<br />

11<br />

⎛<br />

⎜<br />

⎝<br />

7 0 0 0<br />

2 6 0 0<br />

4 1 5 0<br />

−9 0 0 0<br />

⎞<br />

⎟<br />

⎠ ⇒


Beschreibung von Schritt 3 am Beispiel einer<br />

(4 × 4)-Matrix<br />

⎛<br />

⎞<br />

3 0 0<br />

⎜ 8 12 0<br />

⎜<br />

⎝ 12 10 16<br />

0<br />

⎟<br />

0 ⎟<br />

0 ⎠<br />

18 8 2 20<br />

⇒<br />

⎛<br />

⎞<br />

3<br />

⎜ 8<br />

⎜<br />

⎝ 6<br />

0 0 0<br />

⎟<br />

12 0 0 ⎟<br />

−2 −14 20 ⎠<br />

0 −14 −44 40<br />

⇒<br />

⎛<br />

⎜<br />

⎝<br />

⎛<br />

⎜<br />

⎝<br />

⎛<br />

⎜<br />

⎝<br />

3 0 0 0<br />

8 12 0 0<br />

6 −2 2 0<br />

0 −14 52 160<br />

3 0 0 0<br />

2 2 0 0<br />

0 −8 12 0<br />

0 −52 350 160<br />

⎞<br />

1 −2 0 0<br />

0 2 −2 0<br />

0 0 2 −960<br />

0 0 0 2880<br />

⎟<br />

⎠ ⇒<br />

⎞<br />

⎟<br />

⎠ ⇒<br />

⎞<br />

⎟<br />

⎠<br />

⎛<br />

⎜<br />

⎝<br />

⎛<br />

⎜<br />

⎝<br />

12<br />

3 0 0 0<br />

2 14 −2 0<br />

0 −44 8 0<br />

0 −14 52 160<br />

1 −2 0 0<br />

0 6 0 0<br />

0 −8 12 0<br />

0 −52 350 160<br />

⎞<br />

⎟<br />

⎠ ⇒<br />

⎞<br />

⎟<br />

⎠<br />

⇒ · · ·


Beschreibung von Schritt 4 am Beispiel einer<br />

(4 × 4)-Matrix<br />

⎛<br />

⎞<br />

14 21<br />

⎜ 0 12<br />

⎜<br />

⎝ 0 0<br />

0<br />

8<br />

16<br />

0<br />

0<br />

5<br />

⎟<br />

⎠<br />

0 0 0 20<br />

⇒<br />

⎛<br />

⎞<br />

7 0<br />

⎜ 12 24<br />

⎜<br />

⎝ 0 0<br />

0<br />

8<br />

16<br />

0<br />

0<br />

5<br />

⎟<br />

⎠<br />

⇒<br />

0 0 0 20<br />

⎛<br />

⎜<br />

⎝<br />

⎛<br />

⎜<br />

⎝<br />

⎛<br />

⎜<br />

⎝<br />

7 0 0 0<br />

12 8 0 0<br />

0 16 48 5<br />

0 0 0 20<br />

⎞<br />

1 24 0 0<br />

0 8 −3 0<br />

0 0 1 2880<br />

0 0 0 6720<br />

1 0 0 0<br />

0 1 0 0<br />

0 −3 8 0<br />

0 0 0 6720<br />

⎟<br />

⎠ ⇒<br />

⎞<br />

⎟<br />

⎠<br />

⎞<br />

⎟<br />

⎠ ⇒<br />

⇒ · · ·<br />

13<br />

⎛<br />

⎜<br />

⎝<br />

⎛<br />

⎜<br />

⎝<br />

7 0 0 0<br />

12 8 0 0<br />

0 16 1 0<br />

0 0 −380 960<br />

1 0 0 0<br />

0 1 0 0<br />

0 0 8 0<br />

0 0 0 6720<br />

⎞<br />

⎟<br />

⎠<br />

⎞<br />

⎟<br />

⎠<br />

⇒ · · ·


Komplexitätsabschätzung<br />

Satz 2.3.1 Sei A ∈ R m,n mit p = max{m, n}. Dann gilt:<br />

a) Für R = Z benötigt <strong>der</strong> Dreiecksbandmatrix-Algorithmus<br />

O(p 4 log 2 2(p�A�∞) max{p 2 , log 2(�A�∞)}) Bitoperationen.<br />

b) Für R = F[x] benötigt <strong>der</strong> Dreiecksbandmatrix-<br />

Algorithmus O(p 4 ⌈A⌉ 2 deg max{p2 , ⌈A⌉deg}) Körperoperationen.<br />

Bemerkung 2.3.2 a) Für eine (100 × 100)-Matrix über<br />

Z müßte <strong>der</strong> maximale Absolutbetrag <strong>der</strong> Eingabematrix<br />

größer als 2 10.000 sein, damit max{p 2 , log 2(�A�∞)} �= p 2<br />

gilt.<br />

b) Für eine (100×100)-Matrix über F[x] müßte <strong>der</strong> maximale<br />

Grad <strong>der</strong> Eingabematrix größer als 10.000 sein, damit<br />

max{p 2 , ⌈A⌉deg} �= p 2 gilt.<br />

Wir erhalten im wesentlichen dieselbe Komplexitätsabschätzung<br />

bei dem benutzten HNF-Algorithmus.<br />

14


Vergleich mit dem Kannan-Bachem-Algorithmus<br />

Satz 2.3.3 Sei A ∈ Rm,n mit p = max{m, n}. Dann gilt:<br />

a) Für R = Z benötigt <strong>der</strong> Kannan-Bachem-Algorithmus<br />

O(p10 log 3 2(p�A�∞)) Bitoperationen.<br />

b) Für R = F[x] benötigt <strong>der</strong> Kannan-Bachem-<br />

Algorithmus O(p10⌈A⌉3 deg ) Körperoperationen.<br />

15


2.4 Laufzeitvergleiche<br />

Matrix HNF-Alg. KB-Alg. DBM-Alg. HHR-Alg. MAGMA<br />

(R = Z) \ HNF \ HNF<br />

53 × 53 00:00:02 00:00:00 00:00:00 00:00:04 00:00:06<br />

101 × 101 00:00:23 00:00:03 00:00:03 00:01:56 00:02:29<br />

149 × 149 00:02:59 00:00:05 00:00:02 00:23:19 00:17:58<br />

199 × 199 00:10:27 00:00:16 00:00:17 20:16:03 01:10:42<br />

251 × 251 00:40:10 00:00:19 00:00:11 04:32:10<br />

293 × 293 01:16:24 00:00:36 00:00:18 08:45:28<br />

349 × 349 02:49:42 00:01:14 00:05:30 20:47:38<br />

401 × 401 05:09:53 00:05:14 00:42:24<br />

449 × 449 09:50:35 00:07:43 00:08:14<br />

499 × 499 18:58:11 00:01:39 00:00:52<br />

Matrix HNF-Alg. KB-Alg. DBM-Alg. HHR-Alg. MAGMA<br />

(R = F2[x]) \ HNF \ HNF<br />

50 × 50 00:00:03 00:00:00 00:00:00 00:00:03 01:37:12<br />

100 × 100 00:00:27 00:00:00 00:00:00 00:00:27<br />

150 × 150 00:01:40 00:00:06 00:00:01 00:02:08<br />

200 × 200 00:04:27 00:00:06 00:00:03 00:04:31<br />

250 × 250 00:08:57 00:00:02 00:00:02 00:08:28<br />

300 × 300 00:15:38 00:00:20 00:00:18 00:17:10<br />

350 × 350 00:25:35 00:01:11 00:02:41 00:26:50<br />

400 × 400 00:39:09 00:02:44 00:00:37 01:08:21<br />

450 × 450 00:54:50 00:03:10 00:00:14 02:08:07<br />

500 × 500 01:34:01 00:01:22 00:00:09 07:34:21<br />

16


3 Parallele Versionen <strong>der</strong> <strong>Smith</strong>-<br />

<strong>Normalform</strong>-<strong>Algorithmen</strong><br />

Ein paralleles Programm ist eine Menge von unabhängigen<br />

Prozessen, wobei Daten zwischen den Prozessen ausgetauscht<br />

werden.<br />

3.1 Idee <strong>der</strong> Parallelisierung<br />

Beispiel: Algorithmus von Havas, Holt <strong>und</strong> Rees<br />

⎛<br />

⎞ ⎛<br />

4 7 3 −3 2<br />

1 0 0 0<br />

⎜ 3 11 2 5 8<br />

⎟ ⎜<br />

⎟ ⎜ −5 23 17 −10<br />

⎜<br />

⎟ ⎜<br />

⎜ 7 −3 0 4 3 ⎟ ⎜ 17 −61 −51 55<br />

⎜<br />

⎟ ⇒ ⎜<br />

⎜ 1 5 2 3 9 ⎟ ⎜ −3 13 11 −6<br />

⎜<br />

⎟ ⎜<br />

⎝ 7 8 1 −4 5 ⎠ ⎝ 6 −17 −17 14<br />

0<br />

18<br />

−31<br />

15<br />

−7<br />

1 −2 −4 7 −3 4 −15 −16 19 −11<br />

Parallelisierung auf 4 Prozesse<br />

Schritt 1: Die Zeilen werden auf die 4 Prozesse verteilt.<br />

� � �<br />

4 7 3 −3 2 3 11 2 5 8<br />

�<br />

7 8 1 −4 5 1 −2 −4 7 −3<br />

Prozeß 1 Prozeß 2<br />

� 7 −3 0 4 3 � � 1 5 2 3 9 �<br />

Prozeß 3 Prozeß 4<br />

17<br />

⎞<br />

⎟<br />


Schritt 2: Die Zeile, die für die Transformation maßgeblich<br />

ist, wird von dem Prozeß, auf dem sie liegt, an alle an<strong>der</strong>en<br />

Prozesse geschickt <strong>und</strong> über allen nicht bearbeiteten Zeilen<br />

eingefügt. Den Prozeß, <strong>der</strong> an die an<strong>der</strong>en schickt, bezeichnen<br />

wir als Master.<br />

� 4 7 3 −3 2<br />

7 8 1 −4 5<br />

� ⎛<br />

⎝<br />

4 7 3 −3 2<br />

3 11 2 5 8<br />

1 −2 −4 7 −3<br />

Prozeß 1 Prozeß 2<br />

�<br />

4 7<br />

�<br />

3 −3 2<br />

� �<br />

4 7 3 −3 2<br />

7 −3 0 4 3 1 5 2 3 9<br />

Prozeß 3 Prozeß 4<br />

Schritt 3: Auf allen Prozessen werden dieselben Operationen<br />

wie im Original-Algorithmus durchgeführt.<br />

� 1 0 0 0 0<br />

6 −17 −17 14 −7<br />

� ⎛<br />

⎝<br />

⎞<br />

⎠<br />

1 0 0 0 0<br />

−5 23 17 −10 18<br />

4 −15 −16 19 −11<br />

Prozeß 1 Prozeß 2<br />

�<br />

1 0 0 0 0<br />

� �<br />

1 0 0 0 0<br />

�<br />

17 −61 −51 55 −31 −3 13 11 −6 15<br />

Prozeß 3 Prozeß 4<br />

18<br />

⎞<br />


Schritt 4: Auf allen Prozessen außer dem Master wird die<br />

verschickte Zeile wie<strong>der</strong> entfernt.<br />

�<br />

1 0 0 0 0<br />

� �<br />

−5 23 17 −10 18<br />

�<br />

6 −17 −17 14 −7 4 −15 −16 19 −11<br />

Prozeß 1 Prozeß 2<br />

� 17 −61 −51 55 −31 � � −3 13 11 −6 15 �<br />

Prozeß 3 Prozeß 4<br />

Bei Spaltenoperationen ist die Matrix immer zeilenverteilt<br />

<strong>und</strong> bei Zeilenoperationen immer spaltenverteilt. Gegebenenfalls<br />

wird zwischen beiden Verteilungen gewechselt.<br />

19


3.2 Laufzeitvergleiche<br />

Effizienz<br />

Matrix Prozesse HNF-Alg. KB-Alg. DBM-Alg.<br />

(R = Z) \ HNF \ HNF<br />

389 × 389 1 05:46:46 00:03:26 00:01:43<br />

389 × 389 2 02:54:28 00:02:33 00:01:15<br />

389 × 389 4 01:29:07 00:02:14 00:01:00<br />

389 × 389 8 00:47:15 00:02:11 00:00:56<br />

389 × 389 16 00:25:12 00:02:10 00:01:02<br />

389 × 389 32 00:14:48 00:02:17 00:01:10<br />

389 × 389 64 00:09:34 00:02:31 00:01:22<br />

Matrix Prozesse HNF-Alg. KB-Alg. DBM-Alg. HHR-Alg.<br />

(R = F2[x]) \ HNF \ HNF<br />

400 × 400 1 10:49:17 00:02:22 00:01:03 06:10:55<br />

400 × 400 2 05:35:44 00:01:18 00:00:36 03:04:36<br />

400 × 400 4 02:54:15 00:01:06 00:00:28 01:33:14<br />

400 × 400 8 01:30:00 00:01:08 00:00:29 00:47:24<br />

400 × 400 16 00:47:20 00:01:18 00:00:36 00:24:49<br />

400 × 400 32 00:26:26 00:01:22 00:00:38 00:13:51<br />

400 × 400 64 00:16:23 00:01:38 00:00:50 00:08:34<br />

20


Große Beispielmatrizen<br />

Matrix Prozesse HNF-Alg. KB-Alg. DBM-Alg.<br />

(R = Z) \ HNF \ HNF<br />

967 × 967 64 09:07:00 00:37:41 00:06:32<br />

983 × 983 64 10:31:53 00:36:16 00:02:09<br />

997 × 997 64 10:21:51 00:39:56 00:20:08<br />

1013 × 1013 64 11:12:28 00:39:41 00:17:04<br />

1117 × 1117 64 17:16:10 00:59:04 00:33:52<br />

1223 × 1223 64 29:37:55 01:06:36 00:07:34<br />

Matrix Prozesse HHR-Alg.<br />

(R = F2[x])<br />

1792 × 1792 (max. Grad 1) 64 01:25:50<br />

1792 × 1792 (max. Grad 1) 64 01:04:38<br />

1792 × 1792 (max. Grad 1) 64 01:31:30<br />

1792 × 1792 (max. Grad 1) 64 01:25:41<br />

1024 × 1024 (max. Grad 9) 64 07:04:31<br />

21


4 Algorithmus <strong>zur</strong> Verkleinerung<br />

<strong>der</strong> Einträge <strong>der</strong> Transformationsmatrizen<br />

über den ganzen Zahlen<br />

Wir betrachten im folgenden den Ring R = Z <strong>und</strong> die Euklidische<br />

Norm.<br />

4.1 Gitterbasenreduktion<br />

Für linear unabhängige Vektoren b1, · · · , bn ∈ Rm heißt die<br />

Menge<br />

�<br />

n�<br />

�<br />

�<br />

�<br />

L(b1, · · · , bn) := � ti ∈ Z ⊂ R m<br />

i=1<br />

ti · bi<br />

ein Gitter mit Gitterbasis b1, · · · , bn <strong>und</strong> Rang n.<br />

Satz 4.1.1 Sei L = L(b1, · · · , bn) ein Gitter <strong>und</strong><br />

¯ b1, · · · , ¯ bn ∈ R m . Dann ist ¯ b1, · · · , ¯ bn genau dann eine<br />

Gitterbasis von L, wenn es eine Matrix T ∈ GLn(Z) gibt<br />

mit [ ¯ b1, · · · , ¯ bn] = [b1, · · · , bn] · T .<br />

Die Gitterbasenreduktion versucht, eine Gitterbasis in eine<br />

an<strong>der</strong>e mit kürzeren Vektoren zu transformieren.<br />

22


Wir benutzen folgende Reduktionstechniken:<br />

• Längenreduktion<br />

– verän<strong>der</strong>t einen Vektor bi <strong>der</strong> Gitterbasis durch<br />

bi := bi +<br />

�i−1<br />

j=1<br />

tjbj, tj ∈ Z<br />

– benutzt das Gram-Schmidt’sche Orthogonalisierungsverfahren<br />

• LLL-Reduktion (Lenstra, Lenstra, Lovász)<br />

– kann alle Vektoren einer Gitterbasis verän<strong>der</strong>n<br />

– führt Längenreduktionsschritte <strong>und</strong> Vertauschungen<br />

<strong>der</strong> Basisvektoren durch<br />

– ist eine stärkere Reduktion als die Längenreduktion<br />

23


4.2 Idee des Algorithmus<br />

Man erhält in einem beliebigen SNF-Algorithmus die Transformationsmatrix<br />

U ∈ GLm(Z), indem man alle Zeilenoperationen<br />

nacheinan<strong>der</strong> an <strong>der</strong> Einheitsmatrix Em durchführt.<br />

Die Transformationsmatrix V ∈ GLn(Z) erhält man, indem<br />

man alle Spaltenoperationen nacheinan<strong>der</strong> an <strong>der</strong> Einheitsmatrix<br />

En durchführt.<br />

Wir betrachten folgendes Problem:<br />

• Geg.: A ∈ Z m,n <strong>und</strong> U ∈ GLm(Z), V ∈ GLn(Z), so<br />

daß C = UAV in SNF ist.<br />

• Ges.: Suche U ∈ GLm(Z) <strong>und</strong> V ∈ GLn(Z) mit kleinem<br />

�U� 2 + �V � 2 , so daß C = UAV in SNF ist.<br />

Sei A ∈ Zm,n <strong>und</strong> U = [u1, · · · , um] T , V = [v1, · · · , vn].<br />

Seien d1, · · · , dr die nichttrivialen Elementarteiler von C.<br />

C hat folgende Form:<br />

⎛<br />

d1<br />

⎜ 0<br />

⎜ .<br />

⎜ 0<br />

⎜<br />

0<br />

⎝ .<br />

0<br />

...<br />

...<br />

· · ·<br />

· · ·<br />

· · ·<br />

...<br />

ds<br />

...<br />

dt<br />

...<br />

0<br />

0<br />

.<br />

0<br />

dr<br />

0<br />

.<br />

0<br />

.<br />

0<br />

0<br />

.<br />

· · ·<br />

· · ·<br />

· · ·<br />

0<br />

. ⎟<br />

0 ⎟<br />

0 ⎟<br />

. ⎠<br />

�<br />

0 · · ·<br />

��<br />

0 0<br />

� �<br />

· · ·<br />

��<br />

0<br />

�<br />

r Spalten<br />

n − r Spalten<br />

24<br />

⎞<br />

⎫<br />

⎪⎬<br />

r Zeilen<br />

⎪⎭<br />

⎫<br />

⎬<br />

⎭<br />

m − r<br />

Zeilen


Folgende Schritte verän<strong>der</strong>n die Transformationsmatrizen<br />

U, V , wobei weiterhin C = UAV gilt.<br />

• LLL-reduziere die Gitterbasis ur+1, · · · , um.<br />

• LLL-reduziere die Gitterbasis vr+1, · · · , vn.<br />

• Für l = 1, · · · , r längenreduziere ul in <strong>der</strong> Gitterbasis<br />

ur+1, · · · , um, ul.<br />

• Für l = 1, · · · , r längenreduziere vl in <strong>der</strong> Gitterbasis<br />

vr+1, · · · , vn, vl.<br />

• Für 1 ≤ s < t ≤ r führe folgende Schritte gleichzeitig<br />

durch:<br />

Minimiere<br />

us = us + k · ut<br />

vt = vt − k · dt<br />

ds vs<br />

f(k) = �us + k · ut�2 + �vt − k · dt<br />

ds<br />

= k 2<br />

�<br />

�ut� 2 + d2 �<br />

t<br />

f ′<br />

(k) =<br />

d2�vs� s<br />

2<br />

vs� 2<br />

�<br />

+k 2 −2 dt<br />

ds + �us�2 + �vt�2 �<br />

k<br />

�<br />

2�ut�2 + 2 d2t d2 2 �vs�<br />

s<br />

+2 −2 dt<br />

ds <br />

f ′′<br />

(k) = 2�ut� 2 + 2 d2 t<br />

d 2 s �vs� 2 > 0<br />

Somit ist das absolute ganzzahlige Minimum<br />

⎡<br />

dt<br />

k0 = ⎢ ds<br />

⎢<br />

− ⎥<br />

⎦<br />

�ut�2 + d2t d2�vs�2 s<br />

25


4.3 Experimente mit dem Algorithmus<br />

Testmatrizen mit kleinem Rang<br />

Matrix Rang Bits (�U� 2 + �V � 2 ) Zeit<br />

alt neu<br />

50 × 50 3 36 10 00:00:06<br />

100 × 100 3 43 12 00:00:43<br />

150 × 150 3 47 13 00:02:22<br />

200 × 200 3 50 13 00:05:43<br />

250 × 250 3 53 14 00:11:17<br />

300 × 300 3 54 14 00:19:37<br />

350 × 350 3 56 15 00:31:19<br />

400 × 400 3 57 15 00:47:01<br />

450 × 450 3 59 15 01:07:15<br />

500 × 500 3 60 16 01:32:45<br />

26


Testmatrizen mit mittlerem Rang<br />

Matrix Rang Bits (�U� 2 + �V � 2 ) Zeit<br />

alt neu<br />

50 × 50 19 59 16 00:00:05<br />

100 × 100 22 39 24 00:00:58<br />

148 × 148 38 4663 147 00:06:41<br />

201 × 201 67 18822 400 02:54:47<br />

248 × 248 33 2260 156 00:34:45<br />

298 × 298 149 5737 862 08:44:40<br />

345 × 345 45 1636 142 02:33:20<br />

396 × 396 32 419 28 03:00:15<br />

450 × 450 57 206 21 04:00:19<br />

496 × 496 62 4694 189 11:50:42<br />

27


Testmatrizen mit vollem Rang<br />

Matrix Rang Bits (�U� 2 + �V � 2 ) Zeit<br />

alt neu<br />

50 × 50 50 1524 1379 00:16:07<br />

100 × 100 100 4596 2686 01:11:30<br />

150 × 150 150 9571 5176 06:14:28<br />

200 × 200 200 16097 7843 17:43:22<br />

250 × 250 250 22283 9592 25:38:42<br />

300 × 300 300 31792 22934 29:23:56<br />

350 × 350 350 40324 27382 44:11:10<br />

400 × 400 400 51250 29698 107:12:14<br />

28


Matrix Rang Bits (�U� 2 + �V � 2 ) Zeit<br />

alt neu<br />

53 × 53 53 416 312 00:03:55<br />

101 × 101 101 1042 843 00:17:45<br />

149 × 149 149 1889 1503 00:39:28<br />

199 × 199 199 2723 2569 02:20:59<br />

251 × 251 251 3799 3246 02:34:05<br />

293 × 293 293 4998 4964 07:59:31<br />

349 × 349 349 4895 4149 08:59:50<br />

401 × 401 401 5629 5345 19:46:23<br />

29

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!