


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
Ausgabe
The maximum possible profit = 235
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Die Funktion strcmp() ist eine integrierte Bibliotheksfunktion und wird in der Headerdatei „string.h“ deklariert. Diese Funktion wird zum Vergleichen der Zeichenfolgenargumente verwendet. Sie vergleicht Zeichenfolgen lexikografisch, was bedeutet, dass sie beide Zeichenfolgen Zeichen für Zeichen vergleicht. Sie startet comp

fseek() wird in der C-Sprache verwendet, um den Dateizeiger an einen bestimmten Ort zu verschieben. Offsets und Streams sind die Ziele von Zeigern und werden in Funktionsargumenten angegeben. Bei Erfolg wird Null zurückgegeben. Wenn dies nicht gelingt, wird ein Wert ungleich Null zurückgegeben. Das Folgende ist die Syntax von fseek() in der C-Sprache: intfseek(FILE*stream,longintoffset,intwhence) Hier sind die in fseek() verwendeten Parameter: stream− Dies ist der Zeiger, der zur Identifizierung des Streams verwendet wird. offset - Dies ist die Anzahl der Bytes ab der Position. wherece-Hier wird der Offset hinzugefügt. woher wird durch die folgenden Konstanten gegeben

Der einzig sichere Weg besteht darin, dies zu überprüfen, bevor der Überlauf auftritt. Es gibt jedoch einige informelle Möglichkeiten, auf einen Ganzzahlüberlauf zu prüfen. Wenn Sie also beim Addieren vorzeichenloser Ganzzahlen einen Überlauf erkennen möchten, können Sie prüfen, ob das Ergebnis tatsächlich kleiner als die beiden addierten Werte ist. Beispielsweise sollte der Beispielcode unsignedintx,y;unsignedintvalue=x+y;booloverflow=value<x;//Alternativ auch „value<y“ funktionieren. Dies liegt daran, dass x und y beide Ganzzahlen ohne Vorzeichen sind, wenn sie addiert werden und Überlauf, ihre Werte können nicht größer sein als jeder von ihnen, wie sie es erfordern

Die Idee besteht darin, die Tatsache zu erkennen, dass Greedy-Methoden die beste Lösung für das fraktionierte Rucksackproblem darstellen. Um zu überprüfen, ob ein bestimmter Knoten uns eine bessere Lösung bieten 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 sieht wie folgt aus: Alle Artikel werden in absteigender Reihenfolge des Wertes pro Gewichtseinheit sortiert, sodass die Obergrenze mithilfe der Greedy-Methode berechnet werden kann. Initialisieren Sie den maximalen Gewinn, zum Beispiel maxProfit=0, um eine leere Warteschlange Q zu erstellen. Virtuelle Entscheidungsknoten erstellen Bäume und fügen sie in Q ein oder stellen sie in eine 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. erstellen

Wir wissen, dass der ternäre Operator anstelle der if..else-Klausel implementiert wird. Es wird durch ?: dargestellt. '? Das „Symbol“ entspricht dem if-Teil und „:“ entspricht dem else-Teil. Die folgenden 3 Programme erklären einige interessante Beobachtungen im Fall des ternären Operators. Das folgende Programm wird ohne Fehler kompiliert. Der Rückgabetyp eines ternären Ausdrucks ist voraussichtlich float (wie in exp2), und exp3 (d. h. ein literaler Null-Int-Typ) kann implizit in float konvertiert werden. #include<iostream>usingnamespacestd;intmain(){ inttest1=0;&

Der Greedy-Algorithmus ist ein Algorithmus, der verwendet wird, um die optimale Lösung für ein bestimmtes Problem zu finden. Der Greedy-Algorithmus funktioniert, indem er für jeden Teil eine lokal optimale Lösung findet (die optimale Lösung für einen Teil des Problems) und zeigt so, dass eine globale optimale Lösung gefunden werden kann. In diesem Problem verwenden wir den Greedy-Algorithmus, um die Mindestanzahl an Münzen/Banknoten zu ermitteln, aus denen eine bestimmte Summe bestehen kann. Dabei berücksichtigen wir alle gültigen Münzen oder Banknoten, also die Nennwerte {1,2,5,10,20,50,100,200,500,2000}. Wir müssen die Anzahl Münzen/Banknoten zurückgeben, die für die Summe erforderlich sind. Lassen Sie uns einige Beispiele geben, um den Kontext besser zu verstehen – Beispiel 1 – Eingabe: 1231 Ausgabe: 7 Beschreibung – Wir benötigen zwei 500-Rupien-Scheine

Ein 4-dimensionales Array ist ein Array, das aus dreidimensionalen Arrays besteht. AlgorithmusBegin.Declarethevariables.Declarethearrayelements.Takethenoofelementsasinput.Taketheelementsasinput.Printtheelementsstoreinarray.End.Dies ist ein Beispiel für ein 4D-Array. #include<iostream>usingnamespacestd;intmain(){ inta[2][2][3

Aufzählung ist ein benutzerdefinierter Datentyp in der C-Sprache. Es wird verwendet, um ganzzahligen Konstanten Namen zu geben, wodurch Programme einfacher zu lesen und zu warten sind. Das Schlüsselwort „enum“ wird verwendet, um eine Aufzählung zu deklarieren. Das Folgende ist die Syntax von Aufzählungen in der C-Sprache: enumenum_name{const1, const2,.....}; Das Schlüsselwort enum wird auch zum Definieren der Variablen des Ofenumtyps verwendet. Es gibt zwei Möglichkeiten, den Variablenofenumtyp wie folgt zu definieren. enumweek{Sonntag, Montag, Dienstag,
