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

Mathématiques Discussion :

Trouver les combinaisons de k parmi n


Sujet :

Mathématiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut Trouver les combinaisons de k parmi n
    Bonjour,
    je sais qu'il existe beaucoup de topic existant sur ce sujet.
    Mais c'est apres beaucoup de recherches que je fais un n(ieme) posts.

    Le but est avec une combinaison de chiffre, generer toutes les nombres possibles.

    Par exemple pour :
    0, 1, 2 => 6 possibilites
    0, 1, 2, 3 => 24 possibilites.
    Le but n'etant pas de les compter mais de les afficher.

    J'ai fais un script mais le probleme c'est qu'il est beaucoup trop long pour les combinaisons a 10 chiffres.

    Voici mon script :

    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
     
     
     
    function perm($nbrs, $res)
    {
      for ($i = 0; $i != count($nbrs); $i++)
        {
          $prev = $res[count($res) - 1];
          $tmp = $prev[$i];
          $prev[$i] = $prev[($i + 1) % count($nbrs)];
          $prev[($i + 1) % count($nbrs)] = $tmp;
          if (!in_array($prev, $res))
            {
              $res[] = $prev;
              echo $prev . "\n";
              perm($nbrs, &$res);
            }
        }
      return $res;
    }
     
    $nbrs = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
    $res = array("0123456789");
    echo $res[0] . "\n";
    $res = perm($nbrs, &$res);
    Comment optimiser ce code ?

    Merci bien!

  2. #2
    Membre confirmé
    Inscrit en
    Août 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 40
    Par défaut
    Bonjour,

    Beaucoup trop long : c'est à dire ?

    Il y a près de 4 millions de solutions (si j'ai bien compris le problème), c'est normal que ce soit long non ?

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut re
    j'ai abandonne au bout de 1 mn...

    Je pense qu'il y a moyen d'optimiser ca car la je dois faire un in_array voir si il n'est pas deja dans le tableau... ca doit prendre du temps :/

    Merci

  4. #4
    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 : 52
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    itération des 10!=3628800 permutations en 70 millisecondes sur mon PC

    itérateur de permutations

    (bon c'est du java, alors c'est un peu lent )
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 788
    Par défaut re
    euh 70 milliseconde ca me semble ... impossible pour le nombre de resultat trouves ^^

    Voila mon temps avec un nouvel algo:

    total res = 3628800
    real 1m24.465s
    user 0m21.233s
    sys 0m6.308s

    PS : j'ai rien compris a ton algo en iteratif !

  6. #6
    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 : 52
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par saturn1 Voir le message
    euh 70 milliseconde ca me semble ... impossible pour le nombre de resultat trouves ^^
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    long t0 = System.currentTimeMillis(), i=0;
     
    Character[] sample = new Character[] {'0','1','2','3','4','5','6','7','8','9'};
    Permutation<Character> permut = new Permutation<Character>(sample);
     
    while(permut.next()) i++;
     
    long t1 = System.currentTimeMillis();
     
    System.out.println("Nombre de permutations : "+i);
    System.out.println("temps écoulé : "+(t1-t0)+"ms");

    Résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Nombre de permutations : 3628800
    temps écoulé : 70ms
    Dans ce code, l'algo ne fait que énumérer en mémoire les permutations. S'il faut les afficher ou faire un traitement dessus, ca sera évidement plus long.


    PS : j'ai rien compris a ton algo en iteratif !
    C'est un odomètre. C'est pas facile a comprendre, mais ca marche.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

Discussions similaires

  1. [Débutant] Trouver les combinaisons possibles
    Par divervince dans le forum Prolog
    Réponses: 7
    Dernier message: 17/02/2014, 23h40
  2. [Toutes versions] Trouver les Combinaisons possibles
    Par Mat2983 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/02/2012, 18h15
  3. Comment trouver les combinaisons possibles d'un tableau ?
    Par Jean-Marc.Bourguet dans le forum Télécharger
    Réponses: 0
    Dernier message: 30/11/2010, 15h37
  4. Réponses: 22
    Dernier message: 27/10/2006, 02h26
  5. trouver les combinaisons possibles d'un tableau ?
    Par titoumimi dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 20/09/2006, 20h29

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