Heim > Backend-Entwicklung > C++ > Hauptteil

Implementierung des 0/1-Knapsack-Problems in C/C++ mithilfe der Branch-and-Bound-Methode

PHPz
Freigeben: 2023-09-04 20:17:06
nach vorne
1251 Leute haben es durchsucht

Implementierung des 0/1-Knapsack-Problems in C/C++ mithilfe der Branch-and-Bound-Methode

Die Idee besteht darin, die Tatsache zu erkennen, dass die Greedy-Methode die beste Lösung für das fraktionierte Rucksackproblem bietet.

Um zu überprüfen, ob ein bestimmter Knoten uns eine bessere Lösung liefern kann, berechnen wir die beste Lösung (je Knoten) mithilfe eines Greedy-Ansatzes. Wenn die Greedy-Methode selbst mehr Lösungen als die bisher beste Lösung berechnet, können wir über die Knoten nicht zu einer besseren Lösung gelangen.

Der vollständige Algorithmus lautet wie folgt:

  • Sortieren Sie alle Artikel nach der absteigenden Reihenfolge des Wertes pro Gewichtseinheit, sodass die Obergrenze mithilfe der Greedy-Methode berechnet werden kann.

  • Initialisieren Sie den maximalen Gewinn, zum Beispiel maxProfit = 0

  • Erstellen Sie eine leere Warteschlange Q.

  • Virtuelle Entscheidungsknoten erstellen Bäume und fügen sie in Q ein oder stellen sie in die Warteschlange. Der Gewinn und das Gewicht des virtuellen Knotens sind 0.

  • Führen Sie die folgenden Vorgänge aus, wenn Q nicht leer oder leer ist.

    • Das Projekt wurde in Q erstellt. Das Extraktionselement sei u.

    • Berechnen Sie den Gewinn des Knotens der nächsten Ebene. Wenn der Gewinn höher als maxProfit ist, ändern Sie maxProfit.

    • Berechnen Sie die Grenzen des Knotens der nächsten Ebene. Wenn die Grenze höher als maxProfit ist, fügen Sie den Knoten der nächsten Ebene zu Q hinzu.

    • Betrachten Sie den Fall, in dem der Knoten der nächsten Ebene nicht berücksichtigt oder als Teil der Lösung betrachtet wird, und fügen Sie den Knoten der Warteschlange auf der nächsten Ebene hinzu, aber Gewicht und Gewinn verarbeiten oder berücksichtigen den Knoten der nächsten Ebene nicht.

Abbildung unten –

Eingabe
// First thing in every pair is treated as weight of item
// and second thing is treated as value of item
Item arr1[] = {{2, 40}, {3.14, 50}, {1.98, 100}, {5, 95}, {3, 30}};
Knapsack Capacity W1 = 10

Nach dem Login kopieren

Ausgabe

The maximum possible profit = 235
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonImplementierung des 0/1-Knapsack-Problems in C/C++ mithilfe der Branch-and-Bound-Methode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage