В математике перестановка множества может означать одно из двух :
Примером первого значения являются шесть перестановок (упорядочений) множества {1, 2, 3}: записанные в виде кортежей , они имеют вид (1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2) и (3, 2, 1). Анаграммы слова, все буквы которого различны, также являются перестановками: буквы уже упорядочены в исходном слове, а анаграмма переупорядочивает их. Изучение перестановок конечных множеств является важной темой в комбинаторике и теории групп .
Перестановки используются почти в каждой отрасли математики и во многих других областях науки. В информатике они используются для анализа алгоритмов сортировки ; в квантовой физике — для описания состояний частиц; а в биологии — для описания последовательностей РНК .
Число перестановок n различных объектов равно n факториалу , обычно записываемому как n !, что означает произведение всех положительных целых чисел, меньших или равных n .
Согласно второму значению, перестановка множества S определяется как биекция из S в себя. [2] [3] То есть, это функция из S в S , для которой каждый элемент встречается ровно один раз как значение изображения . Такая функция эквивалентна перестановке элементов S , в которой каждый элемент i заменяется соответствующим . Например, перестановка (3, 1, 2) описывается функцией, определяемой как
Совокупность всех перестановок множества образует группу, называемую симметрической группой множества. Групповая операция — это композиция функций (выполнение одной перестановки за другой), в результате которой получается другая функция (перестановка). Свойства перестановок не зависят от природы переставляемых элементов, а зависят только от их количества, поэтому часто рассматривают стандартный набор .
В элементарной комбинаторике k -перестановки , или частичные перестановки , — это упорядоченные расположения k различных элементов, выбранных из множества. Когда k равно размеру множества, это перестановки в предыдущем смысле.
Подобные перестановкам объекты, называемые гексаграммами, использовались в Китае в « И Цзин» ( пиньинь : И Цзин) еще в 1000 году до нашей эры.
В Греции Плутарх писал, что Ксенократ Халкедонский (396–314 до н. э.) открыл количество различных слогов, возможных в греческом языке. Это была бы первая зафиксированная попытка решить сложную задачу в перестановках и сочетаниях. [4]
Аль-Халиль (717–786), арабский математик и криптограф , написал « Книгу криптографических сообщений» . В ней впервые используются перестановки и комбинации для перечисления всех возможных арабских слов с гласными и без них. [5]
Правило определения количества перестановок n объектов было известно в индийской культуре около 1150 г. н. э. В «Лилавати» индийского математика Бхаскары II есть отрывок, который переводится следующим образом:
Произведением умножения арифметической последовательности, начинающейся и увеличивающейся на единицу и продолжающейся до числа знаков, будут вариации числа с определенными цифрами. [6]
В 1677 году Фабиан Стедман описал факториалы, объясняя количество перестановок колоколов в звоне изменения . Начиная с двух колоколов: «во-первых, два должны быть допущены для изменения двумя способами», что он иллюстрирует, показывая 1 2 и 2 1. [7] Затем он объясняет, что с тремя колоколами «из трех получается трижды по два числа», что снова иллюстрируется. Его объяснение включает «отбросить 3, и останется 1,2; отбросить 2, и останется 1,3; отбросить 1, и останется 2,3». [8] Затем он переходит к четырем колоколам и повторяет аргумент отбрасывания, показывая, что будет четыре различных набора из трех. Фактически, это рекурсивный процесс. Он продолжает с пятью колоколами, используя метод «отбрасывания», и табулирует полученные 120 комбинаций. [9] На этом этапе он сдается и замечает:
Природа этих методов такова, что изменения одного числа охватывают изменения всех меньших чисел, ... настолько, что полный звон изменений одного числа, по-видимому, образован путем объединения полных звонов всех меньших чисел в одно целое; [10]
Стедман расширяет рассмотрение перестановок; он продолжает рассматривать количество перестановок букв алфавита и лошадей из конюшни, состоящей из 20 лошадей. [11]
Первый случай, когда, казалось бы, не связанные между собой математические вопросы изучались с помощью перестановок, произошел около 1770 года, когда Жозеф Луи Лагранж , изучая полиномиальные уравнения, заметил, что свойства перестановок корней уравнения связаны с возможностями его решения. Это направление работы в конечном итоге привело, благодаря работе Эвариста Галуа , к теории Галуа , которая дает полное описание того, что возможно и невозможно в отношении решения полиномиальных уравнений (с одним неизвестным) с помощью радикалов. В современной математике существует много подобных ситуаций, в которых понимание задачи требует изучения определенных перестановок, связанных с ней.
Перестановки сыграли важную роль в криптоанализе машины Enigma , шифровального устройства, использовавшегося нацистской Германией во время Второй мировой войны . В частности, одно важное свойство перестановок, а именно, что две перестановки являются сопряженными именно тогда, когда они имеют одинаковый тип цикла, использовалось криптологом Марианом Реевским для взлома немецкого шифра Enigma в 1932-1933 годах. [12] [13]
В математических текстах принято обозначать перестановки строчными греческими буквами. Обычно используются либо , либо . [14]
Перестановку можно определить как биекцию (обратимое отображение, функция взаимно однозначного соответствия) множества S на себя:
Тождественная перестановка определяется как для всех элементов , и может быть обозначена числом , [a] как , или одним 1-циклом (x). [15] [16] Множество всех перестановок множества с n элементами образует симметрическую группу , где групповая операция — это композиция функций . Таким образом, для двух перестановок и в группе их произведение определяется как:
Композиция обычно пишется без точки или другого знака. В общем случае композиция двух перестановок не является коммутативной :
Как биекция множества на себя, перестановка является функцией, которая выполняет перестановку множества, называемую активной перестановкой или заменой . Более старая точка зрения рассматривает перестановку как упорядоченное расположение или список всех элементов S , называемую пассивной перестановкой . [17] Согласно этому определению, все перестановки в § Однострочная нотация являются пассивными. Это значение тонко отличается от того, как пассивный (т. е. псевдоним ) используется в Активном и пассивном преобразовании и в других местах, [18] [19] которые считали бы все перестановки открытыми для пассивной интерпретации (независимо от того, находятся ли они в однострочной нотации, двухстрочной нотации и т. д.).
Перестановку можно разложить на один или несколько непересекающихся циклов , которые являются орбитами циклической группы, действующей на множестве S . Цикл находится путем многократного применения перестановки к элементу: , где мы предполагаем . Цикл, состоящий из k элементов, называется k -циклом. (См. § Обозначение цикла ниже.)
Неподвижная точка перестановки — это элемент x , который берётся сам в себя, то есть образуя 1-цикл . Перестановка без неподвижных точек называется расстройством . Перестановка, меняющая местами два элемента (один 2-цикл) и оставляющая остальные неподвижными, называется транспозицией .
Для удобного представления перестановок широко используются несколько нотаций. Циклическая нотация является популярным выбором, поскольку она компактна и наглядно показывает структуру перестановки. В этой статье будет использоваться циклическая нотация, если не указано иное.
Двухстрочная нотация Коши [20] [21] перечисляет элементы S в первой строке, а изображение каждого элемента под ним — во второй строке. Например, перестановка S = {1, 2, 3, 4, 5, 6}, заданная функцией
можно записать как
Элементы S могут появляться в любом порядке в первой строке, поэтому эту перестановку можно также записать:
Если существует «естественный» порядок элементов S , например , [b] , то его используют для первой строки двухстрочной записи:
При таком предположении можно опустить первую строку и записать перестановку в одну строку как
то есть, как упорядоченное расположение элементов S . [22] [23] Необходимо соблюдать осторожность, чтобы отличать однострочную нотацию от циклической нотации, описанной ниже: обычно для однострочной нотации опускаются скобки или другие ограничивающие знаки, а для циклической нотации используются скобки. Однострочная нотация также называется представлением слова . [24]
Тогда приведенный выше пример будет выглядеть так:
(Обычно запятые используются для разделения этих записей, только если некоторые из них содержат две или более цифр.)
Эта компактная форма распространена в элементарной комбинаторике и информатике . Она особенно полезна в приложениях, где перестановки должны сравниваться как большие или меньшие, используя лексикографический порядок .
Нотация цикла описывает эффект многократного применения перестановки к элементам множества S , при этом орбита называется циклом . Перестановка записывается в виде списка циклов; поскольку различные циклы включают непересекающиеся наборы элементов, это называется «разложением на непересекающиеся циклы».
Чтобы записать перестановку в циклической нотации, нужно поступить следующим образом:
Кроме того, обычно опускают 1-циклы, поскольку их можно вывести: для любого элемента x в S, не появляющегося ни в одном цикле, неявно предполагается . [25]
Следуя соглашению об исключении 1-циклов, можно интерпретировать отдельный цикл как перестановку, которая фиксирует все элементы, не входящие в цикл ( циклическая перестановка, имеющая только один цикл длины больше 1). Тогда список непересекающихся циклов можно рассматривать как композицию этих циклических перестановок. Например, однострочная перестановка может быть записана в циклической нотации как:
Это можно рассматривать как композицию циклических перестановок:
Хотя перестановки в общем случае не коммутируют, непересекающиеся циклы коммутируют, например:
Кроме того, каждый цикл можно переписать с другой начальной точки, например,
Таким образом, можно записать непересекающиеся циклы данной перестановки многими различными способами. Удобная особенность записи цикла заключается в том, что инвертирование перестановки задается путем изменения порядка элементов в каждом цикле на обратный. Например,
В некоторых комбинаторных контекстах полезно зафиксировать определенный порядок элементов в циклах и самих (непересекающихся) циклов. Миклош Бона называет следующие варианты упорядочения канонической записью цикла:
Например,
(513)(6)(827)(94)
является перестановкой S = {1, 2, . . . , 9} в канонической циклической записи. [26]
Ричард Стэнли называет это «стандартным представлением» перестановки, [27] а Мартин Айгнер использует «стандартную форму». [24] Сергей Китаев также использует терминологию «стандартной формы», но меняет оба выбора; то есть, каждый цикл перечисляет свой минимальный элемент первым, и циклы сортируются в порядке убывания их минимальных элементов. [28]
Существует два способа обозначить композицию двух перестановок. В наиболее распространенной нотации — это функция, которая отображает любой элемент x в . Самая правая перестановка применяется к аргументу первой, [29], поскольку аргумент записан справа от функции.
Другое правило умножения перестановок происходит от записи аргумента слева от функции, так что самая левая перестановка действует первой. [30] [31] [32] В этой нотации перестановка часто записывается как показатель степени, поэтому σ, действующая на x, записывается как x σ ; тогда произведение определяется как . В этой статье используется первое определение, где самая правая перестановка применяется первой.
Операция композиции функций удовлетворяет аксиомам группы . Она ассоциативна , то есть , и произведения более чем двух перестановок обычно записываются без скобок. Операция композиции также имеет элемент тождества (перестановку тождества ), и каждая перестановка имеет обратную (обратную ей функцию ) с .
Концепция перестановки как упорядоченного расположения допускает несколько обобщений, которые назывались перестановками , особенно в старой литературе.
В старой литературе и начальных учебниках k -перестановка n (иногда называемая частичной перестановкой , последовательностью без повторений , вариацией или расположением ) означает упорядоченное расположение (список) k -элементного подмножества n -множества. [c] [33] [34] Число таких k -перестановок ( k -расположений) обозначается по-разному такими символами, как , , , , , или , [35] вычисляется по формуле: [36]
который равен 0, когда k > n , и в противном случае равен
Произведение хорошо определено без предположения, что это неотрицательное целое число, и имеет значение также и за пределами комбинаторики; оно известно как символ Похгаммера или как -я убывающая факториальная степень :
Такое использование термина перестановка тесно связано с термином комбинация , означающим подмножество. K-комбинация множества S является k- элементным подмножеством S : элементы комбинации не упорядочены. Упорядочение k -комбинаций S всеми возможными способами производит k -перестановки S. Таким образом, число k -комбинаций n- множества , C ( n , k ), связано с числом k -перестановок n следующим образом:
Эти числа также известны как биномиальные коэффициенты , обычно обозначаемые :
Упорядоченные расположения k элементов множества S , где допускается повторение, называются k -кортежами . Иногда их называют перестановками с повторением , хотя они не являются перестановками в обычном смысле. Их также называют словами или строками в алфавите S. Если множество S имеет n элементов, число k -кортежей в S равно
Если M — конечное мультимножество , то перестановка мультимножества — это упорядоченное расположение элементов M , в котором каждый элемент появляется количество раз, точно равное его кратности в M. Анаграмма слова, имеющего некоторые повторяющиеся буквы, является примером перестановки мультимножества. [ d] Если кратности элементов M (взятые в некотором порядке) равны , , ..., а их сумма (то есть размер M ) равна n , то количество перестановок мультимножества M задается коэффициентом мультинома , [37]
Например, количество различных анаграмм слова МИССИСИПИ составляет: [38]
K - перестановка мультимножества M — это последовательность из k элементов M, в которой каждый элемент появляется число раз, меньшее или равное его кратности в M ( число повторений элемента ).
Перестановки, рассматриваемые как расположения, иногда называются линейно упорядоченными расположениями. Однако, если объекты расположены в круговой манере, этот выдающийся порядок ослабевает: в расположении нет «первого элемента», поскольку любой элемент может рассматриваться как начало. Расположение различных объектов в круговой манере называется круговой перестановкой . [39] [e] Их можно формально определить как классы эквивалентности обычных перестановок этих объектов для отношения эквивалентности , полученного путем перемещения конечного элемента линейного расположения вперед.
Две круговые перестановки эквивалентны, если одну можно повернуть в другую. Следующие четыре круговые перестановки по четырем буквам считаются одинаковыми.
1 4 2 3 4 3 2 1 3 4 1 2 2 3 1 4
Круговые расположения следует читать против часовой стрелки, поэтому следующие два не эквивалентны, поскольку никакое вращение не может привести одно к другому.
1 1 4 3 3 4 2 2
Существует ( n – 1)! круговых перестановок множества из n элементов.
Число перестановок n различных объектов равно n !.
Число n -перестановок с k непересекающимися циклами — это беззнаковое число Стирлинга первого рода , обозначаемое или . [40]
Циклы (включая неподвижные точки) перестановки множества с n элементами разбивают это множество; поэтому длины этих циклов образуют целочисленное разбиение n , которое называется типом цикла (или иногда структурой цикла или формой цикла ) . В типе цикла есть «1» для каждой неподвижной точки , «2» для каждой транспозиции и т. д. Тип цикла — это
Это также может быть записано в более компактной форме как [1 1 2 2 3 1 ] . Точнее, общая форма такова , где — числа циклов соответствующей длины. Число перестановок данного типа цикла равно [41]
Число типов циклов множества из n элементов равно значению функции статистической суммы .
Полином индекса цикла Полиа представляет собой производящую функцию , которая подсчитывает перестановки по их типу цикла.
В общем случае, составление перестановок, записанных в нотации цикла, не следует легко описываемому шаблону – циклы композиции могут отличаться от тех, которые составляются. Однако тип цикла сохраняется в особом случае сопряжения перестановки другой перестановкой , что означает формирование произведения . Здесь является сопряженным по и его нотация цикла может быть получена путем взятия нотации цикла для и применения ко всем записям в ней. [42] Из этого следует, что две перестановки сопряжены в точности тогда, когда они имеют одинаковый тип цикла.
Порядок перестановки — это наименьшее положительное целое число m, такое что . Это наименьшее общее кратное длин ее циклов. Например, порядок равен .
Каждая перестановка конечного множества может быть выражена как произведение транспозиций. [43] Хотя может существовать много таких выражений для данной перестановки, либо все они содержат четное число транспозиций, либо все они содержат нечетное число транспозиций. Таким образом, все перестановки можно классифицировать как четные или нечетные в зависимости от этого числа.
Этот результат можно расширить так, чтобы присвоить знак , записанный , каждой перестановке. если четно и если нечетно. Тогда для двух перестановок и
Из этого следует, что
Знак перестановки равен определителю ее матрицы перестановки (ниже).
Матрица перестановок — это матрица n × n , которая имеет ровно один элемент 1 в каждом столбце и в каждой строке, а все остальные элементы равны 0. Существует несколько способов назначить матрицу перестановок перестановке {1, 2, ..., n }. Один естественный подход состоит в том, чтобы определить как линейное преобразование , которое переставляет стандартный базис на , и определить как его матрицу. То есть, имеет свой j- й столбец, равный вектору-столбцу n × 1 : его элемент ( i , j ) равен 1, если i = σ ( j ), и 0 в противном случае. Поскольку композиция линейных отображений описывается умножением матриц, следует, что эта конструкция совместима с композицией перестановок:
.
Например, однострочные перестановки имеют произведение , а соответствующие матрицы имеют вид:
В литературе также часто встречается обратное соглашение, когда перестановка σ связана с матрицей, элемент ( i , j ) которой равен 1, если j = σ ( i ) и равен 0 в противном случае. В этом соглашении матрицы перестановок умножаются в обратном порядке от перестановок, то есть . В этом соответствии матрицы перестановок действуют на правой стороне стандартных векторов-строк : .
Таблица Кэли справа показывает эти матрицы для перестановок трех элементов.
В некоторых приложениях элементы переставляемого набора будут сравниваться друг с другом. Для этого требуется, чтобы набор S имел общий порядок , чтобы любые два элемента можно было сравнить. Набор {1, 2, ..., n } с обычным отношением ≤ является наиболее часто используемым набором в этих приложениях.
Ряд свойств перестановки напрямую связан с общим порядком S, если рассматривать перестановку, записанную в однострочной нотации как последовательность .
Подъем перестановки σ числа n — это любая позиция i < n , где следующее значение больше текущего. То есть i — это подъем, если . Например, перестановка 3452167 имеет подъемы (в позициях) 1, 2, 5 и 6 .
Аналогично, спуск — это позиция i < n с , поэтому каждое i с является либо подъемом, либо спуском.
Восходящая последовательность перестановки — это непустая возрастающая непрерывная подпоследовательность, которая не может быть расширена ни с одного конца; она соответствует максимальной последовательности последовательных подъемов (последняя может быть пустой: между двумя последовательными спусками все еще есть восходящая последовательность длины 1). Напротив, возрастающая подпоследовательность перестановки не обязательно является непрерывной: это возрастающая последовательность, полученная путем пропуска некоторых значений однолинейной записи. Например, перестановка 2453167 имеет восходящие последовательности 245, 3 и 167, в то время как она имеет возрастающую подпоследовательность 2367.
Если перестановка имеет k − 1 спусков, то она должна быть объединением k восходящих серий. [44]
Число перестановок n с k подъемами (по определению) является числом Эйлера ; это также число перестановок n с k спусками. Некоторые авторы, однако, определяют число Эйлера как число перестановок с k восходящими сериями, что соответствует k − 1 спускам. [45]
Превышением перестановки σ 1 σ 2 ... σ n называется индекс j такой, что σ j > j . Если неравенство не строгое (то есть σ j ≥ j ), то j называется слабым превышением . Число n -перестановок с k превышениями совпадает с числом n -перестановок с k спусками. [46]
Запись или максимум слева направо перестановки σ — это элемент i, такой что σ ( j ) < σ ( i ) для всех j < i .
Фундаментальная биекция Фоаты преобразует перестановку с заданной канонической формой цикла в перестановку, однострочная запись которой имеет ту же последовательность элементов с удаленными скобками. [27] [47] Например:
Здесь первый элемент в каждом каноническом цикле становится записью (максимум слева направо) . При наличии , можно найти его записи и вставить скобки для построения обратного преобразования . Подчеркивание записей в приведенном выше примере: , что позволяет реконструировать циклы .
В следующей таблице показаны и для шести перестановок S = {1, 2, 3}, причем жирный текст с каждой стороны показывает обозначения, используемые в биекции: однострочное обозначение для и каноническое обозначение цикла для .
В качестве первого следствия, число n -перестановок с ровно k записями равно числу n -перестановок с ровно k циклами: это последнее число является беззнаковым числом Стирлинга первого рода , . Более того, отображение Фоаты переводит n -перестановку с k слабыми превышениями в n -перестановку с k − 1 подъемами. [47] Например, (2)(31) = 321 имеет k = 2 слабых превышений (при индексе 1 и 2), тогда как f (321) = 231 имеет k − 1 = 1 подъем (при индексе 1; то есть от 2 до 3).
Инверсия перестановки σ — это пара ( i , j ) позиций, где элементы перестановки расположены в противоположном порядке: и . [49] Таким образом, спуск — это инверсия в двух соседних позициях. Например, σ = 23154 имеет ( i , j ) = (1, 3), (2, 3) и (4, 5), где ( σ ( i ), σ ( j )) = (2, 1), (3, 1) и (5, 4).
Иногда инверсию определяют как пару значений ( σ ( i ), σ ( j )); это не имеет значения для количества инверсий, а обратная пара ( σ ( j ), σ ( i )) является инверсией в указанном выше смысле для обратной перестановки σ −1 .
Число инверсий является важной мерой степени, в которой элементы перестановки не упорядочены; оно одинаково для σ и для σ −1 . Привести перестановку с k инверсиями в порядок (то есть преобразовать ее в тождественную перестановку) путем последовательного применения (правого умножения на) смежных транспозиций всегда возможно и требует последовательности из k таких операций. Более того, любой разумный выбор для смежных транспозиций будет работать: достаточно выбирать на каждом шаге транспозицию i и i + 1 , где i — спуск перестановки, измененной до сих пор (так что транспозиция удалит этот конкретный спуск, хотя она может создать другие спуски). Это так, потому что применение такой транспозиции уменьшает количество инверсий на 1; пока это число не равно нулю, перестановка не является тождественной, поэтому у нее есть по крайней мере один спуск. Пузырьковая сортировка и сортировка вставками могут быть интерпретированы как частные случаи этой процедуры для упорядочивания последовательности. Кстати, эта процедура доказывает, что любая перестановка σ может быть записана как произведение смежных транспозиций; для этого можно просто обратить любую последовательность таких транспозиций, которая преобразует σ в тождество. Фактически, перечисляя все последовательности смежных транспозиций, которые преобразуют σ в тождество, получаем (после обращения) полный список всех выражений минимальной длины, записывающих σ как произведение смежных транспозиций.
Число перестановок n с k инверсиями выражается числом Махона . [50] Это коэффициент в разложении произведения
Обозначение обозначает q-факториал . Это расширение обычно появляется при изучении ожерелий .
Пусть такое, что и . В этом случае скажем, что вес инверсии равен . Кобаяши (2011) доказал формулу перечисления
где обозначает порядок Брюа в симметричных группах . Этот градуированный частичный порядок часто появляется в контексте групп Кокстера .
Один из способов представления перестановок из n вещей — это целое число N с 0 ≤ N < n !, при условии, что даны удобные методы преобразования между числом и представлением перестановки в виде упорядоченного расположения (последовательности). Это дает наиболее компактное представление произвольных перестановок, и в вычислениях особенно привлекательно, когда n достаточно мало, чтобы N можно было хранить в машинном слове; для 32-битных слов это означает n ≤ 12, а для 64-битных слов это означает n ≤ 20. Преобразование может быть выполнено с помощью промежуточной формы последовательности чисел d n , d n −1 , ..., d 2 , d 1 , где d i — неотрицательное целое число, меньшее i (можно опустить d 1 , так как оно всегда равно 0, но его наличие упрощает описание последующего преобразования в перестановку). Первый шаг заключается в том, чтобы просто выразить N в факториальной системе счисления , которая является просто частным смешанным представлением оснований, где для чисел, меньших n !, основания (значения разрядов или множители умножения) для последовательных цифр равны ( n − 1)!, ( n − 2)!, ..., 2!, 1!. Второй шаг интерпретирует эту последовательность как код Лемера или (почти эквивалентно) как таблицу инверсии.
В коде Лемера для перестановки σ число d n представляет выбор, сделанный для первого члена σ 1 , число d n −1 представляет выбор, сделанный для второго члена σ 2 среди оставшихся n − 1 элементов набора, и так далее. Точнее, каждое d n +1− i дает количество оставшихся элементов, строго меньших, чем член σ i . Поскольку эти оставшиеся элементы обязательно появятся как некоторый более поздний член σ j , цифра d n +1− i подсчитывает инверсии ( i , j ), включающие i как меньший индекс (количество значений j , для которых i < j и σ i > σ j ). Таблица инверсий для σ довольно похожа, но здесь d n +1− k подсчитывает количество инверсий ( i , j ), где k = σ j встречается как меньшее из двух значений, появляющихся в обратном порядке. [51]
Оба кодирования можно визуализировать с помощью диаграммы Роте n на n [52] (названной в честь Генриха Августа Роте ), в которой точки в ( i , σ i ) отмечают записи перестановки, а крест в ( i , σ j ) отмечает инверсию ( i , j ); по определению инверсий крест появляется в любом квадрате, который находится как перед точкой ( j , σ j ) в своем столбце, так и перед точкой ( i , σ i ) в своей строке. Код Лемера перечисляет количество крестов в последовательных строках, в то время как таблица инверсии перечисляет количество крестов в последовательных столбцах; это просто код Лемера для обратной перестановки, и наоборот.
Чтобы эффективно преобразовать код Лемера d n , d n −1 , ..., d 2 , d 1 в перестановку упорядоченного множества S , можно начать со списка элементов S в порядке возрастания и для i, увеличивающегося от 1 до n, установить σ i на элемент в списке, которому предшествуют d n +1− i других, и удалить этот элемент из списка. Чтобы преобразовать таблицу инверсии d n , d n −1 , ..., d 2 , d 1 в соответствующую перестановку, можно пройти по числам от d 1 до d n , вставляя элементы S от наибольшего к наименьшему в изначально пустую последовательность; на шаге с использованием числа d из таблицы инверсии элемент из S вставляется в последовательность в точке, где ему предшествуют d уже имеющихся элементов. В качестве альтернативы можно было бы обрабатывать числа из таблицы инверсии и элементы S в обратном порядке, начиная со строки из n пустых ячеек, и на каждом шаге помещать элемент из S в пустую ячейку, которой предшествуют d других пустых ячеек.
Преобразование последовательных натуральных чисел в факториальную систему счисления создает эти последовательности в лексикографическом порядке (как и в случае с любой смешанной системой счисления), а дальнейшее преобразование их в перестановки сохраняет лексикографический порядок, при условии использования интерпретации кода Лемера (используя таблицы инверсии, мы получаем другой порядок, где мы начинаем со сравнения перестановок по месту их записей 1, а не по значению их первых записей). Сумма чисел в представлении факториальной системы счисления дает количество инверсий перестановки, а четность этой суммы дает сигнатуру перестановки. Более того, позиции нулей в таблице инверсии дают значения максимумов перестановки слева направо (в примере 6, 8, 9), в то время как позиции нулей в коде Лемера являются позициями минимумов справа налево (в примере позиции 4, 8, 9 значений 1, 2, 5); это позволяет вычислить распределение таких экстремумов среди всех перестановок. Перестановка с кодом Лемера d n , d n −1 , ..., d 2 , d 1 имеет подъем n − i тогда и только тогда, когда d i ≥ d i +1 .
В вычислениях может потребоваться генерировать перестановки заданной последовательности значений. Методы, наиболее адаптированные для этого, зависят от того, нужны ли некоторые случайно выбранные перестановки или все перестановки, и в последнем случае требуется ли определенный порядок. Другой вопрос заключается в том, следует ли учитывать возможное равенство между записями в заданной последовательности; если это так, следует генерировать только различные мультимножественные перестановки последовательности.
Очевидный способ генерации перестановок n — это генерация значений для кода Лемера (возможно, используя факториальное представление целых чисел до n !) и преобразование их в соответствующие перестановки. Однако последний шаг, хотя и простой, трудно реализовать эффективно, поскольку он требует n операций для каждого выбора из последовательности и удаления из нее в произвольной позиции; из очевидных представлений последовательности в виде массива или связанного списка , оба требуют (по разным причинам) около n 2 /4 операций для выполнения преобразования. Поскольку n, вероятно, довольно мало (особенно если требуется генерация всех перестановок), это не слишком большая проблема, но оказывается, что как для случайной, так и для систематической генерации существуют простые альтернативы, которые работают значительно лучше. По этой причине не кажется полезным, хотя, безусловно, возможно, использовать специальную структуру данных, которая позволила бы выполнять преобразование из кода Лемера в перестановку за время O ( n log n ) .
Для генерации случайных перестановок заданной последовательности из n значений не имеет значения, применяется ли случайно выбранная перестановка n к последовательности или выбирается случайный элемент из множества различных (мультимножественных) перестановок последовательности. Это происходит потому, что, даже несмотря на то, что в случае повторяющихся значений может быть много различных перестановок n , которые приводят к одной и той же переставленной последовательности, число таких перестановок одинаково для каждого возможного результата. В отличие от систематической генерации, которая становится неосуществимой для больших n из-за роста числа n !, нет никаких оснований предполагать, что n будет малым для случайной генерации.
Основная идея генерации случайной перестановки заключается в генерации случайной одной из n ! последовательностей целых чисел d 1 , d 2 ,..., d n , удовлетворяющих 0 ≤ d i < i (поскольку d 1 всегда равно нулю, его можно опустить) и преобразовании ее в перестановку посредством биективного соответствия. Для последнего соответствия можно интерпретировать (обратную) последовательность как код Лемера, и это дает метод генерации, впервые опубликованный в 1938 году Рональдом Фишером и Фрэнком Йейтсом . [53] Хотя в то время реализация на компьютере не была проблемой, этот метод страдает от описанной выше трудности эффективного преобразования из кода Лемера в перестановку. Это можно исправить, используя другое биективное соответствие: после использования d i для выбора элемента среди i оставшихся элементов последовательности (для уменьшения значений i ), вместо того, чтобы удалять элемент и уплотнять последовательность путем сдвига следующих элементов на одну позицию, можно поменять местами элемент с последним оставшимся элементом. Таким образом, элементы, оставшиеся для выбора, образуют последовательный диапазон в каждый момент времени, даже если они могут не встречаться в том же порядке, что и в исходной последовательности. Отображение последовательности целых чисел в перестановки несколько сложно, но можно увидеть, что оно производит каждую перестановку ровно одним способом, путем непосредственной индукции . Когда выбранный элемент оказывается последним оставшимся элементом, операцию обмена можно опустить. Это происходит недостаточно часто, чтобы оправдать проверку на условие, но последний элемент должен быть включен в число кандидатов выбора, чтобы гарантировать, что все перестановки могут быть сгенерированы.
Полученный алгоритм генерации случайной перестановки можно описать следующим образом на псевдокоде :a[0], a[1], ..., a[n − 1]
для i от n до 2 сделать d i ← случайный элемент из { 0, ..., i − 1 } поменять местами a [ d i ] и a [ i − 1]
Это можно объединить с инициализацией массива следующим образом:a[i] = i
для i от 0 до n −1 do d i +1 ← случайный элемент из { 0, ..., i } a [ i ] ← a [ d i +1 ] a [ d i +1 ] ← i
Если d i +1 = i , первое присваивание скопирует неинициализированное значение, но второе перезапишет его правильным значением i .
Однако алгоритм Фишера-Йетса не является самым быстрым для генерации перестановки, поскольку Фишер-Йетс по сути является последовательным алгоритмом, а процедуры «разделяй и властвуй» могут достигать того же результата параллельно. [54]
Существует множество способов систематического создания всех перестановок заданной последовательности. [55] Один классический, простой и гибкий алгоритм основан на поиске следующей перестановки в лексикографическом порядке , если она существует. Он может обрабатывать повторяющиеся значения, в этом случае он генерирует каждую отдельную перестановку мультимножества один раз. Даже для обычных перестановок он значительно эффективнее, чем создание значений для кода Лемера в лексикографическом порядке (возможно, с использованием факториальной системы счисления ) и преобразование их в перестановки. Он начинается с сортировки последовательности в (слабо) возрастающем порядке (что дает ее лексикографически минимальную перестановку), а затем повторяет продвижение к следующей перестановке, пока она не будет найдена. Метод восходит к Нараяне Пандите в Индии 14 века и часто переоткрывался. [56]
Следующий алгоритм генерирует следующую перестановку лексикографически после заданной перестановки. Он изменяет заданную перестановку на месте.
Например, если задана последовательность [1, 2, 3, 4] (которая идет в порядке возрастания) и индекс начинается с нуля , то шаги будут следующими:
Следуя этому алгоритму, следующей лексикографической перестановкой будет [1, 3, 2, 4], а 24-й перестановкой будет [4, 3, 2, 1], в которой точка a [ k ] < a [ k + 1] не существует, что указывает на то, что это последняя перестановка.
Этот метод использует около 3 сравнений и 1,5 обмена на перестановку, амортизированных по всей последовательности, не считая начальной сортировки. [57]
Альтернатива вышеприведенному алгоритму, алгоритм Штейнхауса–Джонсона–Троттера , генерирует упорядочение всех перестановок заданной последовательности со свойством, что любые две последовательные перестановки в его выходе отличаются заменой двух соседних значений. Это упорядочение перестановок было известно английским звонарям 17-го века, среди которых оно было известно как «простые изменения». Одним из преимуществ этого метода является то, что небольшое количество изменений от одной перестановки к другой позволяет реализовать метод за постоянное время на перестановку. То же самое может также легко генерировать подмножество четных перестановок, снова за постоянное время на перестановку, пропуская каждую другую выходную перестановку. [56]
Альтернативой алгоритму Штейнхауза–Джонсона–Троттера является алгоритм Хипа [58] , который Роберт Седжвик в 1977 году назвал самым быстрым алгоритмом генерации перестановок в приложениях. [55]
На следующем рисунке показаны выходные данные всех трех вышеупомянутых алгоритмов для генерации всех перестановок длины , а также шести дополнительных алгоритмов, описанных в литературе.
Явная последовательность перестановок (транспозиций, 2-циклов ) описана здесь, каждая перестановка применяется (слева) к предыдущей цепочке, обеспечивая новую перестановку, так что все перестановки могут быть извлечены, каждая только один раз. [64] Эта процедура подсчета/генерации имеет дополнительную структуру (назовем ее вложенной), так как она задана пошагово: после полного извлечения , продолжайте извлечение по смежным классам в , соответствующим образом выбирая представителей смежных классов , которые будут описаны ниже. Обратите внимание, что, поскольку каждый генерируется последовательно, есть последний элемент . Таким образом, после генерации с помощью перестановок следующая перестановка в должна быть для некоторого . Затем все сгенерированные перестановки повторяются, генерируя весь смежный класс , достигая последней перестановки в этом смежном классе ; следующий обмен должен переместить перестановку в представителя другого смежного класса .
Продолжая таким же образом, получаем представителей смежных классов для смежных классов в ; упорядоченный набор ( ) называется набором начал смежных классов. Два из этих представителей находятся в одном смежном классе тогда и только тогда , когда , то есть . Заключая, перестановки являются представителями различных смежных классов тогда и только тогда, когда для любого , (условие повторения отсутствует). В частности, для того, чтобы все сгенерированные перестановки были различными, не обязательно, чтобы значения были различными. В процессе получается это , и это обеспечивает процедуру рекурсии.
ПРИМЕРЫ: очевидно, для одного есть ; для построения есть только две возможности для начал смежных классов, удовлетворяющих условию отсутствия повторений; выбор приводит к . Для продолжения генерации нужны соответствующие начала смежных классов (удовлетворяющие условию отсутствия повторений): есть удобный выбор: , приводящий к . Тогда для построения удобный выбор для начал смежных классов (удовлетворяющий условию отсутствия повторений) есть , приводящий к .
Из приведенных выше примеров можно индуктивно перейти к более высоким аналогичным образом, выбирая начала смежных классов в следующим образом: для четных выбираем все начала смежных классов, равные 1, а для нечетных выбираем начала смежных классов, равные . При таком выборе «последняя» перестановка — для нечетных и для четных ( ). Используя эти явные формулы, можно легко вычислить перестановку определенного индекса на этапах подсчета/генерации с минимальными вычислениями. Для этого полезно записывать индекс в факториальной базе. Например, перестановка для индекса : , в результате чего .
Поскольку умножение на перестановку свопом занимает мало времени, а каждая новая сгенерированная перестановка требует только одного такого умножения свопом, эта процедура генерации довольно эффективна. Более того, поскольку существует простая формула, наличие последней перестановки в каждой может сэкономить еще больше времени, чтобы перейти непосредственно к перестановке с определенным индексом за меньшее количество шагов, чем ожидалось, поскольку это можно сделать в блоках подгрупп, а не переставлять по перестановке.
Перестановки используются в компоненте перемежения алгоритмов обнаружения и исправления ошибок , таких как турбокоды , например, стандарт мобильной связи 3GPP Long Term Evolution использует эти идеи (см. техническую спецификацию 3GPP 36.212 [65] ). Такие приложения поднимают вопрос о быстрой генерации перестановок, удовлетворяющих определенным желаемым свойствам. Один из методов основан на полиномах перестановки . Также в качестве основы для оптимального хеширования в Unique Permutation Hashing. [66]
Для обозначения перестановок принято использовать строчные греческие буквы (особенно π, σ и τ).
Перестановка — скажем, имен нескольких людей — может рассматриваться как перемещение либо имен, либо людей. Точка зрения псевдонима рассматривает перестановку как присвоение нового имени или
псевдонима
каждому человеку (от латинского
alias
= иначе). Альтернативно, с точки зрения алиби мы перемещаем людей в места, соответствующие их новым именам (от латинского
alibi
= в другом месте.)
впервые использовал свою систему обозначений перестановок, в которой последовательности записываются одна под другой и обе заключаются в скобки.