Получение следующего объекта — различия между версиями
Строка 1: | Строка 1: | ||
== Определение == | == Определение == | ||
− | '''Получение следующего объекта''' - это нахождение следующего объекта в | + | '''Получение следующего объекта''' - это нахождение следующего объекта в лексикографическом порядке. |
== Алгоритм == | == Алгоритм == | ||
Строка 13: | Строка 13: | ||
Двигаясь с конца массива сравниваем соседние элементы, если a[i - 1] > a[i] двигаемся дальше, если a[i - 1] < a[i], m := i - 1(поскольку мы нашли m дальше не смысла двигаться) выходим из цикла. | Двигаясь с конца массива сравниваем соседние элементы, если a[i - 1] > a[i] двигаемся дальше, если a[i - 1] < a[i], m := i - 1(поскольку мы нашли m дальше не смысла двигаться) выходим из цикла. | ||
k := i, такое что a[i] > a[m] и a[i] = min(a[i]), при i > m. | k := i, такое что a[i] > a[m] и a[i] = min(a[i]), при i > m. | ||
− | Меняем местами a[m] и a[k] | + | Меняем местами a[m] и a[k] |
Осталось упорядочить по возрастанию элементы, стоящие справа от нового m-го элемента, но т.к. они упорядочены по убыванию, достаточно их обернуть. | Осталось упорядочить по возрастанию элементы, стоящие справа от нового m-го элемента, но т.к. они упорядочены по убыванию, достаточно их обернуть. | ||
---- | ---- |
Версия 08:31, 12 ноября 2010
Содержание
Определение
Получение следующего объекта - это нахождение следующего объекта в лексикографическом порядке.
Алгоритм
Находим максимальный общий префикс, после него ставим минимальный возможный элемент и дописываем минимальный возможный хвост.
Пример (перестановки)
Каждая следующая перестановка строится следующим образом:
Двигаясь с конца массива сравниваем соседние элементы, если a[i - 1] > a[i] двигаемся дальше, если a[i - 1] < a[i], m := i - 1(поскольку мы нашли m дальше не смысла двигаться) выходим из цикла. k := i, такое что a[i] > a[m] и a[i] = min(a[i]), при i > m. Меняем местами a[m] и a[k] Осталось упорядочить по возрастанию элементы, стоящие справа от нового m-го элемента, но т.к. они упорядочены по убыванию, достаточно их обернуть.