Изменения

Перейти к: навигация, поиск

Получение предыдущего объекта

1231 байт добавлено, 11:53, 30 декабря 2014
Специализация алгоритма для генерации предыдущей мультиперестановки
'''return''' a
'''return''' ''null''
== Специализация алгоритма для генерации предыдущего сочетания ==
* находим элемент <tex>t</tex>, так чтобы его разница со следующим отличалась более чем на единицу
* уменьшаем его на единицу
* дописываем максимально возможный хвост
Если элемента <tex>t</tex> не существует, значит было дано первое сочетание. А значит и предыдущего сочетания не существует.
 
Пусть массив <tex>a</tex> хранит сочетания, так что первый элемент хранится в <tex>a[1]</tex>
 
int[] nextChoose('''int[]''' a): <font color=green>// <tex>n</tex> {{---}} количество различных элементов</font>
a[0] = 0 <font color=green>// <tex>k</tex> {{---}} длина сочетания</font>
for i = k downto 1
if a[i] - a[i - 1] > 1
a[i]--
t = max(a[i] + 1, n - (k - i) + 1)
for j = i + 1 to k
a[j] = t
t++
return a
return null
107
правок

Навигация