Я работал над рекурсией и пытался решить проблему с ранцем [https://en.wikipedia.org/wiki/Knapsack_problem].. Я придумал приведенный ниже алгоритм, который прекрасно работает:
cost_array = [2,3,4,5,9]
value_array = [3,4,8,8,10]
def KP(Weight, C, V):
if Weight < 2:
return 0
q = 0
for i in range(len(C)):
q = max(q, (KP(Weight-C[i], [x for j,x in enumerate(C) if j!=i], \
[x for j,x in enumerate(V) if j!=i]) + V[i]*(Weight-C[i] >= 0)))
return q
print(KP(25,cost_array,value_array))
Однако, когда я меняю значениеот q
до q < 0
и вызову print(KP(25,cost_array,value_array))
результат, который я получаю 33 - q
.Поскольку 33
является максимальным значением, которое может иметь рюкзак.
Что странно, так это то, что я получаю такое поведение, только если вызываю исходную функцию с Weight > 23
и здесь 23=2+3+4+5+9
.
Я не могу понять, в какой момент к моему результату добавляется отрицательный q
, эта строка никогда не выполняет такую операцию, вы, ребята, можете меня просветить?
q = max(q, (KP(W-C[i], [x for j,x in enumerate(C) if j!=i], [x for j,x in enumerate(V) if j!=i]) + V[i]*(W-C[i] >= 0)))
Спасибо,
д_даррик