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

Java Discussion :

Générer toutes les substitutions possibles entre deux listes


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2011
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 4
    Par défaut Générer toutes les substitutions possibles entre deux listes
    Bonjour à tous.

    Je suis étudiant en informatique et je rencontre des difficultés sur une partie d'un projet en Java (non noté je précise).

    Je souhaiterais simplement arriver à finir et à comprendre le projet mais je bloque sur la partie suivante :

    J'ai deux listes (ArrayList) : l'une contenant des variables (x,y,z) par exemple et une autre contenant des constantes (A,B,C) par exemple.

    Mon objectif est de créer toutes les substitutions possibles entre ces deux listes. Une substitution est un ensemble de couples.

    voici un exemple :

    ArrayList de variables contenant : x,y
    ArrayList de constantes contenant : A,B,C

    Je veux obtenir les substitutions suivantes :

    x,A y,A (ceci est une substitutions contenant deux couples x,A et y,A)
    x,A y,B
    x,A y,C
    x,B, y,A
    x,B y,B
    x,B y,C
    x,C y,A
    x,C y,B
    x,C y,C

    x,A signifiant x est remplacé par A; même chose avec y

    Voici le code que j'essaie de faire fonctionner mais sans succès :

    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
    public void Generer()
        {
            Iterator iConst = lConst.iterator(); // Iterator sur ma liste de constantes
            Terme constante; // une constante
     
            while(iConst.hasNext())// Tant que j'ai des constantes
            {
                constante = (Terme)iConst.next(); // on récupère la prochaine constante de la liste
                for(int i=0;i<lVar.size();i++) // pour chaque variable
                {
                    System.out.println("Couple : "+lVar.get(i)+","+constante);
    // j'ai le couple variable courante/constante
                }
            }
        }
    Le problème c'est que ça me retourne avec l'exemple donné :
    x,A y,A
    x,B y,B
    x,C y,C

    Et je ne vois pas comment répondre à mon problème. J'ai bien pensé à une méthode récursive mais là aussi je bloque.

    Merci de m'aider. En espérant avoir été clair.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Il faut faire un algorithme récursif, sur le modèle suivante

    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    générerCouple(listeA, listeB)
      pour tout élément a de Liste A
        pour tout élément b de listeB
           créer le couple a,b
           soit A' = liste A - a
           soit B' = liste B - b
           générerCouple (A',B')

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2011
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 4
    Par défaut
    Tout d'abord, merci d'avoir répondu aussi vite.

    Cependant cette solution me semble incomplète. Si j'enlève les termes a et b avant l'appel récursifs, j'ai une seule substitution x,A y,B et non :

    x,A y,A
    x,A y,B
    x,A y,C

    etc...

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ha désolé, je n'avais pas compris votre notion de substitution


    changer comme ceci devrais faire l'affaire, non?
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    générerCouple(listeA, listeB)
      pour tout élément a de Liste A
        pour tout élément b de listeB
           créer le couple a,b
           soit A' = liste A - b
           générerCouple (A',B)

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2011
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 4
    Par défaut
    Merci mais ça ne fonctionne pas.

    En admettant que dans votre code, listeA soit une liste de Constantes contenant AnimalA, AnimalB, AnimalC

    listeB est quand à elle une liste de variables contenant x,y

    Le but étant d'obtenir x,AnimalA / y,AnimalA (ce qui est une substitution signifiant quand x prends la valeur A, y peut prendre la valeur A)

    Je souhaite obtenir toutes les substitutions possibles à savoir :

    x,AnimalA / y,AnimalA
    x,AnimalA (ici la constante ne change pas) / y,AnimalB (mais ici la constante change)
    x,AnimalA / y,AnimalC

    Ici Y a pris toutes les valeurs de constantes possibles quand x vaut AnimalA donc on change la constante associée à x.

    On a donc :

    x,AnimalB / y,AnimalA (quand x prends la valeur AnimalB, y peut valoir AnimalA)
    x,AnimalB / y,AnimalB
    x,AnimalB / y,AnimalC

    On répète le même raisonnement avec x,AnimalC

    Or votre algorithme supprime les constantes dans la liste une fois utilisée et donc x ne peut pas valoir plusieurs fois la même valeur.

    Je reconnais avoir du mal à raisonner pour trouver toutes les substitutions possibles comme indiqué ci-dessus.

    Merci

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ben t'inverse les deux listes ou est le problème?

    listeA= x,y
    listeB= animalA,animalB

    Je vais bien générer

    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    x,animalA
     y,AnimalA
     y,AnimalB
    x,animalB
     y,AnimalA
     y,AnimalB

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

Discussions similaires

  1. Toutes les combinaisons possibles de deux listes
    Par vasilpapa dans le forum Haskell
    Réponses: 2
    Dernier message: 11/04/2014, 06h17
  2. Générer toutes les combinaisons possibles
    Par collosus dans le forum Langage
    Réponses: 1
    Dernier message: 24/06/2013, 13h54
  3. Extraire tout les doublons trouvés entre deux tables
    Par Tengu dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 12/03/2012, 12h29
  4. Procéder toutes les permutations possibles d'une liste
    Par supergrey dans le forum Mathématiques
    Réponses: 3
    Dernier message: 21/10/2011, 15h08
  5. Réponses: 16
    Dernier message: 20/10/2006, 16h31

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