Мне нужно найти алгоритм для следующей задачи:
Вводятся два числа S и k натуральных чисел и несортированный набор из n попарно различных чисел.
решить вO (n), если существует подмножество из k чисел, которые суммируются до <= S.Примечание: k не должно быть частью временной сложности. </p>
algorithm({x_1, ..., x_n}, k, S):
if exists |{x_i, ..., x_j}| = k and x_i + ... x_j <= S return true
Я не нахожу решение с временной сложностью O (n).
То, что я смог получить, находится вO (kn), когда мы ищем k, умноженное на минимум, а сумма увеличивается:
algorithm(a={x_1, ..., x_n}, k, S):
sum = 0
for i=1,...,k:
min = a.popFirst()
for i=2,...,len(a):
if(a[i] < min):
t = a[i]
a[i] = min
min = t
sum += min
if sum <= S:
return true
else:
return false
, это в O (n) и возвращает правильный результат.Как я могу потерять k?
Спасибо за помощь, я действительно борюсь с этим!