Problème de Sac À Dos
Problème de Sac À Dos
Problème de Sac À Dos
Houari Boumediene
Etudiant Professeur
KESSAL Haroune Ait Mehdi Mohamed
25 décembre 2023
1 Le problème de sac à dos
1 Définissez l’input et l’output pour la résolution de ce problème.
Input :
1. Un ensemble d’objets O avec des valeurs respectives.
2. Deux ensembles V et P représentant les poids et les valeurs respectivement.
3. Deux constantes réelles k et m.
Output :
Un sous-ensemble O’ inclus dans O tel que : v(Oi ) ≥ k et p(Oi ) ≤ m
P P
1
void knapsack ( int objects [] , int values [] , int weights [] , int n , int
,→ targetValue , int maxWeight , int subset [] , int subsetSize ,
,→ int currentWeight , int currentValue ) {
if ( currentWeight > maxWeight ) {
return ; // Si le poids d é passe la capacit é maximale ,
,→ abandonnez cette branche
}
int main () {
int objects [ N ] = {20 , 10 , 30 , 40 , 50};
int values [ N ] = {20 , 10 , 30 , 40 , 50};
int weights [ N ] = {20 , 10 , 30 , 40 , 50};
int subset [ N ];
knapsack ( objects , values , weights , N , TARGET_VALUE , MAX_WEIGHT ,
,→ subset , 0 , 0 , 0) ;
return 0;
}
Complexité Spatiale :
2
Donc, la complexité spatiale est O (N ) ,en raison de la profondeur maximale de la récursion.
5.2 Montrez que le problème du sac à dos appartient à la classe des problèmes NP.
Le problème du sac à dos appartient à la classe des problèmes NP en raison de sa vérifiabilité
en temps polynomial. Pour chaque sous-ensemble candidat, il est possible de vérifier en temps
polynomial si les contraintes du problème sont respectées, à savoir si la somme des valeurs des
objets est supérieure ou égale à k et si la somme des poids des objets est inférieure ou égale à m.
De plus, le sous-ensemble d’objets lui-même sert de certificat dont la validité peut être vérifiée en
temps polynomial. Ainsi, le problème du sac à dos répond aux critères d’appartenance à la classe
NP.