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 :

Couplages de sous-ensembles


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut Couplages de sous-ensembles
    Bonjour,

    je programme actuellement en python et je voudrais faire l’algorithme suivant :

    j'ai 2 ensembles E et F contenant chacun le même nombre de sous-ensembles :

    E = { (a), (a,b), (d), (a,g,h,k), (e,j,d), (d), ... }
    F = { (c,e), (d,c) (d), (e,j,k), (c,e,h,d), ((f,b),... }

    Je voudrais savoir s'il est possible de marier chaque élément de E avec un élément distinct de F :
    - chaque élément de E ne doit être couplé qu'à un seul élément de F et réciproquement (polygamie interdite).
    - il ne doit pas rester d'élément célibataire.

    Exemples :

    (a) + (a,f,g) = (a)
    (d) + (d) = (d)
    (f,j,e) + (j,a,d,u,e) = (j,e)
    (h,c,d,e,g) + (d,c,k,l,h) = (c,d,h)

    (e,u,l) + (a,d,j) = 0 (non mariable)

    Sauriez-vous comment on traite ce problème, svp. Merci pour votre aide.

    Cordialement
    Arsène

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 298
    Par défaut
    Bonjour

    contenant chacun le même nombre de sous-ensembles :
    Le même nombre de sous-ensembles ou le même nombre d'éléments ?
    Ça part mal. Moi, je vois un ensemble contenant des n-uplets. Pas de sous-ensemble. Voulais-tu dire cela : { {a}, {a,b},... } ?

    Je voudrais savoir s'il est possible de marier chaque élément de E avec un élément distinct de F
    S'il y en a le même nombre, ça part bien. A priori, oui.

    - il ne doit pas rester d'élément célibataire.
    Où ça ? Mais de quoi tu parles ? Quel est le résultat de ton algorithme ?

    Exemples :

    (a) + (a,f,g) = (a)
    Ni E, ni F ne contiennent (a,f,g). Quel exemple !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (a) + (a,f,g) = (a)
    (...)
    (f,j,e) + (j,a,d,u,e) = (j,e)
    Des fois tu fais la réunion (ligne 1), et des fois tu fais l'intersection (ligne 3). Quelle est la règle ?

    Sauriez-vous comment on traite ce problème, svp.
    Avec une boucle. Où est le problème ? Qu'est-ce qui te bloque ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    je considérai (a) (b,d) (f,g,h) comme étant des sous-ensembles. Effectivement, je viens de me rendre compte que ça s'appelle des tuples en python. Je rectifie donc :

    j'ai 2 ensembles E et F qui contiennent le même nombre de tuples.

    Et voici ma règle : un tuple de l'ensemble E et un tuple de l'ensemble F ne peuvent s'épouser que s'ils ont au moins un élément en commun.

    C'est ce que j'ai voulu montrer dans mon exemple.

    Et pour la solution :

    Citation Envoyé par Flodelarab Voir le message
    Avec une boucle. Où est le problème ? Qu'est-ce qui te bloque ?
    Je ne suis pas certain qu'une simple boucle suffise car y'a beaucoup trop de combinaisons en jeu et ça peut prendre un temps infini.

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 298
    Par défaut
    Au temps pour moi. Il n'y a pas de réunion. Il n'y a que des intersections.

    y'a beaucoup trop de combinaisons en jeu et ça peut prendre un temps infini.
    La question que tu poses relève des mathématiques combinatoires.
    Et c'est souvent que les quantités s'envolent dans ce domaine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> a = set([1, 2, 3, 4, 5])                                                                                                                                                                                                                                                                                                   
    >>> b = set([4, 5, 6, 7, 8])                                                                                                                                                                                                                                                                                                   
    >>> a.intersection(b)                                                                                                                                                                                                                                                                                                          
    set([4, 5])

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Merci de m'avoir indiquer la fonction .intersection. Je crois qu'elle devrait me servir.

    Je vais essayer d'étudier une piste --> Pour chaque élément contenu dans les tuples, je vais déterminer le nombre de mariages qu'il lui est possible de faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a peut faire x mariages, b peut faire y mariages, etc...
    Après je réfléchirai. J'espère que je vais pas tomber dans une impasse.

    J'ai au total 9 éléments et 76 tuples différents. Mais les ensembles peuvent contenir plusieurs fois le même tuple.

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 242
    Par défaut
    S'il y a n tuples dans chaque ensemble, alors il y a n! combinaisons à analyser, ce n'est pas énorme. Enfin, ça dépend de la valeur de n. Si n peut dépasser 1000, alors ça fait effectivement beaucoup de combinaisons.
    Tu peux utiliser des astuces pour diminuer les temps des traitements.
    Sur l'exemple initial, tu retrie tes 2 ensembles :

    E = { (a), (d), (d), (a,b), (e,j,d), (a,g,h,k), ... }
    F = { (d), (c,e), (d,c), (f,b), (e,j,k), (c,e,h,d), ... }

    Tu mets en premier les éléments les plus difficiles à marier (les tuples ayant peu d'éléments). Ainsi, les combinaisons qui mènent à des impasses seront plus vite identifiées.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Merci pour cette suggestion. Je la prendrai en considération. Le fait qu'il n'y ait que 9 éléments simplifie surement le problème. Je pense que c'est un cas très intéressant à étudier. Peut-être que le problème est déjà connu en mathématique, dans la théorie des ensembles... J'espère en tous cas que j'arriverai à trouver la solution.

  8. #8
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 298
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    S'il y a n tuples dans chaque ensemble, alors il y a n! combinaisons à analyser, ce n'est pas énorme
    Noooon. Beaucoup moins. n2.
    Pour chaque tuple de E, il prend un tuple de F.
    C'est une multiplication.

    Voilà pourquoi je ne comprends pas la tergiversation.

Discussions similaires

  1. sous ensembles & permutation de liste
    Par LlufRuS dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 06/12/2006, 11h22
  2. Réponses: 2
    Dernier message: 27/01/2006, 10h48
  3. sous ensemble d'une liste
    Par adel25 dans le forum C++
    Réponses: 1
    Dernier message: 23/08/2005, 16h50
  4. [DBGrid] Affichage d'un sous-ensemble de données
    Par Jean-Jacques Engels dans le forum Bases de données
    Réponses: 3
    Dernier message: 02/09/2004, 17h31
  5. Sous-ensembles de tuples
    Par HPJ dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/10/2003, 17h24

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