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