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 :

liste de combinaison possible d'un tableau


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 5
    Par défaut liste de combinaison possible d'un tableau
    Bonjour à tous, voici mon problème :

    j'ai un tableau à n cellules qui contiennent elles mêmes n valeurs.
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    tab = (
                taille  ( 30, 32 ),
                couleur ( jaune, rouge, bleu, vert, .... ), 
                texture ( jeans, cuir, ... ), 
                .....  
             )
    Et je veux récupère chaque combinaison possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    res = (
                (30, jaune, jeans),
                (30, jaune, cuir), 
                (30, rouge, jeans),
                ...
             )
    Si quelqu'un a une idée, je suis preneur car je coince vraiment là

    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
    Il s'agit d'un problème d'énumération, ça n'est pas très compliqué. Un enchaînement de boucle devrait suffire.

    Par ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Pour i de 1 à NbTaille faire 
         Pour j de 1 à NbCouleur faire 
              Pour k de 1 à NbTexture faire 
                  Combinaison <- ( i-ème taille , j-eme couleur , k-ème texture ) 
              Fin pour   
         Fin pour
    Fin pour
    Sinon, tu peux procéder autrement en remplissant les combinaisons au fur et à mesure un peu à la manière d'un compteur.

    Tu commences par calculer le nombre de combinaisons (un simple produit), et ensuite pour chacune de tes cellules, tu remplies. Par ex imagines que tu ne travailles que sur deux catégories, la taille (39 et 40) et la couleur (en supposant trois couleurs : rouge jaune et bleu). Ca te fait donc 6 combinaisons possibles, tu commences à remplir le premier champ :

    ( 39 , X )
    ( 39 , X )
    ( 39 , X )
    ( 40 , X )
    ( 40 , X )
    ( 40 , X )

    C'est simple, le premier champ, tu sais que tu dois prendre en compte toutes les combinaisons et tu sais que tu n'as que deux choix possibles, il y a donc trois combinaisons avec 39 et trois avec 40.

    Ensuite, pour la deuxième case, il suffit de ne travailler que sur un intervalle du précédent (par ex les trois premières combinaisons), les autres tu vas les obtenir en répétant ce que tu viens de calculer.

    ( 39 , Rouge )
    ( 39 , Jaune )
    ( 39 , Bleu )

    Pour obtenir les trois autres combinaisons, il te suffit de copier ce que tu viens de faire.

    Ca se généralise en dimensions n sans trop de problèmes.

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 5
    Par défaut
    Oui c'est simple évidement si on connais le nombre de dimensions.

    2 dimensions : 2 boucles for, 3 dimensions : 3 boucles for...

    Mais ce que je n'arrive pas, c'est à mettre en place un script qui fonctionne avec 1 ou n dimensions.

  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
    Utilises alors la seconde solution que je t'ai proposé.

  5. #5
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 78
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    La solution se trouve dans mon cours (Relations->produits cartésiens).
    Voilà l'algo en python:
    Code python : 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
    # -*- coding: latin-1 -*-
    from sets import Set
    import copy
     
    #construction du produit cartésien par deux boucles imbriquées
    def cartesien (E,F):
        P=[]
        while E:
            x=E.pop()
            G=copy.copy(F)#car la boucle suivante est destructrice
            while G:
                y=G.pop()
                c=[x,y]
                C=[c]
                P.extend(C)
        return P
     
    #isomorphisme (A,(B,C)) (A,B,C)
    def flat (L):
        return L[1]+[L[0]]
     
    def main():
        Tailles=[30,32]
        Couleurs=['jaune','rouge','bleu']
        Textures=['Jeans','Cuir']
        C1=cartesien(Couleurs,Textures)
        C2=cartesien(Tailles,C1)
        print [flat(X) for X in C2]
     
    if __name__ == '__main__':
        main()
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  6. #6
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    tu connais forcément le nombre d'éléments puisque tu les as stocké
    Donc tu fais un parcours récursif sur tous tes éléments => un appel récursif qui ne contient qu'une boucle.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

Discussions similaires

  1. Toutes les combinaisons possible d'un tableau
    Par Space23 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 16/03/2014, 21h27
  2. Liste de combinaisons possibles
    Par Invité dans le forum Langage
    Réponses: 1
    Dernier message: 10/10/2012, 19h37
  3. Toutes les combinaisons possibles d'un tableau
    Par absot dans le forum Langage
    Réponses: 7
    Dernier message: 13/09/2012, 21h23
  4. Comment trouver les combinaisons possibles d'un tableau ?
    Par Jean-Marc.Bourguet dans le forum Télécharger
    Réponses: 0
    Dernier message: 30/11/2010, 15h37
  5. trouver les combinaisons possibles d'un tableau ?
    Par titoumimi dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 20/09/2006, 20h29

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