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 :

Générer tous les tirages possibles.


Sujet :

Algorithmes et structures de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Points : 91
    Points
    91
    Par défaut Générer tous les tirages possibles.
    Bonjour ,
    voici le problème :
    Prenons 9 boules numérotés de 1 à 9. J'aimerai générer tous les tirages possibles de 9 boules sans remise.
    Autrement dit, générer un listing complet des 9! possibilités du style :

    123456789
    123456798
    123456879
    123456897
    ....
    987654321

    Auriez-vous une idée de comment aborder cette algo ?

    Merci

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 121
    Points : 127
    Points
    127
    Par défaut
    bah simplement avec la recusivité ^^

    ex de code en python :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def gen(palier=1, nb=''):
        for i in range(1,10):
            if(palier<9) : gen(palier+1, nb+str(i))
            else : print nb
    Mais si tu veux les stocker ds un tableau, bonne chance, il ya plus de 387420489 solutions ^^, ça flingue la memoire ^^

    Edit en fait je crois que c'etait pas ça la question :s autant pour moi.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Points : 91
    Points
    91
    Par défaut
    Non heureusement l'objectif est de créer un fichier qui subira à son tour certains traitements etc.

    Par contre il me semble que ça fait beaucoup de solutions. Un chiffre ne peut sortir qu'une seule fois par tirage (il ne peut donc pas y avoir plsrs 1 dans un même tirage par exemple.)

    En tout cas merci, la récursivité me parait être en effet la bonne approche.

    [Edit]
    Merci de ton aide[/edit]

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 121
    Points : 127
    Points
    127
    Par défaut
    Oui c'est bien ce que je vien de me dire (cf mon edit en meme temps que tu as posté ton message). Mais je vais chercher

  5. #5
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    En C++ c'est très simple avec <algorithm> et next_permutation

    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
     
    #include <iostream>
    #include <algorithm>
     
    using namespace std;
     
    int main(void)
    {
    int tableau[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    unsigned int compteur = 0;
     
    do{
     
    compteur++;
    for ( int i = 0 ; i < 9 ; i++ ){
    std::cout << tableau[i];}
    cout << endl;
     
    }while ( next_permutation( tableau, tableau + 9 ) );
    cout << compteur << " permutations faites" << endl;
     
    return 0;
    }

  6. #6
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 121
    Points : 127
    Points
    127
    Par défaut
    J'ai modifié le code vu plus haut, voilà ce que ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def gen(palier=1, nb='', sauf=[]):
        for i in range(1,10):
            if(palier<9):
                if(i not in sauf) : sauf.append(i); gen(palier+1, nb+str(i), sauf); del(sauf[-1])
            else :
                if(i not in sauf) : print nb+str(i)
    edit : mince je n'avais pas vu que tu avais repondu :s

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Points : 91
    Points
    91
    Par défaut
    Je viens de tester la solution C++, ça marche super !
    9! solutions.

    Je testerais également ta solution DiGiTAL pour te dire quoi.

    Merci beaucoup pour votre aide à tous les deux!

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

Discussions similaires

  1. Générer tous les scripts de création de tables
    Par farenheiit dans le forum Administration
    Réponses: 5
    Dernier message: 03/08/2007, 12h05
  2. Liste de tous les évènements possibles sur un formulaire
    Par Zhebulon dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 18/06/2007, 09h54
  3. algorithme tous les polygones possibles
    Par xorsx dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 16/12/2006, 18h31
  4. Réponses: 16
    Dernier message: 20/10/2006, 17h31
  5. [JGraphT] Obtenir tous les chemin possibles
    Par pmartin8 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 02/06/2006, 20h26

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