0 - 1 KnapSack Problem | Problem mit Funktion
Verfasst: Montag 20. Januar 2020, 12:40
Hallo, ich habe von der Uni eine Aufgabe zu dem 1-0 KnapSack Problem gestellt bekommen, zu welchem es hier im Forum schon einen Beitrag gibt. Ich bin nun einen anderen Ansatz gegangen und habe folgende Funktion definiert:
GEWICHTE = [50, 50, 60, 80, 100, 110, 120, 150, 150, 200]
WERTE = [80, 80, 60, 50, 100, 90, 100, 170, 200, 240]
anzahl = len(gewichte)
def finde_max(max_gewicht, gewichte, werte, anzahl):
if anzahl == 0:
return 0
if gewichte[anzahl-1] > max_gewicht:
return finde_max(max_gewicht, gewichte, werte, anzahl-1)
else:
return max(werte[anzahl-1] + finde_max(max_gewicht-gewichte[anzahl-1], gewichte, werte, anzahl-1),
finde_max(max_gewicht, gewichte, werte, anzahl-1))
Wir haben aber leider ein recht starres Programmgerüst bekommen, das mit einer Liste weiterarbeitet, welche die Indizes der Elemente enthält, die benutz wurden. Ich habe nun schon länger versucht mir auch eben diese Liste ausgeben zu lassen, bin daran aber ziemlich kläglich gescheitert. Ist dies ohne weiteres möglich zu implementieren, oder muss ich die Funktion grundlegend ändern dafür?
Vielen Dank schon mal für Hilfe und Lieben Gruß
GEWICHTE = [50, 50, 60, 80, 100, 110, 120, 150, 150, 200]
WERTE = [80, 80, 60, 50, 100, 90, 100, 170, 200, 240]
anzahl = len(gewichte)
def finde_max(max_gewicht, gewichte, werte, anzahl):
if anzahl == 0:
return 0
if gewichte[anzahl-1] > max_gewicht:
return finde_max(max_gewicht, gewichte, werte, anzahl-1)
else:
return max(werte[anzahl-1] + finde_max(max_gewicht-gewichte[anzahl-1], gewichte, werte, anzahl-1),
finde_max(max_gewicht, gewichte, werte, anzahl-1))
Wir haben aber leider ein recht starres Programmgerüst bekommen, das mit einer Liste weiterarbeitet, welche die Indizes der Elemente enthält, die benutz wurden. Ich habe nun schon länger versucht mir auch eben diese Liste ausgeben zu lassen, bin daran aber ziemlich kläglich gescheitert. Ist dies ohne weiteres möglich zu implementieren, oder muss ich die Funktion grundlegend ändern dafür?
Vielen Dank schon mal für Hilfe und Lieben Gruß