Изменения

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

Получение номера по объекту

29 байт убрано, 21:58, 10 июня 2021
Исправил опечатку с $$
== Сочетания ==
Рассмотрим алгоритм получения номера в лексикографическом порядке данного сочетания из <tex>n</tex> по <tex>k</tex>. Как известно, количество сочетаний из <tex>n</tex> по <tex>k</tex> обозначается как <tex dpi=140>\binom{n}{k}</tex>. Тогда число сочетаний, в которых на позиции <tex>1</tex> стоит значение <tex>val_1</tex>, равно <tex dpi=140>$$\sum\limits^{val_1-1}_{i=1} {\binom{n-i}{k-1}}$$</tex>; число сочетаний, в которых на позиции <tex>2</tex> стоит значение <tex>val_2</tex>, равно <tex dpi=140>$$\sum\limits^{val_2-1}_{i=val_1+1} {\binom{n-i}{k-2}}$$</tex>. Аналогично продолжаем по следующим позициям:
*<tex>\mathtt{numOfChoose}</tex> {{---}} искомый номер сочетания,
*<tex>\mathtt{C[n][k]}</tex> {{---}} количество сочетаний из <tex>n</tex> по <tex>k</tex>, <tex>\mathtt{C[n][0] = 1}</tex>,
'''int''' part2num(part: '''list<int>'''):
'''int''' numOfPart = 0, last = 0, sum = 0
'''for''' i = 1 '''to''' part.size
'''for''' j = last '''to''' part[i] - 1 <font color=green>// перебираем все элементы, лексикографически меньшие нашеготекущего, но большие или равные не меньшие предыдущего</font>
numOfPart += d[N - sum - j][j] <font color=green>// прибавляем количество перестановок, которые могли начинаться с <tex>j</tex></font>
sum += part[i] <font color=green>// увеличиваем уже поставленную сумму</font>
Анонимный участник

Навигация