Изменения

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

Получение предыдущего объекта

1059 байт убрано, 23:09, 30 декабря 2014
Специализация алгоритма для генерации предыдущей мультиперестановки
===Мультиперестановка===
Если данный алгоритм применить к мультиперестановке, то он выведет корректный результат, то есть предыдущую мультиперестановку.
 
== Специализация алгоритма для генерации предыдущей мультиперестановки ==
Алгоритм полностью аналогичен генерации предыдущей перестановки
* Двигаясь справа налево, находим элемент, нарушающий убывающую последовательность
* Меняем его с максимальным элементом, меньшим нашего, стоящим правее
* Перевернем правую часть
 
===Реализация===
'''int[]''' prevMultipermutation('''int[]''' a): <font color=green>// <tex>n</tex> {{---}} длина перестановки</font>
'''for''' i = n - 2 '''downto''' 0
'''if''' a[i] > a[i + 1]
max = i + 1
'''for''' j = i + 1 '''to''' n - 1
'''if''' (a[j] < a[max]) '''and''' (a[j] < a[i])
max = j
swap(a[i], a[j])
reverse(a, i + 1, n - 1)
'''return''' a
'''return''' ''null''
== Специализация алгоритма для генерации предыдущего сочетания ==
107
правок

Навигация