There is another problem, which I outlined to Martin a while ago.
Once it has decided where in the set the new entry is to be added,
AddSet then has to do O(N) work to make room for it by moving half
the set. The constant is pretty low, but it's still O(N).
yes, that is true. And again for the same reasons there is no easy way
to get rid of the problem, once you decided that sets should (regarding
access and assignment) behave like lists.
My solution to this is to use blists rather than sets whenever
possible, and I have functions FastOrbit and FastOrbits which do
this, and differ from Orbit only in that they require the domain to
be given in full. Ideally functions like the Random Schreier-Sims
should use these techniques also.
yes, that is a very good idea if your domain is small enough.
One could also try to write GAP functions for BTrees or other more
advances techniques. I would love to hear if anybody has already
done experiments into this direction.
This raises another point, maybe we should set up a directory
where we can collect small functions which are not large
enough to qualify as a share library but useful enough to be
of interest for other people? For instances, I think,
your 'FastOrbit(s)' would be such a function.