IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de donn�es Discussion :

Impl�mentation d'une solution dynamique au probl�me du sac-�-dos


Sujet :

Algorithmes et structures de donn�es

  1. #1
    Nouveau Candidat au Club  
    Homme Profil pro
    �tudiant
    Inscrit en
    Mai 2016
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Lesotho

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 2
    Par d�faut Impl�mentation d'une solution dynamique au probl�me du sac-�-dos
    Bonjour;
    alors dans mon projet fin d'�tude, qui n'a aucune relation avec mes �tudes sous nom de sac-�-dos, j'ai besoin de mettre algorithme glouton et algorithme programmation-dynamique pour un probl�me sac-�-dos'
    j'ai travaill� avec un algorithme pr�-pr�par�, donc j'ajoute des truc et je les change... mais j'arrive pas a faire le code qui afficher les objets qui a choisis pour le mettre dans le sac,
    j'aimerai des id�es qui peuvent m'aidez a avance, sachant que pour mon projet je suis cens� apprendre le tout moi m�me, je n'ai jamais �tudi� la programmation en c ni en c++, juste la base, mais �a m'aidera pas. Et je ne connais presque sur les 2algo car je les d�couvre au fil de ces 3mois mais je ne connais que la d�finition donc voil�

    je sais que c'est 'interdit' de faire un exercice � la place de quelqu'un, mais j'ai fort besoin de vous, personne ne peut m'aider sauf sur internet

    voici mon code, c'est de la programmation dynamique normalement ou du Glouton? ^^

    Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    #include <iostream>
     
    using namespace std;
     
    #define max(a,b) (a > b ? a : b)
     
    int matrix[100][100] = {0};
     bool x[100];
    int knapsack(int i, int size, int weights[],int values[]){
        int take,dontTake;
     
     
        take = dontTake = 0;
     
        if (matrix[i][size]!=0)
            return matrix[i][size];
     
        if (i==0){
            if (weights[0]<=size){
                matrix[i][size] = values[0];
                return values[0];
            }
            else{
                matrix[i][size] = 0;
                return 0;
            }
        }
     
        if (weights[i]<=size){
            take = values[i] + knapsack(i-1, size-weights[i], weights, values);
            x[i]=0;}
            else {
            dontTake = knapsack(i-1, size, weights, values);
            x[i]=1;}
            cout<< "pour l'objet "<<i<< " , x[i]="<<x[i]<<endl;
            matrix[i][size] = max (take, dontTake);
     
     
        return matrix[i][size];
     
    }
     
    int main(){
        int n,knapsackSize,weights[100],values[100];
        int i;
        cout<<"entrer the number of items"<<endl;
        cin>>n;
       cout<<"enter the knapsackSize"<<endl;
        cin>>knapsackSize;
     
        for(i=0;i<n;i++)
        {
           cout<<"enter weight and value of item "<<i+1<<endl;
           cin>>weights[i]>>values[i];
        }
     
     
     
        cout<<"Max value ="<<knapsack(n,knapsackSize,weights,values)<<endl;
     
        return 0;
    }

    Voici mes questions:

    -le code me donne la valeur maximal fausse, �a dois me donner un 90 comme valeur, voici l'exemple que j'ai pris de la programmation dynamique:

    Nom : 9l0z.jpg
Affichages : 4525
Taille : 32,8 Ko

    - j'aimerai savoir c'est quoi la fonction qui permet de me donner les objet choisi a mettre dans le sac
    - normalement dans la programmation dynamique: et ce que je dois avoir la matrice ou quoi ? si oui comment le faire, je suis perdu

    aidez moi s'il vous plait,

    et voici les r�sulats qui me semble fausse puisque je dois avoir 90comme valeur max.
    Code x : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    entrer the number of items
    4
    enter the knapsackSize
    10
    enter weight and value of item 1
    5 10
    enter weight and value of item 2
    4 40
    enter weight and value of item 3
    6 30
    enter weight and value of item 4
    3 50
    pour l'objet 1 , x[i]=1
    pour l'objet 2 , x[i]=0
    pour l'objet 3 , x[i]=0
    pour l'objet 4 , x[i]=0
    Max value =4713208
    
    --------------------------------
    Process exited after 22.29 seconds with return value 0
    Appuyez sur une touche pour continuer...

    Encore merci.

  2. #2
    R�dacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte syst�me
    Inscrit en
    D�cembre 2006
    Messages
    10 062
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Architecte syst�me
    Secteur : Industrie

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 10 062
    Par d�faut
    Bonjour,

    3 remarques en vrac:

    1. L'index pour la cr�ation des items (weights[] et values[]) varie entre 0 et n-1.
    Mais lors de l'appel de la
    fonction knapsack(), on passe en param�tre "n" => on va acc�der � values[n] et weights[n].
    Vraisemblablement, tu devais avoir un truc du genre: take = values[i-1] + knapsack(i-1, ...

    2. Il faut toujours �valuer "
    take" ET "dontTake" pour choisir le meilleur des deux. Dans ton algo, tu �values l'un OU l'autre.

    3. Ce n'est pas un algo dynamique mais un algo d'�valuation r�cursive: pour calculer knapsack(n) on calcule knapsack(n-1), qui lui m�me calcule knapsack(n-2), etc.

    Dans un algo dynamique on fait une �valuation incr�mentale en utilisant les r�sultats interm�diaires pour calculer le prochain incr�ment
    - knapsack(0) est calcul� � partir des donn�es du probl�me initial.
    - knapsack(1) est calcul� � partir de knapsack(0) et des donn�es du probl�me initial.
    - knapsack(2) est calcul� � partir de knapsack(0), knapsack(1) et des donn�es du probl�me initial.
    - etc.

    A+
    ALGORITHME (n.m.): M�thode complexe de r�solution d'un probl�me simple.

  3. #3
    Nouveau Candidat au Club  
    Homme Profil pro
    �tudiant
    Inscrit en
    Mai 2016
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Lesotho

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 2
    Par d�faut
    bien Merci, je vais corriger cel�,

Discussions similaires

  1. [Python 2.X] Est ce qu'il existe une solution pour ce probl�me ?
    Par wissssam dans le forum G�n�ral Python
    R�ponses: 5
    Dernier message: 17/03/2016, 10h58
  2. Une solution pour tous probl�mes
    Par kadden dans le forum Gestion de projet
    R�ponses: 7
    Dernier message: 02/03/2012, 10h21
  3. Une solution pour tous probl�mes
    Par kadden dans le forum M�thodes Agiles
    R�ponses: 1
    Dernier message: 11/02/2012, 11h49
  4. R�ponses: 0
    Dernier message: 19/11/2010, 17h10
  5. Impl�mentation d'une solution de e-commerce
    Par superfafa dans le forum ASP
    R�ponses: 2
    Dernier message: 15/01/2007, 10h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo