• Aucun résultat trouvé

Un algorithme pour les matrices presque creuses

Dans le document Le logarithme discret dans les corps finis (Page 194-200)

algo-rithme qui calcule une -base de l’équation (6.3) en utilisant ˜O(m!b)

opé-rations algébriques dans K. Lorsque l’on considère des implémentations pra-tiques de cet algorithme, et particulièrement lorsque les valeurs de m restent petites, nous remarquons que, l’exposant ! étant remplacé par 3, cette com-plexité correspond à celle donnée par l’algorithme de Thomé dans [Tho02].

6.3 Un algorithme pour les matrices presque creuses

Comme vu précédemment, les méthodes des sous-espaces de Krylov tout comme les algorithmes de Wiedemann coûtent un nombre de multiplications matrice-vecteur égal à un petit multiple de la dimension de la matrice : pour une matrice contenant entrées non nulles par ligne en moyenne, le coût de ces multiplications est O( N2). Avec Block Wiedemann, il est possible de distribuer le coût de ces produits sur c machines. Dans ce cas, la recherche de relation de récurrence ajoute un coût supplémentaire de la forme ˜O(c! 1N ).

Pour une matrice presque creuse, qui comprend @ colonnes denses juxtaposées à sa partie creuse, le coût des multiplications matrice-vecteur augmente. Aussi, la complexité totale devient O(( + @)N2) avec un coût supplémentaire de

˜

O(c! 1N ) pour Block Wiedemann.

Dans cette section notre visée est triple. Nous cherchons tout d’abord à adapter l’algorithme de Block Wiedemann pour abaisser le coût de l’algèbre linéaire des matrices qui présentent un caractère presque creux, et réduire celui-ci à une complexité en :

O( N2) + ˜O(max(c, @)! 1N ).

En particulier, lorsque le nombre de colonnes denses est inférieur au nombre de processeurs, nous montrons que la présence de ces colonnes malvenues n’a ecte pas la complexité de la résolution des systèmes linéaires associés.

Parallèlement, nous donnons des conditions plus précises sur le choix des vecteurs ~vi et ~wi que celles implicitement données dans l’algorithme de Block Wiedemann. Plutôt que d’insister sur l’importance de choix aléatoires comme dans [Kal95], nous proposons des conditions explicites à propos de ces choix, qui permettent de rendre notre algorithme rigoureux.

Lorsque celles-ci sont satisfaites, nous démontrons ainsi que notre algo-rithme ne trouve pas simplement une solution aléatoire du système d’équa-tions comme cela était précédemment le cas, mais renvoie une description explicite et complète de l’ensemble de toutes les solutions.

La clef de notre méthode repose sur la manipulation de la partie creuse de la matrice d’entrée séparément des colonnes denses. Celles-ci sont

utili-sées pour initialiser les suites de matrices calculées par l’algorithme de Block Wiedemann. Détaillons maintenant cette idée.

6.3.1 Entre vacuité et densité

Dans toute la suite nous nous attachons à résoudre des problèmes d’al-gèbre linéaire de la forme suivante :

Problème 6.3.1. Soit M une matrice de taille N ⇥ (s + @) avec des coe cients

dans un corps K. Nous supposons qu’il existe deux matrices de plus petite taille Ms2 MN⇥s(K) et M@2 MN⇥@(K) telles que :

1. M = Ms|M@, où | est la concaténation matricielle.1 2. M@ est quelconque.

3. Ms est creuse. Nous faisons l’hypothèse supplémentaire qu’elle contient au plus coe cients non nuls par ligne.

Si ~y est un vecteur à N coe cients, le problème consiste à trouver tous les vecteurs ~x à s + @ coe cients tels que :

M· ~x = ~y ou, de façon alternative, tels que :

M· ~x = ~0.

Une telle matrice M est dite @-presque creuse, ou, de manière abrégée, presque

creuse lorsque la valeur de @ est implicite. Nous soulignons la grande plage

de matrices qui correspondent à cette déÆnition : il n’y a a priori aucune restriction sur le nombre de colonnes denses de cette matrice. Plus particuliè-rement, une matrice creuse est 0-presque creuse tandis qu’une matrice dense est N-presque creuse.

L’une des conséquences intéressantes du fait que nous souhaitons construire l’ensemble des solutions d’un tel problème d’algèbre linéaire est le fait qu’il su t de résoudre le second sous-problème non homogène du problème 6.3.1. En e et, il est facile de transformer une résolution de M· ~x = ~y en une réso-lution de M0 · ~x0 = ~0 pour une matrice presque creuse M0 très proche de M. Il su t de poser M0 = M|~y, c’est-à-dire de déÆnir la seconde matrice comme 1. Notre méthode fonctionne aussi bien pour une déÆnition plus large dans laquelle les

@ colonnes denses de la matrice se situent à n’importe quelles positions. Il su rait alors

de localiser celles-ci puis de réordonner les colonnes du problème d’algèbre linéaire en jeu. Néanmoins, en vue de simpliÆer l’exposition de notre propos, nous supposons que toutes les colonnes denses de la matrice se situent précisément à droite de celle-ci.

