Мне нужен алгоритм, который ранжирует / отменяет комбинацию с дубликатами.Что мне нужно, так это для n чисел выбрать k чисел с количеством копий до r.
, например, для списка с n (диапазон) = 4, k (len_combination) = 3, r (max_repeats) = 2
(1, 1, 2)
(1, 1, 3)
(1, 1, 4)
(1, 2, 2)
(1, 2, 3)
(1, 2, 4)
(1, 3, 3)
(1, 3, 4)
(1, 4, 4)
(2, 2, 3)
(2, 2, 4)
(2, 3, 3)
(2, 3, 4)
(2, 4, 4)
(3, 3, 4)
(3, 4, 4)
Я бы хотел получить вывод в виде ранга комбинации с (1,1,2) ранжированием наименьшим эта ссылка предоставляет мне алгоритм перестановок с дубликатами и этимВики-страница дает мне метод для вычисления комбинаторного ранга без дубликатов, мое требование - комбинаторный ранг с ограниченным количеством дубликатов
Я знаю о itertools.product,Считать, где моя последовательность находится в полном списке, не вариант, так как я имею дело с n> 100, и мне нужна такая функция.Я ищу решение на основе комбинаторных расчетов.
def rank_seq(S,n,k,r):
##some kickass math calculations
return rank
print(rank_seq(2,2,4),4,3,2)) ##output 11
print(rank_seq(2,2,4),5,3,2)) ##output 16
print(rank_seq(2,2,4),6,3,2)) ##output 22