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