6.3. UN ALGORITHME POUR LES MATRICES PRESQUE CREUSES 195 Ms Partie creuse M@ colonnes denses s @ N

Figure 6.1 – Paramètres d’un problème d’algèbre linéaire presque creux étant la concaténation de la première avec une colonne dense supplémentaire égale à ~y. Nous observons alors que le vecteur ~x est une solution de M· ~x = ~y si et seulement si ~x0 =t(t~x| 1) est une solution de M0· ~x0 = ~0. En conservant cette transformation à l’esprit, nous détaillons dans la suite comment calculer une base du noyau d’une matrice presque creuse ; lorsque nous aurons résolu le premier sous-problème, il faudra simplement à la Æn du procédé veiller à sélectionner uniquement dans le noyau de M0 les vecteurs avec le coe cient

1 en dernière position.

Aussi, les deux variantes qui apparaissent dans le problème 6.3.1 sont naturellement plus liées l’une à l’autre dans notre conÆguration que leurs homologues données par le problème 6.2.1, dans le contexte plus classique de l’algorithme de (Block) Wiedemann.

La Ægure 6.2 indique le chemin formé par les di érentes étapes que nous nous proposons de suivre pour construire une bijection entre le noyau de M et un sous-ensemble de solutions résultant du calcul d’une base minimale, elle-même obtenue grâce à l’algorithme de Giorgi, Jeannerod et Villard.

6.3.2 Pré-transformation pour une matrice presque creuse

Si N = s, c’est-à-dire si la partie creuse est carrée d’emblée, aucune mani-pulation n’est nécessaire. Par ailleurs, le cas N < s n’apparait pas en pratique, car il su t d’ajouter de nouvelles équations pour augmenter le nombre de lignes de la matrice. Pour les calculs de logarithmes discrets par exemple, ces équations sont facilement générées. Néanmoins, dans les rares cas de Æ-gures où cette dégénérescence serait incontournable, l’approche la plus simple consiste à déplacer artiÆciellement s N colonnes de la partie creuse vers la partie dense de la matrice. Après cette transformation, la partie creuse est

alors carrée, de dimension (N ⇥ N), tandis que le nombre de colonnes dans

M@ est augmenté. Il devient @0 = @ + s N.

Ajouts de zéros

Dorénavant nous nous attachons donc à la conÆguration pour laquelle la partie creuse comporte plus de lignes que de colonnes, c’est-à-dire lorsque

N > s. Pour rendre cette sous-matrice Ms carrée, une méthode simple consiste à plonger cette matrice rectangulaire Ms à l’intérieur d’une matrice carrée A, qui n’est rien d’autre que la matrice Ms elle-même concaténée avec un nombre su sant de colonnes nulles à droite de cette matrice. Bien que cette proposi-tion dite d’ajouts de zéros (zero-padding method en anglais) su se à l’analyse théorique, d’autres méthodes de pré-transformations aléatoires restent valides en pratique.

Trouver un élément t(xs, x@) du noyau de la matrice M est équivalent à trouver un vecteur plus long t(xs, xtra, x@) du noyau de (A|M@), où xs, xtra et x@ sont des vecteurs lignes qui appartiennent respectivement à Ks, KN s

et K@. Le lecteur taquin aura compris que le mauvais jeu de lettres sur xtra désigne les coordonnées supplémentaires.

DéÆnition de A par une matrice aléatoire.

Pour préconditionner notre matrice presque creuse M de dimension N(s+@) telle que N s, nous pouvons aussi choisir de passer par une matrice R

déÆnie comme étant égale à :

R = Rs 0

0 I@

!

,

où Rs est une matrice creuse aléatoire de dimension s⇥ N qui est supposée surjective, et I@ est la matrice identité @⇥ @. Nous remarquons que R est sur-jective si et seulement si Rs est aussi surjective. Par ailleurs, une multiplication matricielle par bloc nous indique que l’on peut écrire :

MR = (A|M@),

avec A = MsRs une matrice creuse carrée de dimension N.

L’idée consiste de nouveau à calculer une base du noyau de (A|M@). En e et, si nous avons un élément x 2 Ker(A|M@) alors R · x 2 Ker(M). Réci-proquement, puisque R est surjective, si y 2 Ker(M) alors il existe x tel que

6.3. UN ALGORITHME POUR LES MATRICES PRESQUE CREUSES 197 Dans la suite nous considérons la matrice carrée A sans nous préoccuper de la façon dont elle a été construite.

6.3.3 Conditions sur les blocs V et W

Soit un entier à déterminer plus tard – on trouvera une déÆnition de au paragraphe 6.3.6 – et notons ~1, . . ., ~@ l’ensemble des vecteurs colonnes de M@. Nous choisissons ensuite ` @ vecteurs aléatoires dans KN que nous nommons ~r@+1,··· ,~r`. De ces vecteurs nous construisons la famille :

