Таблицы Симса
Пусть у нас есть какая-то подгруппа группы . Эта перестановочная группа действует на какое-то множество из элементов. Будем обозначать элементы этого множества числами, .
Всё действие описывать сложно. А мы хотим компактно хранить действие и эффективно выполнять базовые тестовые операции. Чарльзом Симсом (Charles Sims) в 1960-х годах были предложены таблицы Симса для эффективного представления и анализа перестановочных групп (подгрупп ).
Перейдем к более широкой и применимой постановке задачи.
Мы по-прежнему рассматриваем перестановки элементов множества . Для простоты скажем, что группа перестановок элементов множества совпадает с . Точнее, , а мы просто поставили тут знак равенства вместо изоморфности.
Возьмём какое-то подмножество перестановок . Порождённая множеством группа — группа , являющейся минимальной по включению подгруппой , содержащей . Мы типа дополнили множество до группы.
Мы хотим научиться для любого подмножества перестановок
- Узнать порядок
- По перестановке узнать, принадлежит ли она
- Создать итератор, выдающий все перестановки из
Таблицы Симса и алгоритм Шрайера – Симса
Хранение и представление
Пусть — подгруппа некоторой конечной группы .
Левая трансверсаль — множество представителей левых смежных классов по , то есть
Аналогично, правая трансверсаль — множество представителей правых смежных классов по , то есть
Любой элемент может быть единственным образом представлен как , где и . Или как , где и , и тоже единственным образом.
Лемма о представлении
Пусть — ряд подгрупп группы .
Тогда любой элемент может быть представлен в виде
Или в виде
Сохраним все трансверсали (левые) в переменные , то есть для всех . Полученный набор трансверсалей называется таблицей Симса группы .
По лемме о представлении заключаем, что таблица Симса содержит всю информацию о группе . То есть вместо хранения объектов мы храним только .
Узнать порядок . По теореме Лагранжа
Перечислить все перестановки из . Из леммы о представлении получаем, что нам достаточно просто перебрать все элементы из трансверсалей. Задача эквивалентна задаче генерации всех кортежей длины , в которых на месте под номером находится элемент из .
Можно представить каждую трансверсаль как список, длина у всех таки списков своя. Получается, можно генерировать числа в смешанной системе счисления с основаниями , и рассматривать элементы кортежа как номера элементов в соответствующих трансверсалях.
array[array] S[k]
iterator all_permutations: