У меня есть простой список list = [0,1,2,3,4,5,6,7,8,9,10,11,12]
. Для любого значения x в списке (где x> = 4, чтобы избежать ошибки), мне нужно получить совокупное число возможных комбинаций «выбрать 4» для каждого значения y
, где y < x
.
Например, для x = list[7]
Я хочу получить счет всех совокупных, выбрать 4 комбинации для чисел <= 7, 6, 5 и 4, то есть 7c4, 6c4, 5c4 и 4c4. Они оценивают до 35, 15, 5 и 1, таким образом, кумулятивный счет равен 56. </p>
Я могу сделать это, просто зациклив и получив комбинации:
import operator as op
from functools import reduce
def ncr(n, r):
r = min(r, n-r)
numer = reduce(op.mul, range(n, n-r, -1), 1)
denom = reduce(op.mul, range(1, r+1), 1)
return numer / denom
cumu_comb = 0
for i in list[:3:-1]:
cumu_comb += ncr(i - 1, len(list) - i)
Это похоже на медленный/ метод грубой силы;со многими миллионами итераций это не будет идеальным. Существует ли математическое представление для нахождения совокупных комбинаций для всех значений