Dear forum,
Javaid Aslam asked:
I am trying to see if somebody has a routine for
factoring a given permutation cycle into a product of the
the transpositions (cycles of length 2);
e.g., the cycle (1,2,3,4) factors into (3,4)*(2,3)*(1,2).
a routine for this question was given by Burkhard.
Here is a function which decomposes a given permutation into
a product of two involutions (perms of order 2):
#F InvolutionFactors( perm )
#F returns a pair [x, y] of permutations such that
#F x*y = perm and x^2 = y^2 = (). The involutions
#F x and y move at most the points moved by perm.
#F
InvolutionFactors := function ( perm )
local x, y, c, n, i;
if not IsPerm(perm) then
Error("<perm> must be a permutation");
fi;
if OrderPerm(perm) <= 2 then
return [ perm, () ];
fi;
x := ();
y := ();
for c in Cycles(perm, [1..LargestMovedPointPerm(perm)]) do
n := Length(c);
for i in [1..QuoInt(n-1, 2)] do
x := x * (c[i], c[n-i]);
od;
for i in [1..QuoInt(n, 2)] do
y := y * (c[i], c[n+1-i]);
od;
od;
return [x, y];
end;
Maybe this is interesting for you too
Markus Pueschel,
Sebastian Egner