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 :

Partition de poids minimum d'un ensemble


Sujet :

Algorithmes et structures de données

  1. #1
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut Partition de poids minimum d'un ensemble
    Bonjour,

    J'ai un ensemble E = {o1, o2, ..., oN} de N objets,
    ainsi que M couples (sous-ensemble, poids), par exemple
    ({o3, o7}, 10)
    ({o2, o3, o8}, 20)
    ...
    Je cherche quels couples choisir pour former une partition de E de poids minimum .

    Y'a t-il un algo connu pour faire ça ?
    Toute idée, pointeur sont les bienvenus, merci.

  2. #2
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Ca ressemble très fortement à un problème d'arbre couvrant de poids minimum. Regardes du coté des algos de Prim et Kruskall.

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Oui, je crois notamment avoir trouvé une bijection entre mon problème et la recherche du plus court chemin dans un graphe. Malheureusement, cela mène à un algorithme très peu efficace car le graphe en question a un trop grand nombre de sommets. Mais je vais quand même essayer de m'inspirer de ce genre d'algo.

  4. #4
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Je ne vois pas trop le rapport entre les plus courts chemins et ce que tu demande, mais bon ... . Pour ce qui est des algos de plus court chemin, tu peux t'inspirer de Bellman Ford (ou Djikstra suivant certaines hypothèses)

    As-tu essayé de voir du coté des algos de que je t'ai proposé ?

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ya un truc que je comprends pas..

    Si tu connais tes poids, ta somme est déterminée, non ??

    Ou alors c'est les poids que tu veux déterminer ??

    Si c'est le cas, un algo (physique ), consiste à faire une résolution par approximations successives (dychotomie).

    Une résolution mathématique consiste en une méthode du Simplex...

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    En fait les sous-ensembles sont en très grand nombre et se chevauchent plus ou moins tous. Il faut que j'en choisisse quelques uns pour former exactement (sans chevauchement) l'ensemble E.

    Les algorithmes d'arbres couvrants ne m'aident pas beaucoup, ils construisent la solution par descente de gradient (meilleur choix local), ce qui ne fonctionne pas dans mon cas.

    Les algorithmes de plus court chemin (entre le noeud "ensemble vide" et le noeud "ensemble E") me permette de résoudre mon problème mais au prix d'un temps de calcul très élevé.

    J'ai pourtant l'intuition qu'il doit exister un algorithme assez peu couteux à ce problème.

  7. #7
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    (meilleur choix local), ce qui ne fonctionne pas dans mon cas.
    Il me semble que tu si tu as un optimum local, ça te donne un optimum global. Tu as réellement essayé Kruskall ?

    mais au prix d'un temps de calcul très élevé.
    Quel algo de base à tu utilisé ?

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Citation Envoyé par PRomu@ld
    Il me semble que tu si tu as un optimum local, ça te donne un optimum global.
    Hélas non, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    E = {o1, o2, o3}
    C1 = ({o1}, 1)
    C2 = ({o2}, 3)
    C3 = ({o2, o3}, 10)
    C4 = ({o1, o3}, 4)
    Si je commence par choisir C1, ensuite mon seul choix possible c'est C3 qui coute 10. C2 + C4 est meilleur.

    Citation Envoyé par PRomu@ld
    Quel algo de base à tu utilisé ?
    Pour l'instant je parcours récursivement toutes les solutions, en essayant tous les choix possibles, ce qui explose dès que N ou M dépasse 100.

  9. #9
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Si je commence par choisir C1, ensuite mon seul choix possible c'est C3
    En fait non, si tu pars de Kruskall (désolé, j'y tiens ), le choix s'effectue en prenant les arêtes de poids minimum.

    Tu commences par C1 puis C2 puis C4. Or, le problème est que tu ne dois pas avoir de recouvrement.

    Une méthode (je ne sais pas si elle est correcte), serait de ne pas considérer les singletons dans un premier temps, puis de les reprendre une fois que l'algorithme est terminé pour voir ce que l'on peut faire. L'idée serait en fait, de faire un arbre couvrant dans une première etape, et ensuite, à chaque commet où tu as plusieurs arrêtes, tu regardes, si tu ne peux pas éliminer les doublons par ces singletons.

    Une autre idée, qui me vient à l'esprit, serait peut-être de s'inspirer du problème du sac à dos (ton problème y ressemble en fait), et à l'aide de la programmation dynamique tu peux peut-être trouver une solution acceptable en terme de temps (si tes coefficients sont entiers)

  10. #10
    Membre Expert Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Par défaut
    Je partirais plus sur Prim...

    Tu construis le graphes d'intersection de tes ensembles {o1,...,on}:

    - les noeuds sont o1,...,on
    - il y a une arrete entre op et oq ssi l'intersection d'op et oq est non vide

    A partir de là, tu peux dejà, avant de commencer les calculs, regarder la gueule de ce graphe: composantes connexes, racines éventuelles,....

    Ensuite, tu appliques Prim ou Kruskall... (cf par ex http://perso.ens-lyon.fr/eric.thierry/ALGO2/cours5.pdf

    Mais je paries que tes difficultés proviennent simplement du fait que tu parcours récursivement toutes les possibilités, sans tenir compte de la tête de ton graphe !

  11. #11
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Merci, j'ai trouvé, mon problème fait parti des problèmes de "set cover". C'est un mélange du problème "weighted set cover" (chaque sous-ensemble à un poids) et "exact cover" (les sous-ensembles choisis doivent être disjoins).

    La mauvaise nouvelle c'est que c'est NP-complet (voire NP-hard).

  12. #12
    Membre Expert Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Par défaut
    NP-complet c'était sûr... C'est pourquoi il faut que tu regardes la tête de ton graphe d'intersection.

    Si maintenant tu cherchais de l'universel, t'es mal barré

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Arbre recouvrant de poids minimum
    Par helamal dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 02/01/2013, 19h46
  2. Réponses: 6
    Dernier message: 02/06/2009, 21h36
  3. Possibilités dans les arbres couvrant de poids minimum
    Par Lucas Panny dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 26/02/2008, 19h03
  4. partition d'un ensemble finie
    Par lachose dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 19/10/2006, 03h05
  5. [VB6] partitions d'un ensemble
    Par perduuu dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 13/09/2004, 16h21

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