Построение следующей в лексикографическом порядке перестановки по данной
Материал из Algocode wiki
Версия от 11:43, 22 февраля 2020; Rationalex (обсуждение | вклад)
Задача
Дана перестановка чисел от $1$ до $n$. Надо по ней сгенерировать следующую в лексикоргафическом порядке.
Решение
- Пусть $i ~-$ первый элемент последовательности при проходе слева направо, начиная с которого суффикс не убывает.
- Пусть $j ~-$ индекс минимального элемента справа от $i$, который больше $a[i]$.
- Сделаем $swap(i, j)$, после чего суффикс, начиная с $i$ позиции отсортирован в порядке убывания.
- Развернём суффикс, начиная с $i+1$.
Доказательство корректности
Чтобы доказать корректность, надо доказать:
- Что получившаяся последовательность лексикографически больше исходной
- Что не существует последовательности, которая лексикографически больше исходной, но лексикографически меньше получившейся.
Автор конспекта: Александр Гришутин
По всем вопросам пишите в telegram @rationalex