76
правок
Изменения
Добавлен алгоритм для следующей мультиперестановки
|-
|'''1'''||'''3'''||'''4'''||'''2'''||'''5'''||следующая перестановка
|}
== Специализация алгоритма для генерации следующей мультиперестановки ==
* Двигаясь справа налево, находим элемент, нарушающий убывающую последовательность (в обычном порядке, слева направо, см. пример).
* Меняем его с минимальным элементом, большим нашего, стоящим правее.
* Переворачиваем правую часть.
i := N - 1;
'''while''' (i > 0) '''and''' (b[i] >= b[i + 1]) '''do'''
dec(i);
'''if''' i > 0 '''then'''
'''begin'''
j := i + 1;
'''while''' (j < N) '''and''' (b[j + 1] > b[i]) '''do'''
inc(j);
Swap(b[i] , b[j]);
'''for''' j := i + 1 '''to''' (N + i) '''div''' 2 '''do'''
Swap(b[j], b[N - j + i + 1]);
'''Вывод перестановки;'''
'''end'''
'''else'''
'''begin'''
'''Вывести "Нет ответа"'''
'''end;'''
=== Пример работы ===
{| class="wikitable" border = 1
|1||2||3||1||style="background:#FFCC00"|2||style="background:#FFCC00"|3||Исходная перестановка.
|-
| || || || ||^|| ||Находим элемент, нарушающий убывающую последовательность.
|-
| || || || || ||^||Минимальный элемент больше нашего.
|-
|1||2||3||1||style="background:#FFCC00"|3||style="background:#FFCC00"|2||Меняем их местами.
|-
|'''1'''||'''2'''||'''3'''||'''1'''||'''3'''||'''2'''||Следующая мультиперестановка.
|}