F := 8 > > > > > > > > > > < > > > > > > > > > > : ~1, A~1,··· ,A 1~1, ··· ~@, A~@,··· ,A 1~@, ~r@+1, A~r@+1,··· ,A 1~r@+1, ··· ~r`, A~r`,··· ,A 1~r` 9 > > > > > > > > > > = > > > > > > > > > > ; .

Notre première condition est précisément l’hypothèse que la famille F génère l’espace vectoriel KN tout entier. Nous discuterons de la validité de cette hypothèse au paragraphe 6.3.5.

Conditions sur le bloc V .

AÆn d’initialiser les ` suites à calculer, l’idée principale consiste à forcer les @ premières d’entre elles à commencer par les @ colonnes denses de M@. En d’autres termes, nous posons ~vi = ~i pour tout indice i dans l’intervalle J1,dK et ~vi = ~ri pour tout i dans l’intervalle J@ + 1,`K. Nous remarquons alors que l’hypothèse faite sur la famillle F peut se réécrire de la façon suivante :

Vect{Ai~vj| i = 0,··· , 1

j = 1,··· ,` }= KN. (6.4) Soit t(t~x|x01|···|x@0 ) un vecteur du noyau de la matrice (A|M@). Si l’équa-tion (6.4) est vériÆée, alors il existe en particulier des coe cients ij 2 K tels que : ~x = ` X j=1 1 X i=0 ijAi~vj.

Aussi nous pouvons en déduire : (A|M@)t(t~x|x01|···|x0@) = ~0 , A ` X j=1 1 X i=0 ijAi~vj + M@t(x10|···|x@0) = ~0 , @ X j=1 X i=1 (i 1)jAi~j + ` X j=@+1 X i=1 (i 1)jAi~rj + @ X j=1 xj0~j = ~0 , ` X j=1 X i=0 aijAi~vj = ~0

où les coe cients aij sont déÆnis via les alternatives suivantes :

aij = 8 > > > < > > > : (i 1)j si i > 0. x0j si i = 0 et j  @. 0 si i = 0 et j > @.

Pour résumer, aussitôt que les conditions données par l’équation (6.4) sur la matrice V = (~v1|···|~v`) sont satisfaites, chaque élément du noyau de la matrice (A|M@) apporte une solution de :

` X j=1 X i=0 aijAi~vj = ~0, (6.5) où les coe cients a0j sont nuls dès que j > @. Réciproquement, (que la condi-tion (6.4) soit vériÆée ou non) n’importe quelle solucondi-tion de l’équacondi-tion (6.5) qui comporte des zéros précisément dans ces positions donne un élément du noyau de (A|M@). Par conséquent, en supposant (6.4), déterminer le noyau de la matrice (A|M@) est équivalent à trouver une base de l’ensemble des solu-tions de l’équation (6.5) en prenant en compte les ` @ zéros sus-mentionnés.

Condition sur le bloc W .

L’équation (6.5) peut se voir bien évidemment comme un système de N équations linéaires sur K. Cependant, résoudre un tel système ne serait pas plus e cace que de calculer directement le noyau de M. Au lieu de cela, nous remarquons que pour chaque matrice W = ( ~w1|···|~w`) consistant en la conca-ténation de ` vecteurs colonnes de KN, une solution (aij) de l’équation (6.5)

6.3. UN ALGORITHME POUR LES MATRICES PRESQUE CREUSES 199 entraine une solution de :

` X j=1 X i=0 aijtw~kAi+~vj = 0 (6.6) pour tout k 2 J1,`K et tout  2 N.

Réciproquement, supposons que nous connaissons une solution(aij)ji2J2J0,1,`KK qui vériÆe l’équation (6.6) pour tout k 2 J1,`K et pour tout  2 J0, 1K. En supposant de plus que :

Vect{tw~jAi| i = 0,··· , 1

j = 1,··· ,` }= KN, (6.7) nous pouvons voir que les coe cients aij forment aussi une solution de l’équa-tion (6.5). En e et, par hypothèse, le vecteur P`j=1Pi=0aijAi~vj est orthogonal à n’importe quel vecteur de la base de KN listé par la condition (6.7). Par conséquent, il s’agit donc du vecteur nul.

Réécriture de l’équation (6.6) à l’aide de matrice de séries formelles.

Nous regroupons maintenant les ` copies de l’équation (6.6) données par les ` valeurs de k dans l’intervalle J1,`K. Plus précisément, notons ~ai le vecteur colonne égal à t(ai1, ai2,··· ,ail). Avec cette notation les ` équations peuvent être regroupées facilement en une unique relation :

X

i=0

(tW Ai+V )· ~ai = ~0. (6.8) DéÆnissons maintenant la série formelle de matrice S(X) et le polynôme vectoriel P(X) comme : S(X) =X i2N (tW AiV )Xi et P(X) =X i=0 ~ aiXB i.

Remarque 6.3.2. Il existe une bijection canonique entre les séries formelles

de matrices (resp. les polynômes vectoriels) et les matrices de séries formelles (resp. les vecteurs de polynômes). Ainsi, si S(X) = Pi2N(Mi)Xi est une série formelle de matrices, alors (S(X)) = ⇣P

i2Nmij,kXi

j,k avec Mi = mij,k

j,k

Dans le document Le logarithme discret dans les corps finis (Page 194-200)