|
procedure Sift(x:Permutation; i : integer);
var j integer;
begin
j := x[i];
if x <> identite and i<= n then
if not Defini(T[i,j]) then T[i,j] := x
else Sift(Inverse(T[i,j]).x,i+1)
end;
La construction du tableau T se fait alors par un appel répété de la procédure sift comme suit:
Etant donné un sous groupe G de S48engendré par A,B,C,D,E,F,et une permutation quelconque a déterminer si a appartient au groupe G; et dans le cas positif donner une décomposition de a comme produit des permutations A,B,C,D,E,F.
| id | s | - | - | - | - | - |
| - | id | - | - | - | a | - |
| - | - | id | - | - | - | - |
| - | - | - | id | - | - | - |
| - | - | - | - | id | - | - |
| - | - | - | - | - | id | - |
| - | - | - | - | - | - | id |
Sift(alpha: permutation):permutation;
begin
u := alpha;
i := 1;
j := alpha[i];
while ( i<= n and not(defini(t[i,j])) do
begin
u := Produit(u,Inverse(T[i,j]));
i:= i + 1;
j := u[i];
end
Sift := u;
end;
On note SiftT(a) la valeur de la permutation u à la fin de l'algorithme Sift,
celle-ci est l'identité si et seulement si la permutation a admet une décomposition ayant
la forme donnée plus haut. Tant qu'il existe un produit xy d'éléments de T tel que SiftT(xy) ¹ id Ajouter SiftT(xy) à T.On remarque que cet algorithme se termine car le nombre de places à l'intérieur du tableau T est limité. Le test d'arrêt consiste à vérifier que tous les produits d'éléments appartenant au tableau ont été calculés et que la procédure Sift leur a été appliquée.
| id | s | s2 | s3 | s4 | s5 | s6 |
| - | id | b1 | b22 | b2 | a | b3 |
| - | - | id | - | g1 | g2 | g3 |
| - | - | - | id | - | - | - |
| - | - | - | - | id | - | - |
| - | - | - | - | - | id | - |
| - | - | - | - | - | - | id |
Ce document a été traduit de LATEX par HEVEA.