Построение следующей в лексикографическом порядке перестановки по данной: различия между версиями

Материал из Algocode wiki
Перейти к: навигация, поиск
(Новая страница: «= Задача = Дана перестановка чисел от $1$ до $n$. Надо по ней сгенерировать следующую в лекси...»)
 
Строка 14: Строка 14:
 
# Что получившаяся последовательность лексикографически больше исходной
 
# Что получившаяся последовательность лексикографически больше исходной
 
# Что не существует последовательности, которая лексикографически больше исходной, но лексикографически меньше получившейся.
 
# Что не существует последовательности, которая лексикографически больше исходной, но лексикографически меньше получившейся.
 +
 +
 +
{{Автор|Александр Гришутин|rationalex}}

Версия 11:43, 22 февраля 2020

Задача

Дана перестановка чисел от $1$ до $n$. Надо по ней сгенерировать следующую в лексикоргафическом порядке.

Решение

  1. Пусть $i ~-$ первый элемент последовательности при проходе слева направо, начиная с которого суффикс не убывает.
  2. Пусть $j ~-$ индекс минимального элемента справа от $i$, который больше $a[i]$.
  3. Сделаем $swap(i, j)$, после чего суффикс, начиная с $i$ позиции отсортирован в порядке убывания.
  4. Развернём суффикс, начиная с $i+1$.

Доказательство корректности

Чтобы доказать корректность, надо доказать:

  1. Что получившаяся последовательность лексикографически больше исходной
  2. Что не существует последовательности, которая лексикографически больше исходной, но лексикографически меньше получившейся.




Автор конспекта: Александр Гришутин

По всем вопросам пишите в telegram @rationalex