Gibt es eine Möglichkeit, das Rucksackproblem inkrementell zu berechnen? Irgendein Annäherungsalgorithmus? Ich versuche das Problem im folgenden Szenario zu lösen.Inkrementelles Berechnen des Rucksacks
Sei D mein Datensatz, der nicht bestellt ist und nicht sein sollte. D ist in 3 Teilmengen unterteilt, nämlich D1, D2 und D3. D1, D2 und D3 können je nach Bedarf bestellt werden. Ich möchte separate Rucksacklösungen für Sets (D1, D2) und (D2, D3) berechnen, aber ich möchte nicht vermeiden, D2 zweimal zu berechnen. Also, im Grunde möchte ich:
- Compute (D2) // eine Operation tun
- speichern es als Zwischenergebnis
- es mit D1 verwenden und Ranzen Ergebnis (D1, D2) erhalten
- es mit D3 verwenden und Ranzen Ergebnis (D2, D3)
diese Weise die Daten Traversal über D2 erfolgt nur einmal erhalten. Gibt es eine Möglichkeit, den Rucksack inkrementell so zu lösen?
Angenommen, Sie meinen das 0/1 Rucksackproblem, ja. Wenn die normale DP-Lösung nur für D2 ausgeführt wird, sind die protokollierten Teilergebnisse geeignet, die DP-Lösung für entweder (D2, D1) oder (D2, D3) zu bootstrappen. Um Lösungen für beide zu berechnen, sollten Sie eine Kopie der Teilergebnisse aus der Nur-D2-Berechnung erstellen. Ich bin nicht sofort bereit, für andere Varianten des Rucksackproblems zu antworten. –
Vielen Dank für Ihre Antwort. Ja ich meine 0/1 Rucksackproblem. Soweit ich weiß, wenn die Kombination von (D2, D1) nicht sortiert ist, dann ist die Kombination von zwei Lösungen von DP nicht effizient. In meinem Fall werden D1 und D2 getrennt sortiert und die Menge S = (D2 U D1) oder S = (D2 U D3) wird nicht notwendigerweise sortiert. –
Ich bin mir nicht sicher, was Sie mit "sortiert" meinen. Der DP @ JohnBollinger bezieht sich nicht auf die Reihenfolge der Elemente, so dass Sie keine Sortierung vornehmen müssen - Sie müssen lediglich die Elemente in D2 nach vorne verschieben. –