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 :

Exercice de programmation dynamique


Sujet :

Algorithmes et structures de données

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 17
    Par défaut Exercice de programmation dynamique
    Bonjour.

    J'essaye depuis quelque temps d'apprendre les rudiments de la programmation dynamique, j'ai lu quelques tutoriels et plusieurs exercices (d'ailleurs si vous avez de bons liens à me conseiller ça m'aiderait). Ya un exercice qui me bloque :

    On a une séquence de N poids (nombres entiers). On doit les répartir de part et d'autre d'une balance, de façon à ce que la balance soit parfaitement équilibrée.
    Il faut que la somme des poids à gauche soit égale à la somme des poids à droite. De plus il faut maximiser la somme des poids que l'on met sur la balance, on n'est pas obligé d'utiliser tous les poids bien sûr.


    Je sais que ce problème est connu sous le nom de "2-partition problem", je sais le résoudre lorsqu'on doit utiliser tous les poids, et qu'il suffit de minimiser l'écart entre les deux partitions, mais pour cette version...je vois pas! Merci de votre aide future.

  2. #2
    Membre Expert
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Par défaut
    Un bon cours en PJ. Hésite pas à nous faire part des liens/docs que tu as trouvés intéressants !
    Fichiers attachés Fichiers attachés

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 17
    Par défaut
    Merci pour ton lien, je l'ai lu en entier c'est vrai qu'il est bien (j'ai bien aimé le fait qu'il parle des fonctions mémoires), mais je connais déjà les concepts qui y sont présentés ainsi que les exemples. Je ne suis pas rentré dans le détail des démonstrations car c'est un peu trop compliqué, et je cherche plutôt à résoudre divers problèmes.

    Un tuto avec quelques exemples et un des exercices résolus par vidéos.

    Si quelqu'un a des suggestions, des idées d'exercices ou veut partager ses connaissances sur le sujet il est le bienvenu.

    PS : Je n'ai toujours pas de solutions pour le problème que j'ai posé dans mon post précédent.

  4. #4
    Invité de passage
    Profil pro
    Lycéen
    Inscrit en
    Octobre 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1
    Par défaut
    Bonsoir,

    d[N][K] = max(max(d[N-1][K-v[N]]+v[N], d[N-1][K+v[n]]+v[N]), d[N-1][K])
    Où N est l'indice du poids, et K est le déséquilibre à gauche.
    Au départ, d[0][0] = 0 et d[0][1..2*somme de tous les poids] = +INF
    Il faut faire attention aux bords (s'arranger avec le *2 pour ne pas avoir d'indices négatifs).
    d[N][0] contiendra la somme max de poids tels que la balance soit équilibrée.

    Pour être plus clair, on peut voir ça comme un graphe implicite.
    Un noeud : {l'indice du poids, le déséquilibre à gauche}
    Un arc : Il y en a 3 : soit on met le poids à gauche (poids +v[N]), soit on met le poids à droite (poids +v[N]), soit on ne le prend pas.
    Graphe orienté et acyclique donc un peut dynamiser, et on veut le poids max.

    Jules.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 17
    Par défaut
    Salut.

    Merci pour ta réponse, en effet vu comme ça, ça parait simple... (Par contre on ne devrait pas initialiser d[0][1..2*S] à -INF plutôt qu'à +INF?).
    Tu aurais pas quelques autres petits exos de progdynamique, pour que je puisse m'améliorer un petit peu?

    PS : Je trouve que la 2e partie de ton message est moins claire que la 1ère (mais j'ai quand même compris ce que tu voulais dire.)

Discussions similaires

  1. Recherche d'exercices de programmation Fortran
    Par feynman dans le forum Fortran
    Réponses: 2
    Dernier message: 01/09/2007, 14h24
  2. Exercice de programmation
    Par shangai3 dans le forum Pascal
    Réponses: 9
    Dernier message: 08/07/2007, 12h22
  3. PHP en tant que langage de programmation dynamique
    Par hatem10 dans le forum Langage
    Réponses: 1
    Dernier message: 26/01/2007, 20h53
  4. [LG]Exercices de programmation
    Par belgaroui dans le forum Langage
    Réponses: 4
    Dernier message: 04/03/2005, 19h42

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