Given a finite group $G < Sym(\Omega)$; $\Omega$ finite, and $X \subset \Omega$, I can define a by the function $H(g) = \{x^g \| x \in X\}$ for each $g \in G$. Of course, each $H$ has the same size as $X$. Two different elements of $G$, $g_1,g_2$ may generate the same set $H(g_1)=H(g_2)$. Taking the collection of all such sets, $\mathscr{H} = \bigcup_{g \in G} H(g)$
I need to find $\mathscr{H}$, so what is the fastest way to find $F \subset G$ such that $\mathscr{H}$ is the disjoint union over $F$?
(I'm more interested mathematically how to do so, but I also need to compute the result. I am using GAP currently, with the following script:
setToThe := function(set,g)
local x, l, i, s;
l := [];
i := 1;
for s in set do
x := s^g;
l[i] := x;
i := i + 1;
od;
return l;
end;
grp := ...;
set := ...;
unique := [];
unique[1] := set;
for g in grp do
allGood := true;
startUnique := Size(unique);
for j in [1..startUnique] do
newset := setToThe(set,g);
Sort(newset);
if newset = unique[j] then
allGood := false;
break;
fi;
od;
if allGood then
unique[Size(unique)+1] := newset;
fi;
od;