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 :

Permutation avec contrainte 2D


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 48
    Points : 41
    Points
    41
    Par défaut Permutation avec contrainte 2D
    Hello all,

    Je cherche à trouver toutes les combinaisons possible pour un tableaux 2D avec comme contrainte, toutes les valeurs sont par colonne. Pour exemple:

    Entrée :
    tableau de lettres
    __|4 | 5 | 6
    1 | A | C | B
    2 | B | D | B
    3 | C | B | C

    Sortie :

    __| 4 | 5 | 6
    1 | A | C | B
    2 | A | C | B
    3 | A | C | B

    __| 4 | 5 | 6
    1 | A | D | B
    2 | A | D | B
    3 | A | D | B

    __| 4 | 5 | 6
    1 | A | B | B
    2 | A | B | B
    3 | A | B | B

    __|4 | 5 | 6
    1 | B | C | B
    2 | B | C | B
    3 | B | C | B

    ...

    __|4 | 5 | 6
    1 | A | C | C
    2 | A | C | C
    3 | A | C | C

    .....

    Quelqu'un aurait une idée pour faire ça ?

  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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Tous tes tableaux ont des lignes identiques. C'est voulu ?
    Auquel cas, il suffit de générer la 1ère ligne d'un tableau et de la copier 2 fois.

    Si je comprend bien, la 1ère ligne est un élément du produit cartésien {A,B,C}x{B,C,D}x{B,C} (c-'est à dire les éléments uniques de chaque colonne)
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 48
    Points : 41
    Points
    41
    Par défaut
    , Merci @pseudocode

    C'est exactement ça,

    J’étais parti loin dans mon délire que je n'ai même pas vue que toutes les lignes sont les mêmes .
    Il suffit de déterminer l'ensemble des valeurs possibles par colonne et d'en faire un produit cartésien.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 48
    Points : 41
    Points
    41
    Par défaut
    Et voilà une petite fonction récursive pour la génération du produit cartésien qui prend en entrée un vecteur des ensembles possibles:

    Code : 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
     
    		/**
    		*/
    		template< typename T>
    		vector<set<T>> cartesianProduct( vector<set<T>> sets ) 
    		{
     
    		  vector<set<T>> result;
     
    		  if (sets.size() == 0) 
    		  {
    			return vector<set<T>>();
    		  }
    		  else if (sets.size() == 1)
    		  {
    			  return sets;
     
    		  }
    		  else
    		  {
     
    			set<T> firstSet = sets[0];
     
    			vector<set<T>> remainingSets = cartesianProduct( vector<set<T>>( &sets[1], &sets[sets.size()-1] ) );
     
    			for (T elm : firstSet) 
    			{
    			  for (set<T> remainingSet : remainingSets )
    			  {
    				set<T> tmpRes;
     
    				tmpRes.insert( elm );
    				tmpRes.insert( remainingSet.begin(), remainingSet.end() );
    				result.push_back( tmpRes);
     
    			  }
    			}
     
    		  }
     
    		  return result;
     
    		}

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

Discussions similaires

  1. pb avec contrainte et extensions Merise 2
    Par leilasky dans le forum Access
    Réponses: 1
    Dernier message: 07/11/2005, 21h38
  2. Optimisation de tournées avec contraintes
    Par DelphiManiac dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 25/10/2005, 11h35
  3. UPDATE avec contraintes
    Par Ar-t dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 21/03/2005, 15h20
  4. [Debutant]Suppression dans des tables avec contraintes
    Par Roming22 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 26/10/2004, 17h23
  5. SELECT : extraire 2 val d'1 colonne avec contraintes diff
    Par NiBicUs dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/03/2004, 14h56

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