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

Langage Java Discussion :

Calcul de permutations


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 78
    Par défaut Calcul de permutations
    Bonjour à Tous

    j'ai la liste suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [V1(1150,1760) , V2(630,1660) , V3(40,2090) ]
    je voudrais calculer toutes les permutations possibles de ses 3 éléments,
    j'ai donc la méthode suivante :
    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
     
        private void Permutation (int k,Arraylist r)
        {
              int fact = 1;
            for (int i = 2 ;  i < r.size() ; i++)
            {
                fact = fact*(i-1);
                int pos = i - ( (k/fact) % i ) - 1;
                swap(pos,i,r);            
            }
        }
     
    private void swap(int i, int j,Arraylist A)
        {
            Object oi = A.get(i);
            Object oj = A.get(j);
            A.set(j,oi);
            A.set(i,oj);        
        }
     
        public void afficherpermutations(Arraylist l)
        {
            for (int i = 0 ; i < factorielle(l.size()) ; i ++)
            {
                 Arraylist r = new Arraylist(l);
                 Permutation(i,r);
                 System.out.println(r);
            }
        }
    Où la fonction factorielle(int i) renvoie la factorielle de i,
    Cependant ceci me donne comme résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [V1(1150,1760), V3(40,2090), V2(630,1660)]
    [V3(40,2090), V2(630,1660), V1(1150,1760)]
    [V1(1150,1760), V3(40,2090), V2(630,1660)]
    [V3(40,2090), V2(630,1660), V1(1150,1760)]
    [V1(1150,1760), V3(40,2090), V2(630,1660)]
    [V3(40,2090), V2(630,1660), V1(1150,1760)]
    et ca n'est pas du tout bon !!!
    Si quelq'un voit ou est le probleme...
    Merci d'avance

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 78
    Par défaut
    Bon bah pour ceux que ca intéresse, j'ai trouvé ou était l'erreur :
    il s'agissait d'un erreur au niveau des itérateurs, voila la solution :
    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
     
        private void Permutation (int k,Arraylist r)
        {
            int fact = 1;
            for (int i = 2 ;  i < r.size()+1 ; i++)
            {
                fact = fact*(i-1);
                int pos = i - ( (k/fact) % i ) - 1;
                swap(pos,i-1,r);            
            }
        }
     
        private void swap(int i, int j,Arraylist A)
        {
            Object oi = A.get(i);
            Object oj = A.get(j);
            A.set(j,oi);
            A.set(i,oj);        
        }
     
        public void afficherpermutations(Arraylist l)
        {
            for (int i = 0 ; i < factorielle(l.size()) ; i ++)
            {
                 Arraylist r = new Arraylist(l);
                 Permutation(i,r);
                 System.out.println(r);
            }
        }
    Voila, et ca me donne le résultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [V1(1150,1760), V2(630,1660), V3(40,2090)]
    [V2(630,1660), V1(1150,1760), V3(40,2090)]
    [V1(1150,1760), V3(40,2090), V2(630,1660)]
    [V2(630,1660), V3(40,2090), V1(1150,1760)]
    [V3(40,2090), V2(630,1660), V1(1150,1760)]
    [V3(40,2090), V1(1150,1760), V2(630,1660)]
    et c'est bien toutes les permutations possibles

  3. #3
    Membre expérimenté Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Par défaut
    petit détail:
    tu fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int i = 0 ; i < factorielle(l.size()) ; i ++)
    l'operation factorielle est donc effectué à chaque fois, il serait mieu de faire une variable locale pour enregistrer le resultat de l'operation plutot que de la faire a chaque fois (tu gagnerai ennormement en vitesse sur des gros calcul!)
    du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int resFact = factorielle(l.size());
    for (int i = 0 ; i < resFact ; i ++)

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 78
    Par défaut
    C'est Vrai !!!!
    Merci pour cette précision !

Discussions similaires

  1. Exercice à résoudre - affectation de variables, calcul, permutations
    Par debutenprogrammation dans le forum Débuter
    Réponses: 6
    Dernier message: 28/09/2014, 14h56
  2. sur le calcul de permutation d'un vecteur
    Par linda05 dans le forum MATLAB
    Réponses: 4
    Dernier message: 14/02/2014, 13h41
  3. Réponses: 3
    Dernier message: 10/09/2013, 19h23
  4. Comment calculer le nombre de permutation ?
    Par skorpius dans le forum Mathématiques
    Réponses: 3
    Dernier message: 12/11/2007, 13h49
  5. [TP7] Calculer sin, cos, tan, sqrt via le FPU
    Par zdra dans le forum Assembleur
    Réponses: 8
    Dernier message: 25/11/2002, 04h09

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