i takie wypociny (świeże) problemu plecakowego z wagami, współrzędne: (weight, value).
W = 10
a = [[2, 6], [2, 4], [2, 3], [2, 1], [3, 7], [3, 7], [3, 4], [3, 1], [5, 6]]
def knaps_w(W, a):
sorted(a, key=lambda x: (x[0], -x[1]))
optima = 0
opt_sol = []
b = a[0]
V = {b[0]:[[b[0]], b[1]]}
a = a[1:]
while a:
elem = a[0]
sss = list(V.keys())[:]
for key in sss:
s = elem[0] + key
if s <= W:
if not s in V.keys():
V[s] = [V[key][0]+[elem[0]], elem[1]+V[key][1]]
if V[s][1] > optima:
optima = V[s][1]
opt_sol = V[s][0]
else:
if V[s][1] < elem[1]+V[key][1]:
V[s] = [V[key][0]+[elem[0]], elem[1]+V[key][1]]
if V[s][1] > optima:
optima = V[s][1]
opt_sol = V[s][0]
a.remove(elem)
return (optima, opt_sol)
print(knaps_w(W, a))
Podobne do poprzedniego, ale problem z wagami jest bardziej złożony, także nie będzie to szybko działać dla większej ilości elementów. Przydała się pomoc dwóch osób z równoległego wątku, trochę lepciejsze wyniki po odpowiednim posortowaniu danych. :)