std::next_permutation Объяснение реализации
Алгоритм std::next_permutation вычисляет следующую лексикографически большую перестановку данной последовательности. Понимание его реализации имеет решающее значение для понимания его поведения.
Схема алгоритма
Алгоритм перебирает последовательность справа налево, отыскивая самый левый «восходящий элемент» (т.е. , элемент, который меньше своего преемника). Если восходящий элемент не найден, это означает, что последовательность находится в порядке убывания, и в этом случае он меняет последовательность, чтобы получить наименьшую перестановку.
В противном случае алгоритм продолжает поиск наименьшего элемента в последовательности справа. зажима (называемого «к»). Затем этот элемент заменяется восходящим элементом. Наконец, элементы справа от восходящего элемента меняются местами, чтобы сохранить порядок убывания.
Роли переменных
Поток цикла
Цикл повторяется до тех пор, пока я не достигнет начала последовательности (начала). Внутри каждой итерации:
Пример
Рассмотрим последовательность {1, 2, 4, 3} .
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3