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 :

Permutations


Sujet :

Algorithmes et structures de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 13
    Par défaut Permutations
    Bonjour,

    J'aimerais connaître le code d'une fonction qui permet à partir d'un ensemble de n élements (qui se trouvent dans un tableau) de construire un tableau (ou un arbre, ou tout auter suggestion !) contenant toutes les permutations possibles à partir de ces n élements (que l'on peut supposer différents, pour que ce soit plus simple).

    Il y a n*(n-1)*(n-2)*...*1=n! permutations dans ce cas là.

    J'ai cherché sur le net le code d'une telle fonction, mais je ne l'ai pas trouvé.

    J'ai besoin de cette fonction pour n=6 (soit 720 permutations).

    Si quelqu'un pouvait me fournir un lien fournissant une telle fonction, à défaut du code, merci.

    un petit exemple : si n=4, avec t={'a','b','c','d'}

    on a :
    a b c d
    a b d c
    a d b c
    a d c b
    a c d b
    a c b d
    d a c b
    ... (24 permutations en tout).

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut Re: Permutations
    Citation Envoyé par Pépé Lélé
    Bonjour,
    J'ai cherché sur le net le code d'une telle fonction, mais je ne l'ai pas trouvé.
    Tu as mal cherché sur ce forum, c'est l'objet de topics de manière très régulière
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 13
    Par défaut
    C'est vrai que j'ai trouvé plusieurs fois cette question (rien que sur ce site), quant aux réponses ... elles ne sont pas satisfaisantes, c'est pourquoi je demande à nouveau.

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Tu mets tous tes éléments dans une liste, puis tu boucles.
    Pour chaque élément du tableau, tu mets le premier élément dans la liste, puis tu appliques la méthode au reste du tableau, puis tu mets le deuxième élément et tu appliques la méthode au reste du tableau, ...

  5. #5
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    J'ai bien les procédures récursives, tu peux essayer celà, ça marche bien.
    Evidemment, s'il y beaucoup de lettres, tu peux faire exploser ta machine.
    C'est une construction progressive de la chaine, str1 contient l'anagramme déjà formé, str2 les lettres restant à introduire.
    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
    procédure permutation(chaine str1, chaine str2)
       variables
          ch : caractère
          i : entier (compteur de boucle)
          str11 : chaine de caractères
          str22 : chaine de caractères
    debut      
       si longueur(str2) = 0 alors
          ajouter str1 à la liste des permutations
       sinon
          pour chaque lettre i de str2 faire
          debut
             ch <- ième lettre de str2
             str11 <- str1 + ch
             str22 <- str2 - ch
             permutation(str11, str22)
    	  fin
       fin si
    fin
    Appel par permutation("", "abcd").
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 13
    Par défaut
    Merci

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Par défaut
    auriez vous un ordre d'idée de la complexité d'un telle fonction (la fonction juste au dessus) ?

    merci

  8. #8
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Si tu as un processeur d'500 Mhz qui réalise une permutation par cycle (c'est une approximation) :

    Pour générer toutes les permutations de 12 éléments, il te faut 1 seconde (12! ~ 500.000.000). Donc, il suffirait de monter à 18 éléments pour voir qu'il faut : 13.366.080 sec = 154 jours...

    Avec 20 éléments => 161 ans

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

Discussions similaires

  1. Permuter deux variables sans variable temporaire
    Par khayyam90 dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 09/01/2015, 08h02
  2. Permutations matrice ligne
    Par stn2003 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 14/02/2005, 17h57
  3. [Perf] Permuter un tableau
    Par seb-astien dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 25/08/2004, 19h31
  4. Permuter un tableau
    Par seb-astien dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 25/08/2004, 16h40
  5. [Algo] Permutations et arrangements
    Par rbag dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 13/10/2003, 11h40

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