Алгоритм next_permutation в C++ используется для генерации следующей лексикографически большей перестановки последовательности. 34
Процесс включает несколько шагов: 3
- Найти длинный суффикс с неувеличивающимся порядком. 3 Начинают со второго по счёту элемента (n — 2) и двигаются к началу последовательности. 3 Продолжают двигаться влево, пока текущий элемент не будет больше или равен следующему (неувеличивающийся порядок). 3 В конце этого шага переменная i укажет на элемент, который нужно поменять местами, чтобы сгенерировать следующую перестановку. 3
- Определить первый элемент, который нужно поменять местами. 3 Этот элемент важен, чтобы новая перестановка была лексикографически больше текущей. 3
- Найти наименьший элемент в суффиксе. 3 Начинают с последнего элемента (n — 1) и двигаются к началу последовательности. 3 Продолжают двигаться влево, пока текущий элемент не будет меньше или равен элементу, определённому на предыдущем шаге. 3 В конце этого шага переменная j укажет на наименьший элемент в суффиксе, который может заменить элемент, определённый на предыдущем шаге, для создания лексикографически большей перестановки. 3
- Поменять местами элементы. 3 После того как определены элементы, которые нужно поменять местами, их меняют, чтобы новая перестановка была лексикографически больше. 3
- Обратить порядок суффикса. 3 На последнем шаге реверсируют найденный на первом шаге суффикс, чтобы получить наименьшую лексикографически большую перестановку. 3
Если функция не может изменить порядок объекта на лексикографически большую перестановку, она возвращает false. 2 В противном случае возвращается true, что означает, что расположение не больше предыдущего, а наименьшее возможное (отсортированное в возрастающем порядке). 2