


Implémentation du problème du sac à dos 0/1 en C/C++ à l'aide de la méthode branch-and-bound
L'idée est de prendre conscience du fait que la méthode gloutonne offre la meilleure solution au problème du sac à dos fractionnaire.
Pour vérifier si un nœud spécifique peut nous fournir une meilleure solution, nous calculons la meilleure solution (par nœud) en mettant en œuvre une approche gloutonne. Si la méthode glouton elle-même calcule plus de solutions que la meilleure solution jusqu’à présent, alors nous ne pouvons pas parvenir à une meilleure solution via les nœuds.
L'algorithme complet est le suivant -
Triez tous les articles selon l'ordre décroissant du rapport valeur par unité de poids afin que la limite supérieure puisse être calculée à l'aide de la méthode gourmande.
Initialisez le profit maximum, par exemple maxProfit = 0
Créez une file d'attente vide Q.
Les nœuds virtuels de décision créent des arbres et les insèrent ou les mettent en file d'attente dans Q. Le profit et le poids du nœud virtuel sont 0.
-
Effectuez les opérations suivantes lorsque Q n'est pas vide ou vide.
Création du projet en Q. Soit l'élément d'extraction u.
Calculez le profit du nœud de niveau suivant. Si le profit est supérieur à maxProfit, modifiez maxProfit.
Calculez les limites du nœud de niveau suivant. Si la limite est supérieure à maxProfit, ajoutez le nœud de niveau suivant à Q.
Considérez le cas où le nœud de niveau suivant n'est pas pris en compte ou est considéré comme faisant partie de la solution et ajoutez le nœud à la file d'attente au niveau suivant, mais le poids et le profit ne gèrent pas ou ne prennent pas en compte le nœud de niveau suivant.
Illustration ci-dessous -
Entrée// 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
Sortie
The maximum possible profit = 235
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

La fonction strcmp() est une fonction de bibliothèque intégrée et elle est déclarée dans le fichier d'en-tête « string.h ». Cette fonction est utilisée pour comparer les arguments de chaîne. Elle compare les chaînes de manière lexicographique, ce qui signifie qu'elle compare les deux chaînes caractère par caractère. Elle démarre la compilation

fseek() est utilisé en langage C pour déplacer le pointeur de fichier vers un emplacement spécifique. Les décalages et les flux sont les cibles des pointeurs et sont donnés dans les paramètres de fonction. En cas de succès, il renvoie zéro. En cas d'échec, il renvoie une valeur non nulle. Voici la syntaxe de fseek() en langage C : intfseek(FILE*stream,longintoffset,intwhence) Voici les paramètres utilisés dans fseek() : stream− C'est le pointeur utilisé pour identifier le flux. offset - Il s’agit du nombre d’octets à partir de la position. d'où - C'est là que le décalage est ajouté. d'où est donné par les constantes suivantes

Le seul moyen sûr est de vérifier avant que le débordement ne se produise. Il existe cependant des moyens informels de vérifier le dépassement d'entier. Ainsi, si votre objectif est de détecter un débordement lors de l'ajout d'entiers non signés, vous pouvez vérifier si le résultat est réellement inférieur aux deux valeurs ajoutées. Par exemple, l'exemple de code unsignedintx,y;unsignedintvalue=x+y;booloverflow=value<x;//Alternativement, "value<y" devrait également fonctionner, car si x et y sont tous deux des entiers non signés, s'ils sont ajoutés. et débordement, leurs valeurs ne peuvent être supérieures à aucune d'entre elles, car elles l'exigent

L’idée est de réaliser que les méthodes gloutonnes constituent la meilleure solution au problème du sac à dos fractionnaire. Pour vérifier si un nœud spécifique peut nous fournir une meilleure solution, nous calculons la meilleure solution (par nœud) en mettant en œuvre une approche gloutonne. Si la méthode glouton elle-même calcule plus de solutions que la meilleure solution jusqu’à présent, alors nous ne pouvons pas parvenir à une meilleure solution via les nœuds. L'algorithme complet est le suivant : Tous les éléments sont triés par ordre décroissant de rapport valeur par unité de poids afin que la limite supérieure puisse être calculée à l'aide de la méthode gourmande. Initialisez le profit maximum, par exemple maxProfit=0 pour créer une file d'attente vide Q. Les nœuds virtuels de décision créent des arbres et les insèrent ou les mettent en file d'attente dans Q. Le profit et le poids du nœud virtuel sont 0. Effectuez les opérations suivantes lorsque Q n'est pas vide ou vide. créer

Nous savons que l'opérateur ternaire est implémenté à la place de la clause if..else. Il est représenté par ?:. '? Le symbole 'est équivalent à la partie if et ':' est équivalent à la partie else. Les 3 programmes suivants expliquent quelques observations intéressantes dans le cas de l'opérateur ternaire. Le programme suivant se compile sans aucune erreur. Le type de retour d'une expression ternaire devrait être float (comme dans exp2), et exp3 (c'est-à-dire un type littéral zéro-int) est implicitement convertible en float. #include<iostream>usingnamespacestd;intmain(){ inttest1=0;&

L'algorithme glouton est un algorithme utilisé pour trouver la solution optimale à un problème donné. L'algorithme glouton fonctionne en trouvant une solution optimale locale pour chaque partie (la solution optimale à une partie du problème), montrant ainsi qu'une solution optimale globale peut être trouvée. Dans ce problème, nous utiliserons l’algorithme Greedy Algorithm pour trouver le nombre minimum de pièces/billets pouvant constituer une somme donnée. Pour cela, nous considérerons toutes les pièces ou billets valides, c'est-à-dire les coupures {1,2,5,10,20,50,100,200,500,2000}. Nous devons renvoyer le nombre de pièces/billets nécessaires pour constituer la somme. Donnons quelques exemples pour mieux comprendre le contexte - Exemple 1 - Entrée : 1231 Sortie : 7 Description - Nous avons besoin de deux billets de 500 roupies

L'énumération est un type de données défini par l'utilisateur en langage C. Il est utilisé pour donner des noms aux constantes entières, ce qui rend les programmes plus faciles à lire et à maintenir. Le mot-clé "enum" permet de déclarer une énumération. Voici la syntaxe des énumérations en langage C : enumenum_name{const1, const2,.....} ; Le mot clé enum est également utilisé pour définir les variables de type enum. Il existe deux façons de définir les variables de type enum comme suit. enumweek {dimanche, lundi, mardi,

Un tableau à 4 dimensions est un tableau composé de tableaux à 3 dimensions. Algorithme Commencer. Déclarer les variables. Déclarer les éléments du tableau. Prendre les éléments en entrée. Prendre les éléments en entrée. Imprimer les éléments stockés dans le tableau. Fin. Ceci est un exemple de tableau 4D. #include<iostream>usingnamespacestd;intmain(){ inta[2][2][3
