10.8 Het complete algoritme
Leerdoel: je combineert de drie bouwstenen in één functie
knapsack(items, capaciteit) die de tabel bouwt en de beste
totaalwaarde returnt.
Alles samen
def knapsack(items, capaciteit):
n = len(items)
tabel = [[0] * (capaciteit + 1) for _ in range(n + 1)]
for i in range(1, n + 1):
waarde, gewicht = items[i - 1]
for w in range(capaciteit + 1):
if gewicht > w:
tabel[i][w] = tabel[i - 1][w]
else:
skip = tabel[i - 1][w]
meenemen = waarde + tabel[i - 1][w - gewicht]
tabel[i][w] = max(skip, meenemen)
return tabel[n][capaciteit]
Zie je de bouwstenen?
- Regel 3 → bouwsteen 2: lege tabel maken.
- Regels 5-13 → bouwsteen 3+4: rij voor rij invullen volgens de drie regels (te zwaar → kopieer, anders → max).
- Regel 15 → eindcel returnen.
Vergelijk met de hand-uitgevulde tabel uit pagina 02: ze zouden identiek moeten zijn.
Voorspel
We runnen knapsack op het image-voorbeeld (5 items, W=11). Wat denk
je dat eruit komt?
Antwoord
40 — items 3 + 4 (waardes 18 + 22), gewicht 5 + 6 = 11.
Identiek aan wat je op pagina 02 met de hand uitrekende.
Run
Code-omgeving wordt voorbereid…
Verwachte uitvoer
Image-voorbeeld:
knapsack(items, 11) = 40
Andere capaciteiten:
W = 5 -> beste waarde = 18
W = 8 -> beste waarde = 29
W = 11 -> beste waarde = 40
W = 15 -> beste waarde = 51
W = 21 -> beste waarde = 75
- W=5: één item past — item 3 (waarde 18).
- W=11: items 3+4 = 40 (zoals de tabel).
- W=21: pak ze allemaal — 1+6+18+22+28 = 75, gewicht 21.
Onderzoek
Speel met de code. Probeer:
- Verwijder een item: wat gebeurt er met de beste totaalwaarde?
- Voeg een item toe met waarde 100 en gewicht 1000: heeft die invloed?
- Hoe groot wordt de tabel als
n = 30enW = 100? (Hint:(n+1) × (W+1).)
Code-omgeving wordt voorbereid…
Visualiseer de groei
Beste waarde als functie van rugzakcapaciteit:
Code-omgeving wordt voorbereid…
Wat zie je?
Een trap-vorm: de beste waarde stijgt in sprongen telkens als de capaciteit groot genoeg wordt om een nieuw item toe te voegen. Bij W=21 zit je op het maximum (75) — alle items passen.
Door naar stap 9: welke items? →.