Изменения

Перейти к: навигация, поиск

Получение следующего объекта

2084 байта убрано, 06:46, 12 ноября 2010
Нет описания правки
== Определение Алгоритм ==В комбинаторике перестано́вка — это упорядоченный набор чисел обычно трактуемый как биекция на множестве Находим максимальный общий префикс, которая числу i ставит соответствие i-й после него ставим минимальный возможный элемент из набора. Число n при этом называется порядком перестановкии дописываем минимальный возможный хвост.
----
== Перебор перестановок в лексикографическом порядке Пример (перестановки) ==
Каждая следующая перестановка строится следующим образом:
----
== Перебор перестановок методом рекурсии ==
 
Для того, чтобы построить все перестановки для n элементов, построим все перестановки для n-1 элементов и добавим к каждой из них n-ый элемент всеми возможными n способами.
'''Пример''' К перестановке 2431 элемент 5 добавим следующими способами: 24315, 24351, 24531, 25431, 52431.
Для построения следующей перестановки подвинется 4, после чего снова будет двигаться 5. На протяжении всего процесса хранится информация о том, в каком направлении двигается каждый элемент.
 
При построении следующей перестановки на первом шаге рассматривается наибольший элемент . Если в направлении его движения еще есть, куда двигаться, передвигаем на одну позицию, это и будет следующей перестановкой. Если двигаться больше некуда (элемент стоит на краю массива и направление его движения — к краю), то меняем его направление движения, после чего «забываем» про этот элемент и строим следующую перестановку для оставшейся части массива, для этого находим в ней наибольший элемент и т.д. (повторяем все снова).
 
 
----
== Ссылки ==

Навигация