Таблицы Симса

Пусть у нас есть какая-то подгруппа GG группы Sn\S_n. Эта перестановочная группа GG действует на какое-то множество XX из nn элементов. Будем обозначать элементы этого множества числами, X={1,2,3,,n1,n}X = \{1, 2, 3, \dotsc, n-1, n\}.

Всё действие описывать сложно. А мы хотим компактно хранить действие и эффективно выполнять базовые тестовые операции. Чарльзом Симсом (Charles Sims) в 1960-х годах были предложены таблицы Симса для эффективного представления и анализа перестановочных групп (подгрупп Sn\S_n).

Перейдем к более широкой и применимой постановке задачи.

Мы по-прежнему рассматриваем перестановки элементов множества X={1,2,3,,n1,n}X = \{1, 2, 3, \dotsc, n-1, n\}. Для простоты скажем, что группа перестановок элементов множества XX совпадает с Sn\S_n. Точнее, Aut(X)Sn\Aut(X) \isom \S_n, а мы просто поставили тут знак равенства вместо изоморфности.

Возьмём какое-то подмножество перестановок SSnS \subset \S_n. Порождённая множеством SS группа — группа S\langle S \rangle, являющейся минимальной по включению подгруппой Sn\S_n, содержащей SS. Мы типа дополнили множество SS до группы.

Мы хотим научиться для любого подмножества перестановок SSnS \subset \S_n

  • Узнать порядок S\bigl| \langle S \rangle \bigr|
  • По перестановке σ\sigma узнать, принадлежит ли она S\langle S \rangle
  • Создать итератор, выдающий все перестановки из S\langle S \rangle

Таблицы Симса и алгоритм Шрайера – Симса

Хранение и представление

Пусть HH — подгруппа некоторой конечной группы GG.

Левая трансверсаль G/tHG \ltrans H — множество представителей левых смежных классов GG по HH, то есть

G/tH   ⁣=def   ⁣trans{gHgG}G \ltrans H \defeq \trans \{ g \cdot H \mid \forall\, g \in G \}

Аналогично, правая трансверсаль G\tHG \rtrans H — множество представителей правых смежных классов GG по HH, то есть

G\tH   ⁣=def   ⁣trans{HggG}G \rtrans H \defeq \trans \{ H \cdot g \mid \forall\, g \in G \}

Любой элемент gGg \in G может быть единственным образом представлен как g=thg = t \cdot h, где tG/tHt \in G \ltrans H и hHh \in H. Или как g=htg = h \cdot t, где tG\tHt \in G \rtrans H и hHh \in H, и тоже единственным образом.

Лемма о представлении

Пусть G=G(0)G(1)G(2)G(k1)G(k)={1}G = G^{(0)} \ge G^{(1)} \ge G^{(2)} \ge \dotsb \ge G^{(k-1)} \ge G^{(k)} = \{\1\} — ряд подгрупп группы GG.

Тогда любой элемент gGg \in G может быть представлен в виде

g=g1g2gkгде gjG(j1)/tG(j) для всех 1jkg = g_1 \cdot g_2 \dotsm g_k \quad\text{где}~ g_j \in G^{(j-1)} \ltrans G^{(j)} ~\text{для всех}~ 1 \le j \le k

Или в виде

g=gkgk1g1где gjG(j1)\tG(j) для всех 1jkg = g_k \cdot g_{k-1} \dotsm g_1 \quad\text{где}~ g_j \in G^{(j-1)} \rtrans G^{(j)} ~\text{для всех}~ 1 \le j \le k

Сохраним все трансверсали (левые) в переменные S1,S2,,SkS_1, S_2, \dotsc, S_k, то есть Sj   ⁣=def   ⁣G(j1)/tG(j)S_j \defeq G^{(j-1)} \ltrans G^{(j)} для всех 1jk1 \le j \le k. Полученный набор трансверсалей называется таблицей Симса группы GG.

По лемме о представлении заключаем, что таблица Симса S1,S2,,SkS_1, S_2, \dotsc, S_k содержит всю информацию о группе GG. То есть вместо хранения G=j=1kSj|G| = \prod\limits_{j=1}^k |S_j| объектов мы храним только j=1kSj\sum\limits_{j=1}^k |S_j|.

Узнать порядок G|G|. По теореме Лагранжа

G=S1S2Sk|G| = |S_1| \cdot |S_2| \dotsm |S_k|

Перечислить все перестановки из GG. Из леммы о представлении получаем, что нам достаточно просто перебрать все элементы из трансверсалей. Задача эквивалентна задаче генерации всех кортежей длины kk, в которых на месте под номером jj находится элемент из SjS_j.

Можно представить каждую трансверсаль SjS_j как список, длина у всех таки списков своя. Получается, можно генерировать числа в смешанной системе счисления с основаниями S1,S2,,Sk|S_1|, |S_2|, \dotsc, |S_k|, и рассматривать элементы кортежа как номера элементов в соответствующих трансверсалях.

array[array] S[k] iterator all_permutations:

Strong Generating Sets (SGS)

Schreier-Sims Algorithm