Обычно при работе с комбинациями сложность Big-O выглядит O (n выбирает k). В этом алгоритме, я генерация всех комбинаций в пределах массива, которые соответствуют целевой сумме:Сложность времени подсчета сумм.
def combos(candidates,start, target):
if target == 0:
return [[]]
res = []
for i in range(start,len(candidates)):
for c in combos(candidates, i+1, target-candidates[i]):
res.append([candidates[i]]+ c)
return res
print combos([2,1,10,5,6,4], 10)
# [[1, 5, 4], [10], [6, 4]]
Я с трудом определяющей Big-O здесь, это O(n choose t)
алгоритма? Если нет, что это такое и почему?
Я не следую последнему шагу суммирования выше, поэтому из любопытства (поскольку я, вероятно, просто не понимаю), какое правило суммы вы используете здесь? (Что-то в контексте множеств и перестановок?). Ближайшим, о котором я могу думать, является конечная серия 'sum_ {i = 0}^n 2^i = 2^{n + 1} -1' или' sum_ {i = 0}^na^i = (a^{ n + 1} -1)/(a-1) '(' a> 1'), но ни один из них действительно не применим, чтобы дать результат вашей суммы выше. Благодаря! – dfri
@dfri Вы говорите о 'sum (C_n^i)'? Если это так, то это сумма биномов. Проверьте https://en.wikipedia.org/wiki/Binomial_coefficient сразу после серии, в которой используются биномиальные коэффициенты. –
А я вижу, спасибо! – dfri