Получение предыдущего объекта — различия между версиями
Flanir (обсуждение | вклад) (Новая страница: «== Алгоритм == {{Определение|definition= '''Получение предыдущего объекта''' {{---}} это нахождение о...») |
Flanir (обсуждение | вклад) (→Специализация алгоритма для генерации предыдущего битового вектора) |
||
Строка 10: | Строка 10: | ||
По построению получаем, что <tex>Q</tex> {{---}} минимально возможный. | По построению получаем, что <tex>Q</tex> {{---}} минимально возможный. | ||
== Специализация алгоритма для генерации предыдущего битового вектора == | == Специализация алгоритма для генерации предыдущего битового вектора == | ||
− | * Находим минимальный суффикс, в котором есть <tex>1</tex>, его можно уменьшить, не | + | * Находим минимальный суффикс, в котором есть <tex>1</tex>, его можно уменьшить, не изменяя оставшейся части |
* Вместо <tex>1</tex> записываем <tex>0</tex> | * Вместо <tex>1</tex> записываем <tex>0</tex> | ||
* Дописываем максимально возможный хвост из единиц | * Дописываем максимально возможный хвост из единиц |
Версия 10:49, 30 декабря 2014
Алгоритм
Определение: |
Получение предыдущего объекта — это нахождение объекта, предшествующего данному в лексикографическом порядке. |
Объект
называется предыдущим за , если и не найдется такого , что .Отсюда понятен алгоритм:
- Находим суффикс минимальной длины, который можно изменить без изменения префикса текущего объекта
- К оставшейся части дописываем максимально возможный элемент (чтобы было выполнено правило )
- Дописываем максимально возможный хвост
По построению получаем, что
— минимально возможный.Специализация алгоритма для генерации предыдущего битового вектора
- Находим минимальный суффикс, в котором есть , его можно уменьшить, не изменяя оставшейся части
- Вместо записываем
- Дописываем максимально возможный хвост из единиц
int[] nextVector(int[] a): //
— длина вектора
while (n >= 0) and (a[n] != 1)
a[n] = 1
n--
if n == -1
return null
a[n] = 0
return a
Приведённый алгоритм эквивалентен прибавлению единицы к битовому вектору.