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 :

codage mystérieux de recherche des permutations en javascript


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 4
    Points : 4
    Points
    4
    Par défaut codage mystérieux de recherche des permutations en javascript
    Bonjour
    Suite à l'article de Denis Hulo sur les arrangements, en cherchant autre chose, j'ai trouvé ceci (https://stackoverflow.com/questions/...in-javascript]).
    Les explications fournies à propos du code ci-dessous ne m'ont pas éclairé
    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
    var permArr = [],
      usedChars = [];
     
    function permute(input) {
      var i, ch;
      for (i = 0; i < input.length; i++) {
        ch = input.splice(i, 1)[0];
        usedChars.push(ch);
        if (input.length == 0) {
          permArr.push(usedChars.slice());
        }
        permute(input);
        input.splice(i, 0, ch);
        usedChars.pop();
      }
      return permArr
    };
    En traçant le programme avec au départ input= [5,3,7,1], il appelle successivement permute avec les valeurs du paramètre [5,3,7,1], [3,7,1], [7,1], [1], [] puis [7] et c'est là que tout devient incompréhensible pour moi, pourquoi [7] ?
    Quelqu'un aurait-il une explication sur ce qui se passe dans ce programme ?
    Peut-on faire la même chose avec un autre langage, Pascal par exemple ?
    Merci.

  2. #2
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 452
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 452
    Points : 4 601
    Points
    4 601
    Par défaut
    a la ligne 7, tu splice ton tableau d'input (passe en parametre)
    => le splice modifie le tabeau d'origine developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

    a la ligne 12, tu fais appel a permute() avec ton tableau modifie, et ce, tant qu'il y a des valeures dans ton tableau (recursivite)

    ps : si j'execute ce code, permute([3,2,1]); ca me retourne un tableau de 6 entrees

    soit les boucles ont ete mal comprises, soit la recursivite a ete mal comprise... car l'utilisation des 2 en meme temps ne donne pas le resultat souhaite (je pense que tu voulais retourner [1,2,3])

    [edit]premiere idee plus simple qui me vient :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    const arr = [1,2,3,4,5];
    const tmp = [...arr];
    for(let i=0; i<arr.length; ++i) {
        arr[i] = tmp[arr.length - 1 - i];
    }
    console.log(arr);
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  3. #3
    Candidat au Club
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci doksuri, j'ai bien compris qu'un splice modifie le tableau d'origine.

    Le programme fonctionne car il est précisément destiné à trouver toutes les permutations possibles des éléments d'un tableau et non pas simplement inverser son ordre.

    C'est précisément ce mélange de récursivité et de boucle qui me pose problème.

    En particulier lorsque l'on appelle permute(input) depuis la pile, après être sorti de la boucle, la valeur de input est-elle la valeur actuelle ou la valeur historique ?

Discussions similaires

  1. Geocoding inverse : recherche des cadors en javascript
    Par saxrub dans le forum IGN API Géoportail
    Réponses: 46
    Dernier message: 13/08/2014, 13h30
  2. Rechercher des exercices résolus sur le JavaScript
    Par depanamakudiatu dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/01/2013, 15h48
  3. Recherche des horloges en javascript
    Par grex1 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/11/2009, 15h40
  4. recherche des algorythmes pour images 2d
    Par exxos dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 24/05/2002, 13h46
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18

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