Table des matières
Sortie
Maison développement back-end C++ Implémentation du problème du sac à dos 0/1 en C/C++ à l'aide de la méthode branch-and-bound

Implémentation du problème du sac à dos 0/1 en C/C++ à l'aide de la méthode branch-and-bound

Sep 04, 2023 pm 08:17 PM
c/c branche et lié /problème de sac à dos

Implémentation du problème du sac à dos 0/1 en C/C++ à laide 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

Copier après la connexion

Sortie

The maximum possible profit = 235
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

En C/C++, la fonction strcmp() est utilisée pour comparer deux chaînes En C/C++, la fonction strcmp() est utilisée pour comparer deux chaînes Sep 10, 2023 am 11:41 AM

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

En C/C++, la fonction fseek() est utilisée pour déplacer la position du pointeur de fichier dans le fichier. En C/C++, la fonction fseek() est utilisée pour déplacer la position du pointeur de fichier dans le fichier. Sep 02, 2023 pm 03:57 PM

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

Comment détecter un débordement d'entier en C/C++ ? Comment détecter un débordement d'entier en C/C++ ? Aug 31, 2023 pm 01:53 PM

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

Implémentation du problème du sac à dos 0/1 en C/C++ à l'aide de la méthode branch-and-bound Implémentation du problème du sac à dos 0/1 en C/C++ à l'aide de la méthode branch-and-bound Sep 04, 2023 pm 08:17 PM

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

Quelques observations intéressantes sur l'opérateur ternaire C/C++ Quelques observations intéressantes sur l'opérateur ternaire C/C++ Sep 15, 2023 pm 07:29 PM

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;&

Programme C/C++ pour un algorithme glouton pour trouver le nombre minimum de pièces Programme C/C++ pour un algorithme glouton pour trouver le nombre minimum de pièces Sep 19, 2023 pm 11:01 PM

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

Comment utiliser les énumérations en C/C++ ? Comment utiliser les énumérations en C/C++ ? Aug 28, 2023 pm 05:09 PM

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,

En C/C++, tableau à 4 dimensions En C/C++, tableau à 4 dimensions Sep 01, 2023 pm 11:57 PM

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

See all articles