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

JavaScript Discussion :

Algorithme de permutation dans un tableau 2 dimenssions


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 3
    Par défaut Algorithme de permutation dans un tableau 2 dimenssions
    Bonjour,
    Je cherche à effectuer un algorithme de "permutation" qui fonctionnerait de cette façon :

    Fonction qui prend en entrée un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var tab= [["A1","A2","A3"],["B1","B2"],["C1","C2"]];

    et en sortie on obtient un tableau avec les différentes permutations, le nombre de permutation doit être égale à n! (ou n est le nombre d'élément total des sous tableaux) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    tabRes = [
    [ "A1", "B1", "C1" ],
    [ "A1", "B1", "C2" ],
    [ "A1", "B2", "C1" ],
    [ "A1", "B2", "C2" ],
    [ "A2", "B1", "C1" ],
    [ "A2", "B1", "C2" ],
    [ "A2", "B2", "C1" ],
    [ "A2", "B2", "C2" ],
    ​[ "A3", "B1", "C1" ],
    [ "A3", "B1", "C2" ],
    [ "A3", "B2", "C1" ],
    [ "A3", "B2", "C2" ]];
    Je sais pas si c'est vraiment de la permutation...
    Mais je me creuse la tête depuis hier sans résultat.

    Merci d'avance de votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    de façon plutôt empirique :
    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
    const tab = [["A1","A2","A3"],["B1","B2"],["C1","C2"]];
    var ii = 0;
    var res = [];
    for( var A in tab[0] )
    {
      for( var B in tab[1] )
      {
        for( var C in tab[2] )
        {
          res[ii] = [tab[0][A],tab[1][B],tab[2][C]];
          ii++;
        }
      }
    }
    console.log( res);

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 3
    Par défaut
    Merci à vous mais je cherche une solution pour différente taille de tableau.
    Le tableau était la pour l'exemple

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 3
    Par défaut
    J'ai trouvé la solution pour ce que ça intéresse :
    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
     
    function getCombinaison(tab, combinaison = [], res = []) {
        if (!tab.length) {
            res.push(combinaison);
        } else {
            tab[0].forEach(e=> {
                let suiv= tab.slice(1);
                let copie= combinaison.slice();
                copie.push(e);
                getCombinaison(suiv, copie, res);
            });
        }
        return res;
    }
     
    const list = [["A1","A2","A3"],["B1","B2"],["C1","C2"]];
     
    console.log(getCombinaison(list));

  5. #5
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut


    Je vois "Permutation" dans le titre de la question et "produit cartésien" dans l'explication que vous faites.


    Pour le produit cartésien de n arrays, voir : https://www.developpez.net/forums/d9...y/#post8405132

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/01/2016, 19h20
  2. Stocker des ensembles de permutations dans un tableau
    Par molka111 dans le forum Collection et Stream
    Réponses: 0
    Dernier message: 24/02/2011, 11h00
  3. Importer une table access dans un tableau 2 dimenssion
    Par christopher07 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/05/2007, 18h47
  4. Récursivité, permutations d' éléments dans un tableau
    Par baeri dans le forum Algorithmes et structures de données
    Réponses: 20
    Dernier message: 29/01/2007, 20h29
  5. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21

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