В математике, перестановка набора , грубо говоря, является компоновкой его элементов в последовательность или линейную заказ, или, если набор уже заказан, перестановка его элементов. Слово «перестановка» также относится к действию или процессу изменения линейного порядка упорядоченного набора.
Перестановки отличаются от комбинаций, которые являются выборками некоторых элементов набора независимо от приказ. Например, записанный как кортежи, существует шесть перестановок набора {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 к самому себе. То есть это функция от S до S, для которой каждый элемент встречается ровно один раз как значение image. Это связано с перестановкой элементов S, в которой каждый элемент s заменяется соответствующим f (s). Например, указанная выше перестановка (3,1,2) описывается функцией , определяемой как:
Коллекция всех перестановок набора образуют группу, называемую симметричной группой набора. Групповая операция - это композиция (выполнение двух заданных перегруппировок подряд), которая приводит к другой перегруппировке. Поскольку свойства перестановок не зависят от природы элементов набора, часто это перестановки набора , которые рассматриваются для изучения перестановок.
В элементарной комбинаторике k-перестановки или частичные перестановки - это упорядоченные расположения k различных элементов, выбранных из набора. Когда k равно размеру набора, это перестановки набора.
В популярной головоломке кубик Рубика, изобретенной в 1974 году Эрно Рубиком, каждый поворот граней головоломки создает перестановку цветов поверхности.Аль-Халил (717–786), арабский математик и Шифровальщик написал Книгу криптографических сообщений. Он содержит первое использование перестановок и комбинаций для перечисления всех возможных арабских слов с гласными и без них.
Правило для определения количества перестановок n объектов был известен в индийской культуре около 1150 года. Лилавати индийского математика Бхаскара II содержит отрывок, который переводится как:
произведение умножения арифметического ряда, начинающегося и возрастающего на единицы и продолжаются до числа мест, будут вариации числа с конкретными цифрами.
В 1677 году Фабиан Стедман описал факториалы, объясняя количество перестановок колоколов в изменении звона. Начиная с двух колокольчиков: «во-первых, два должны быть допущены к изменению двумя способами», что он иллюстрирует, показывая 1 2 и 2 1. Затем он объясняет, что с тремя колокольчиками «трижды две фигуры должны быть изготовлены из три », что снова проиллюстрировано. Его объяснение включает в себя «отбросьте 3, и 1.2 останется; отбросьте 2, и 1.3 останется; отбросьте 1, и 2.3 останется». Затем он переходит к четырем колокольчикам и повторяет аргумент отвержения, показывающий, что будет четыре разных набора из трех. По сути, это рекурсивный процесс. Он продолжает с пятью колокольчиками, используя метод «отбрасывания», и составляет итоговые 120 комбинаций. В этот момент он сдаётся и замечает:
Природа этих методов такова, что изменения одного числа включают изменения всех меньших чисел... до такой степени, что кажется, что полный Пик изменений одного числа быть сформированным путем объединения полных перезвонов на всех меньших числах в одно целое;
Стедман расширяет рассмотрение перестановок; он продолжает рассматривать количество перестановок букв алфавита и лошадей из конюшни 20.
Первый случай, когда, казалось бы, не связанные математические вопросы изучались с помощью перестановок, произошел около 1770 года, когда Джозеф Луи Лагранж при изучении полиномиальных уравнений заметил, что свойства перестановок корней уравнения связаны с возможностями его решения. Эта работа в конечном итоге привела к работе Эвариста Галуа в теории Галуа, которая дает полное описание того, что возможно и что невозможно в отношении решения полиномиальных уравнений (в одном неизвестно) радикалами. В современной математике существует множество подобных ситуаций, в которых понимание проблемы требует изучения определенных перестановок, связанных с ней.
В текстах по математике принято обозначать перестановки строчными греческими буквами. Обычно либо и , либо и .
Перестановки могут быть определены как биекции из множества S в себя. Все перестановки набора с n элементами образуют симметричную группу , обозначенную , где групповая операция это композиция функции. Таким образом, для двух перестановок и в группе , четыре аксиомы группы верны:
В общем, композиция двух перестановок не коммутативна, то есть
Как биекция набора самому себе, перестановка - это функция, которая выполняет перестановку набора, а не сама перестановка. Более старая и более элементарная точка зрения состоит в том, что перестановки - это сами перестановки. Чтобы различать эти два идентификатора, активный и пассивный иногда добавляются к термину перестановка, тогда как в старой терминологии используются подстановки и перестановки.
Перестановка может быть разложена на один или несколько непересекающихся циклов, т. Е. орбиты, которые обнаруживаются путем многократного отслеживания применения перестановки к некоторым элементам. Например, перестановка , определенная как , имеет 1-цикл, , а перестановка определяется как и имеет 2 цикла (подробности о синтаксисе см. В § Обозначение цикла ниже). В общем случае цикл длины k, то есть состоящий из k элементов, называется k-циклом.
Элемент в 1-цикле называется фиксированной точкой перестановки. Перестановка без фиксированных точек называется расстройством. 2-циклы называются транспозициями ; такие перестановки просто меняют два элемента, оставляя другие неизменными.
Поскольку запись перестановок поэлементно, то есть как кусочно функций, является громоздкой, было изобретено несколько обозначений, чтобы представить их более компактно. Обозначение цикла является популярным выбором для многих математиков из-за его компактности и того факта, что оно делает структуру перестановки прозрачной. Это обозначение, используемое в этой статье, если не указано иное, но другие обозначения все еще широко используются, особенно в прикладных областях.
В двухстрочной нотации Cauchy в первой строке перечислены элементы S, а для каждого из них - изображение под ней. во втором ряду. Например, конкретная перестановка множества S = {1,2,3,4,5} может быть записана как:
это означает, что σ удовлетворяет σ (1) = 2, σ (2) = 5, σ (3) = 4, σ (4) = 3 и σ (5) = 1. Элементы S могут появляться в любом порядке в первой строке. Эту перестановку можно также записать как:
или
Если существует "естественный" порядок для элементов S, скажем, , затем используется для первой строки двухстрочной записи:
В этом предположении можно опустить первую строку и записать перестановку в одну строку обозначение как
то есть упорядоченное расположение S. Необходимо проявлять осторожность, чтобы отличать однострочные обозначения от обозначение цикла описано ниже. В математической литературе обычно используется опускание скобок для однострочных обозначений и их использование для обозначений циклов. Однострочное обозначение также называется представлением слова перестановки. В приведенном выше примере будет 2 5 4 3 1, поскольку для первой строки будет принят естественный порядок 1 2 3 4 5. (Обычно эти записи разделяются запятыми, только если некоторые из них состоят из двух или более цифр.) Эта форма более компактна и распространена в элементарной комбинаторике и информатике. Это особенно полезно в приложениях, где элементы S или перестановки должны сравниваться как больше или меньше.
Обозначение цикла описывает эффект многократного применения перестановки к элементам набора. Он выражает перестановку как произведение циклов ; поскольку различные циклы непересекающиеся, это называется «разложением на непересекающиеся циклы».
Чтобы записать перестановку в обозначении цикла поступают следующим образом:
Поскольку для каждого нового цикла начальная точка может быть выбрана по-разному, обычно существует много разных обозначения цикла для одной и той же перестановки; в приведенном выше примере:
1-циклы - это часто опускается из обозначения цикла, при условии ясности контекста; для любого элемента x в S, не появляющегося ни в одном цикле, неявно предполагается . тождественная перестановка, которая состоит только из 1-циклов, может быть обозначена одним 1-циклом (x), числом 1 или идентификатором.
Удобная функция Обозначение цикла состоит в том, что можно найти инверсию перестановки, просто изменив порядок элементов в циклах перестановки. Например,
В некоторых комбинаторных контекстах полезно зафиксировать определенный порядок элементов в циклах и самих (непересекающихся) циклов. Миклош Бона называет следующие варианты упорядочения канонической нотацией цикла:
Например, (312) (54) (8) (976) - это перестановка в канонической записи цикла. Обозначение канонических циклов не исключает одноцикловых.
Ричард П. Стэнли называет такой же выбор представления «стандартным представлением» перестановки. и Мартин Айгнер использует термин «стандартная форма» для обозначения того же понятия. Сергей Китаев также использует терминологию «стандартной формы», но меняет оба варианта; то есть каждый цикл сначала перечисляет свой наименьший элемент, а циклы сортируются в порядке убывания наименьшего, то есть первых элементов.
Есть два способа обозначить композиция из двух перестановок. - это функция, которая отображает любой элемент x набора в . Самая правая перестановка применяется к аргументу первой из-за способа написания приложения функции.
Поскольку композиция функции является ассоциативной, то же самое и операция композиции для перестановок: . Следовательно, произведения более двух перестановок обычно пишутся без добавления скобок для выражения группировки; они также обычно пишутся без точки или другого знака для обозначения композиции.
Некоторые авторы предпочитают, чтобы первым действовал крайний левый фактор, но с этой целью перестановки должны быть записаны справа от их аргумента, часто в виде экспоненты, где σ, действующий на x, записывается x; тогда произведение определяется как x = (x). Однако это дает другое правило для умножения перестановок; в этой статье используется определение, в котором сначала применяется самая правая перестановка.
Концепция перестановки как упорядоченного расположения допускает несколько обобщений, которые не являются перестановками, но в литературе называются перестановками.
Более слабое значение термина «перестановка», иногда используемое в текстах по элементарной комбинаторике, обозначает те упорядоченные расположения, в которых ни один элемент не встречается более одного раза, но без требования используя все элементы из данного набора. Это не перестановки, за исключением особых случаев, а естественные обобщения концепции упорядоченного расположения. В самом деле, это использование часто включает рассмотрение компоновок фиксированной длины k элементов, взятых из данного набора размера n, другими словами, эти k-перестановки n представляют собой различные упорядоченные компоновки k-элемента подмножество n-набора (иногда называемое вариациями или расположениями в более ранней литературе). Эти объекты также известны как частичные перестановки или как последовательности без повторения, термины, которые избегают путаницы с другим, более распространенным значением термина «перестановка». Количество таких -перестановок по-разному обозначается такими символами, как , , , или и его значение дается произведением
который равен 0, когда k>n, и в противном случае равно
Продукт хорошо определен без предположения, что не- отрицательное целое число, а также важно вне комбинаторики; он известен как символ Поххаммера или как -я падающая факторная мощность of .
Это использование термин «перестановка» тесно связан с термином комбинация. Комбинация k элементов n-множества S - это подмножество k элементов S, элементы которого не упорядочены. Взяв все k элементных подмножеств S и упорядочив каждое из них всеми возможными способами, мы получим все k-перестановки S. Следовательно, количество k-комбинаций n-множества, C (n, k), равно связано с количеством k-перестановок n следующим образом:
Эти числа также известны как биномиальные коэффициенты и обозначаются .
Упорядоченные расположения элементов множества S длины n, где повторение разрешенные называются n-кортежами, но иногда их называют перестановками с повторением, хотя в целом они не являются перестановками. В некоторых контекстах они также называются словами в алфавите S. Если набор S имеет k элементов, количество кортежей над S составляет:
Нет ограничений на то, как часто элемент может появляться в n-кортеже, но если наложены ограничения на то, как часто может появляться элемент, эта формула больше не действует.
Если M - конечное мультимножество, то перестановка мультимножеств - это упорядоченное расположение элементов M в каждый элемент встречается столько раз, сколько он равен его кратности в M. Анаграмма слова, имеющего несколько повторяющихся букв, является примером перестановки мультимножества. Если кратности элементов M (взятые в некотором порядке) равны , ,..., и их сумма (то есть размер M) равна n, тогда количество перестановок мультимножества M определяется как полиномиальный коэффициент,
Например, количество различных анаграмм слова MISSISSIPPI составляет:
A k-перестановка мультимножества M - это последовательность длины k элементов M, в которых каждый элемент встречается в несколько раз меньше или равных его кратности в M (количество повторений элемента).
Перестановки, когда они рассматриваются как компоновки, иногда называют линейно упорядоченными компоновками. В этих механизмах есть первый элемент, второй элемент и так далее. Если, однако, объекты расположены по кругу, этого выделенного порядка больше не существует, то есть в расположении нет «первого элемента», любой элемент можно рассматривать как начало расположения. Расположение объектов по кругу называется круговыми перестановками . Их можно формально определить как классы эквивалентности обычных перестановок объектов для отношения эквивалентности, сгенерированного перемещением последнего элемента линейного устройства на передний план.
Две круговые перестановки эквивалентны, если одна может быть повернута в другую (то есть циклически повторяться без изменения относительного положения элементов). Следующие две круговые перестановки четырех букв считаются одинаковыми.
1 4 4 3 2 1 2 3
Круговые расположения следует читать против часовой стрелки, поэтому следующие два не эквивалентны, поскольку никакое вращение не может привести друг к другу.
1 1 4 3 3 4 2 2
Число циклических перестановок набора S с n элементами равно (n - 1) !.
Число перестановок n различных объектов равно n !.
Число n-перестановок с k непересекающимися циклами - это беззнаковое число Стирлинга первого рода, обозначаемое c (n, k).
Циклы перестановки разбивают множество , поэтому длины циклов перестановки формируют раздел из n, называемый типом цикла из . В типе цикла есть «1» для каждой фиксированной точки σ, «2» для каждой транспозиции и так далее. Тип цикла - это (3,2,2,1), которое иногда записывается в более компактной форме как [123].
Общая форма: , где - количество циклов соответствующей длины. Количество перестановок определенного типа
В общем, составление перестановок, записанных в нотации цикла, не следует легко описываемому образцу - циклам композиции могут отличаться от составляемых. Однако структура цикла сохраняется в частном случае сопряжения перестановки другой перестановкой , что означает формирование продукта . Здесь является конъюгатом и его обозначение цикла можно получить, взяв обозначение цикла для и применив ко всем записи в нем. Отсюда следует, что две перестановки сопряжены именно тогда, когда они имеют один и тот же тип.
Порядок перестановки - это наименьшее положительное целое число m, так что . Это наименьшее общее кратное длин его циклов. Например, порядок равен .
Каждая перестановка конечного набора может быть выражена как произведение транспозиций. Хотя может существовать много таких выражений для данной перестановки, все они содержат четное или нечетное количество транспозиций. Таким образом, все перестановки можно классифицировать как четные или нечетные в зависимости от этого числа.
Этот результат можно расширить, присвоив знак, записанный , каждой перестановке. , если четное и , если нечетно. Затем для двух перестановок и
Отсюда следует, что
Один может представлять перестановку {1, 2,..., n} как матрицу размера n × n . Есть два естественных способа сделать это, но только один, для которого умножение матриц соответствует умножению перестановок в том же порядке: это тот, который связывает с σ матрицу M, элемент которой M i, j равно 1, если i = σ (j), и 0 в противном случае. Результирующая матрица имеет ровно одну запись 1 в каждом столбце и в каждой строке и называется матрицей перестановок.. Здесь (файл ) - список этих матриц для перестановок 4 элементы. Таблица Кэли справа показывает эти матрицы для перестановок 3 элементов.
Между однострочным и каноническим циклом существует связь. Рассмотрим перестановку в канонической записи цикла, если мы удалим ее циклических скобок, мы получаем перестановку в однострочном обозначении. Лемма Фоата о переходах устанавливает природу этого соответствия как биекции на множестве n-перестановок (на себя). Ричард П. Стэнли называет это соответствие фундаментальной биекцией.
Пусть будет преобразованием со стиранием скобок. Обратное к немного менее интуитивно понятно. Начиная с однострочной записи , первый цикл канонической нотация цикла должна начинаться с . Пока последующие элементы меньше , мы находимся в том же цикле. Второй цикл начинается с наименьшего индекса , такого что . Другими словами, больше, чем все остальное слева от него, поэтому он называется максимумом слева направо. Каждый цикл в канонической записи цикла начинается с максимум слева направо.
Например, в однострочном обозначении , 5 - это первый элемент больше 3, поэтому первый цикл должен быть . Тогда 8 - это следующий элемент больше 5, поэтому второй цикл равен . Поскольку 9 больше 8, сам по себе является циклом. Наконец, 9 я s больше всех остальных элементов справа, поэтому последний цикл равен .
В качестве первого следствия число n-перестановок с ровно k максимумов слева направо также равно беззнаковому числу Стирлинга первого рода, . Кроме того, отображение Фоаты принимает n-перестановку с k-слабым исходом в n-перестановку с k - 1 восхождением. Например, (2) (31) = 321 имеет два слабых выхода (с индексом 1 и 2), тогда как f (321) = 231 имеет одно восхождение (с индексом 1, то есть от 2 до 3).
В некоторых приложениях элементы переставляемого набора будут сравниваться друг с другом. Для этого требуется, чтобы набор S имел общий порядок, чтобы можно было сравнивать любые два элемента. Набор {1, 2,..., n} полностью упорядочен обычным отношением «≤», поэтому он является наиболее часто используемым набором в этих приложениях, но в целом подойдет любой полностью упорядоченный набор. В этих приложениях вид упорядоченной компоновки перестановки необходим, чтобы говорить о позициях в перестановке.
Существует ряд свойств, которые напрямую связаны с общим упорядочением S.
Восхождение перестановки σ числа n - любая позиция i < n where the following value is bigger than the current one. That is, if σ = σ1σ2... σ n, тогда i - восхождение, если σ i< σi + 1.
Например, перестановка 3452167 имеет восхождения (в позициях) 1, 2, 5 и 6.
Точно так же спуск - это позиция i < n with σi>σi + 1, поэтому каждый i с
Восходящая последовательность перестановки - это непустая возрастающая непрерывная подпоследовательность перестановки, которая не может быть расширена ни на одном конце; он соответствует максимальной последовательности последовательных восхождений (последний может быть пустым: между двумя последовательными спусками еще есть восходящий пробег длиной 1). Напротив, возрастающая подпоследовательность перестановки не обязательно является непрерывной: это возрастающая последовательность элементов, полученная в результате перестановки путем пропуска значений в некоторых позициях. Например, перестановка 2453167 имеет возрастающие серии 245, 3 и 167, в то время как она имеет возрастающую подпоследовательность 2367.
Если перестановка имеет k - 1 спусков, то она должна быть объединением k возрастающих последовательностей.
Количество перестановок n с k восхождениями равно (по определению) число Эйлера ; это также количество перестановок n с k спусками. Однако некоторые авторы определяют число Эйлера как количество перестановок с k возрастающими последовательностями, которые соответствует k - 1 спусков.
Избыток перестановки σ 1σ2... σ n - это индекс j такой, что σ j>j. Если неравенство не строгое (то есть σ j ≥ j), то j называется слабым отсутствием. Количество n-перестановок с k исключениями совпадает с количеством n-перестановок с k спусками.
инверсия перестановки σ - это пара (i, j) позиций, в которых элементы перестановки находятся в противоположном порядке : я < j and σ_i>σ_j. Таким образом, спуск - это просто инверсия в двух соседних позициях. Например, перестановка σ = 23154 имеет три инверсии: (1,3), (2,3), (4,5) для пар элементов (2,1), (3,1), (5, 4).
Иногда инверсия определяется как сама пара значений (σ i,σj), порядок которых обратный; это не имеет значения для количества инверсий, и эта пара (обратная) также является инверсией в указанном выше смысле для обратной перестановки σ. Количество инверсий является важным показателем степени, в которой элементы перестановка вышла из строя; это то же самое для σ и для σ. Привести перестановку с k инверсиями в порядок (то есть преобразовать ее в тождественную перестановку) путем последовательного применения (правого умножения на) смежных транспозиций всегда возможно и требует последовательности из k таких операций. Более того, любой разумный выбор для смежных транспозиций будет работать: достаточно выбрать на каждом шаге транспонирование i и i + 1, где i - спуск перестановки, измененной до сих пор (так что транспонирование удалит этот конкретный спуск, хотя это может создать другие спуски). Это так, потому что применение такой перестановки уменьшает количество инверсий на 1; пока это число не равно нулю, перестановка не является тождеством, поэтому она имеет по крайней мере один спуск. Пузырьковая сортировка и сортировка вставкой могут интерпретироваться как частные экземпляры этой процедуры для упорядочивания последовательности. Между прочим, эта процедура доказывает, что любую перестановку σ можно записать как произведение смежных транспозиций; для этого можно просто обратить любую последовательность таких перестановок, которая преобразует σ в тождество. Фактически, перечисляя все последовательности смежных транспозиций, которые преобразовали бы σ в идентичность, можно получить (после обращения) полный список всех выражений минимальной длины, записывая σ как произведение смежных транспозиций.
Количество перестановок n с k инверсиями выражается числом Махона, это коэффициент перед X в разложении произведения
, который также известен (где q заменен на X) как q-факториал [n ] q !. Расширение продукта появляется в Ожерелье (комбинаторика).
Один из способов представления перестановок n - это целое число N с 0 ≤ N < n!, provided convenient methods are given to convert between the number and the representation of a permutation as an ordered arrangement (sequence). This gives the most compact representation of arbitrary permutations, and in computing is particularly attractive when n is small enough that N can be held in a machine word; for 32-bit words this means n ≤ 12, and for 64-bit words this means n ≤ 20. The conversion can be done via the intermediate form of a sequence of numbers dn, d n-1,..., d 2, d 1, где d i не- отрицательное целое число меньше i (можно опустить d 1, поскольку оно всегда равно 0, но его наличие упрощает описание последующего преобразования в перестановку). Тогда первым шагом будет просто выразить N в факториальной системе счисления , которая представляет собой просто конкретное представление смешанного основания, где для чисел до n! основания для последовательных цифр - n, n - 1,..., 2, 1. На втором этапе эта последовательность интерпретируется как код Лемера или (почти то же самое) как таблица инверсии.
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | код Лемера |
---|---|---|---|---|---|---|---|---|---|---|
1 | × | × | × | × | × | • | d9= 5 | |||
2 | × | × | • | d8= 2 | ||||||
3 | × | × | × | × | × | • | d7= 5 | |||
4 | • | d6= 0 | ||||||||
5 | × | • | d5= 1 | |||||||
6 | × | × | × | • | d4= 3 | |||||
7 | × | × | • | d3= 2 | ||||||
8 | • | d2= 0 | ||||||||
9 | • | d1= 0 | ||||||||
Таблица инверсии | 3 | 6 | 1 | 2 | 4 | 0 | 2 | 0 | 0 |
В коде Лемера для перестановки σ число 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 and σi>σj). Таблица инверсии для σ очень похожа, но здесь d n + 1 − k подсчитывает количество инверсий (i, j), где k = σ j появляется как меньшее из двух значений, указанных в обратном порядке. Обе кодировки можно визуализировать с помощью n на n диаграммы Роте (названной в честь Генриха Августа Роте ), в которой точки в (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 / 4 операций для выполнения преобразования. Поскольку n, вероятно, будет довольно маленьким (особенно, если требуется генерация всех перестановок), это не слишком большая проблема, но оказывается, что как для случайной, так и для систематической генерации есть простые альтернативы, которые работают значительно лучше. По этой причине не представляется полезным, хотя определенно возможным, использование специальной структуры данных, которая позволила бы выполнить преобразование из кода Лемера в перестановку за O (n log n) времени.
Для генерации случайных перестановок заданной последовательности из n значений не имеет значения, применяет ли кто-либо случайно выбранную перестановку n к последовательности, или выбирает случайный элемент из набора различных (мультимножеств) перестановок последовательности. Это потому, что даже если в случае повторяющихся значений может быть много различных перестановок n, которые приводят к одной и той же перестановочной последовательности, количество таких перестановок одинаково для каждого возможного результата. В отличие от систематической генерации, которая становится невозможной для больших n из-за роста числа n !, нет оснований предполагать, что n будет малым для случайной генерации.
Основная идея генерации случайной перестановки заключается в генерации случайным образом одного из n! последовательности целых чисел d 1,d2,..., d n, удовлетворяющие 0 ≤ d i< i (since d1, всегда равно нулю, его можно опустить) и преобразовать его в перестановку с помощью биективного переписка. Для последнего соответствия можно интерпретировать (обратную) последовательность как код Лемера, и это дает метод генерации, впервые опубликованный в 1938 году Рональдом Фишером и Фрэнком Йейтсом. Хотя в то время компьютерная реализация не была проблемой, этот метод страдает от описанной выше трудности эффективного преобразования кода Лемера в перестановку. Это можно исправить, используя другое биективное соответствие: после использования d i для выбора элемента среди i оставшихся элементов последовательности (для уменьшения значений i) вместо удаления элемента и сжатия последовательности путем сдвигая вниз следующие элементы на одно место, один меняет местами элемент с последним оставшимся элементом. Таким образом, элементы, оставшиеся для выбора, образуют последовательный диапазон в каждый момент времени, даже если они могут не встречаться в том же порядке, что и в исходной последовательности. Преобразование последовательности целых чисел в перестановки несколько сложно, но можно увидеть, что каждая перестановка производится точно одним способом, с помощью немедленной индукции. Когда выбранный элемент оказывается последним оставшимся элементом, операцию обмена можно не выполнять. Это не происходит достаточно часто, чтобы гарантировать проверку условия, но последний элемент должен быть включен в число кандидатов выбора, чтобы гарантировать, что все перестановки могут быть сгенерированы.
Результирующий алгоритм для генерации случайной перестановки a [0], a [1],..., a [n - 1]
может быть описан следующим образом в псевдокод :
для i от n до 2 dodi← случайный элемент {0,..., i - 1} swap a [d i ] и a [i - 1]
Это может быть объединено с инициализацией массива a [i] = i
следующим образом
для i из 0 ton − 1 dodi + 1 ← случайный элемент из {0,..., i} a [i] ← a [d i + 1 ] a [d i + 1 ] ← i
Если d i + 1 = i, первое присвоение скопирует неинициализированное значение, а второе - перезапишите его правильным значением i.
Однако алгоритм Фишера-Йейтса не самый быстрый алгоритм для генерации перестановки, поскольку алгоритм Фишера-Йейтса по сути является последовательным алгоритмом, и процедуры «разделяй и властвуй» могут достичь того же результата параллельно.
Есть много способов систематически генерировать все перестановки данной последовательности. Один классический, простой и гибкий алгоритм основан на нахождении следующей перестановки в лексикографическом порядке, если он существует. Он может обрабатывать повторяющиеся значения, и в этом случае он генерирует каждую отдельную перестановку мультимножества один раз. Даже для обычных перестановок это значительно эффективнее, чем создание значений для кода Лемера в лексикографическом порядке (возможно, с использованием факториальной системы счисления ) и преобразование их в перестановки. Он начинается с сортировки последовательности в (слабо) возрастающем порядке (что дает ее лексикографически минимальную перестановку), а затем повторяет переход к следующей перестановке, пока она не будет найдена. Этот метод восходит к Нараяне Пандиту в Индии 14-го века и часто переоткрывался.
Следующий алгоритм лексикографически генерирует следующую перестановку после данной перестановки. Он изменяет данную перестановку на месте.
Например, учитывая последовательность [1, 2, 3, 4] ( который находится в порядке возрастания), и учитывая, что индекс отсчитывается от нуля, шаги следующие:
Следуя этому алгоритму, следующая лексикографическая перестановка будет [1,3,2,4], а 24-я перестановка будет [4,3,2,1], где a [k] < a[k + 1] does not exist, indicating that this is the last permutation.
В этом методе используется около 3 сравнений и 1,5 перестановки на перестановку, амортизируемых по всей последовательности, не считая начальной сортировки.
Альтернатива вышеупомянутому алгоритму, алгоритм Штейнхауса – Джонсона – Троттера, генерирует упорядочивание всех перестановок данной последовательности со свойством, что любые две последовательные перестановки в его вывод отличается заменой двух соседних значений. Этот порядок перестановок был известен английским звонарем 17-го века, среди которых он был известен как «простые изменения». Одним из преимуществ этого метода является то, что небольшое количество изменений от одной перестановки к другой позволяет реализовать метод за постоянное время на перестановку. То же самое может легко сгенерировать подмножество четных перестановок, опять же за постоянное время на перестановку, пропуская все остальные перестановки выходных данных.
Альтернативой Штейнхаусу – Джонсону – Троттеру является алгоритм Хипа, Роберт Седжвик в 1977 г. назвал его самым быстрым алгоритмом генерации перестановок в приложениях.
На следующем рисунке показаны результаты всех трех вышеупомянутых алгоритмов для генерации всех перестановок длины и шести дополнительных алгоритмов, описанных в литературе.
Упорядочение всех перестановок длины , сгенерированных разными алгоритмами. Перестановки имеют цветовую кодировку, где 1 = красный, 2 = желтый, 3 = зеленый, 4 = синий.1:Лексикографический порядок; 2:Алгоритм Стейнхауса – Джонсона – Троттера ; 3:Алгоритм Хипа ; 4:Алгоритм перестановки звездой Эрлиха (см.): На каждом шаге первая запись перестановки заменяется более поздней записью; 5: Алгоритм изменения префикса Закса: на каждом шаге префикс текущей перестановки меняет местами для получения следующей перестановки; 6: Алгоритм Савады-Вильямса: каждая перестановка отличается от предыдущей либо циклическим сдвигом влево на одну позицию, либо заменой первых двух записей; 7: Алгоритм Корбетта: каждая перестановка отличается от предыдущей циклическим сдвигом влево некоторого префикса на одну позицию; 8: Упорядочивание по одной дорожке: каждый столбец представляет собой циклический сдвиг других столбцов; 9: Однодорожечный код Грея: каждый столбец представляет собой циклический сдвиг других столбцов, плюс любые две последовательные перестановки отличаются только одним или двумя транспозициями.
Меандрические системы приводят к меандрическим перестановкам, особому подмножеству альтернативных перестановок. Альтернативная перестановка набора {1, 2,..., 2n} - это циклическая перестановка (без фиксированных точек), такая, что цифры в форме циклической записи чередуются между нечетными и четными целыми числами. Меандрические перестановки полезны при анализе вторичной структуры РНК. Не все альтернативные перестановки являются меандрическими. Модификация алгоритма Хипа использовалась для генерации всех альтернативных перестановок порядка n (то есть длины 2n) без генерации всех (2n)! перестановки. Генерация этих альтернативных перестановок необходима, прежде чем они будут проанализированы, чтобы определить, являются ли они меандрическими или нет.
Алгоритм рекурсивный. В следующей таблице показаны этапы процедуры. На предыдущем шаге были сгенерированы все альтернативные перестановки длины 5. Три копии каждой из них имеют цифру «6», добавленную к правому концу, а затем применяется другое транспонирование, включающее эту последнюю запись, и предыдущую запись в четной позиции (включая идентичность, то есть без транспонирования).
Предыдущие наборы | Перестановка цифр | Альтернативные перестановки |
---|---|---|
1-2-3-4-5-6 | 1-2-3-4-5-6 | |
4, 6 | 1-2-3-6-5-4 | |
2, 6 | 1-6-3-4-5-2 | |
1 -2-5-4-3-6 | 1-2-5-4-3-6 | |
4, 6 | 1-2-5-6-3-4 | |
2, 6 | 1-6-5-4-3-2 | |
1-4-3-2-5-6 | 1-4-3-2-5-6 | |
2, 6 | 1-4-3-6-5-2 | |
4, 6 | 1-6-3-2-5-4 | |
1-4 -5-2-3-6 | 1-4-5-2-3-6 | |
2, 6 | 1-4-5-6-3-2 | |
4, 6 | 1-6-5-2-3-4 |
Перестановки используются в компоненте перемежителя компонента обнаружения и исправления ошибок В алгоритмах, таких как турбо-коды, например, в стандарте мобильной связи Long Term Evolution 3GPP, используются эти идеи (см. Техническую спецификацию 3GPP 36.212). Такие приложения поднимают вопрос о быстрой генерации перестановок, удовлетворяющих определенным желаемым свойствам. Один из методов основан на перестановочных многочленах . Также в качестве основы для оптимального хеширования при хешировании уникальной перестановки.
Викиверситет имеет учебные ресурсы по Обозначение перестановок |
Викискладе есть материалы, связанные с Перестановками. |