Получение предыдущего объекта
Версия от 10:50, 30 декабря 2014; Flanir (обсуждение | вклад) (→Специализация алгоритма для генерации предыдущего битового вектора)
Алгоритм
Определение: |
Получение предыдущего объекта — это нахождение объекта, предшествующего данному в лексикографическом порядке. |
Объект
называется предыдущим за , если и не найдется такого , что .Отсюда понятен алгоритм:
- Находим суффикс минимальной длины, который можно изменить без изменения префикса текущего объекта
- К оставшейся части дописываем максимально возможный элемент (чтобы было выполнено правило )
- Дописываем максимально возможный хвост
По построению получаем, что
— минимально возможный.Специализация алгоритма для генерации предыдущего битового вектора
- Находим минимальный суффикс, в котором есть , его можно уменьшить, не изменяя оставшейся части
- Вместо записываем
- Дописываем максимально возможный хвост из единиц
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
Приведённый алгоритм эквивалентен вычитанию единицы из битового вектора.