Получение следующего объекта — различия между версиями

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

Версия 06:46, 12 ноября 2010

Алгоритм

Находим максимальный общий префикс, после него ставим минимальный возможный элемент и дописываем минимальный возможный хвост.


Пример (перестановки)

Каждая следующая перестановка строится следующим образом:

Двигаясь с конца массива сравниваем соседние элементы, если a[i - 1] > a[i] двигаемся дальше, если a[i - 1] < a[i], m := i - 1(поскольку мы нашли m дальше не смысла двигаться) выходим из цикла. k := i, такое что a[i] > a[m] и a[i] = min(a[i]), при i > m. Меняем местами a[m] и a[k] местами. Осталось упорядочить по возрастанию элементы, стоящие справа от нового m-го элемента, но т.к. они упорядочены по убыванию, достаточно их обернуть.



Ссылки

Дискретная математика : алгоритмы

Википедия - свободная энциклопедия