Content deleted Content added
No edit summary Tags: Mobile edit Mobile app edit Android app edit |
m Dating maintenance tags: {{Inline}} |
||
(4 intermediate revisions by 4 users not shown) | |||
Line 1:
{{Short description|Algorithm for solving various
{{inline|date=June 2024}}
The '''Schreier–Sims algorithm''' is an [[algorithm]] in [[computational group theory]], named after the mathematicians [[Otto Schreier]] and [[Charles Sims (mathematician)|Charles Sims]]. This algorithm can find the [[Order (group theory)|order]] of a finite permutation group,
== Background and timing ==
Line 13 ⟶ 14:
The use of [[Schreier vector]]s can have a significant influence on the performance of implementations of the Schreier–Sims algorithm.
: <math>O(n \log n \log^4 |G| + tn \log |G|)</math> requiring memory <math>O(n \log |G| + tn)</math>.
== Outline of basic algorithm ==
Following is C++-style pseudo-code for the basic idea of the Schreier-Sims algorithm. It is meant to leave out all finer details, such as memory management or any kind of low-level optimization, so as not to obfuscate the most important ideas of the algorithm.
<syntaxhighlight lang="cpp">
Line 87 ⟶ 88:
</syntaxhighlight>
Notable details left out here include the growing of the orbit tree and the calculation of each new Schreier generator. In place of the orbit tree, a [[Schreier vector]] can be used, but the idea is essentially the same. The tree is rooted at the identity element, which fixes the point stabilized by the subgroup. Each node of the tree can represent a permutation that, when combined with all permutations in the path from the root to it, takes that point to some new point not visited by any other node of the tree. By the [[orbit-stabilizer theorem]], these form a [[Transversal_(combinatorics)#Examples|transversal]] of the subgroup of our group that stabilizes the point whose entire orbit is maintained by the tree. Calculating a Schreier generator is a simple
Another detail left out is the membership test. This test is based upon the sifting process. A permutation is sifted down the chain at each step by finding the containing coset, then using that coset's representative to find a permutation in the subgroup, and the process is repeated in the subgroup with that found permutation. If the end of the chain is reached (i.e., we reach the trivial subgroup), then the sifted permutation was a member of the group at the top of the chain.
|