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 :

Boucler sur un nombre indéfini de tableaux


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 70
    Points : 53
    Points
    53
    Par défaut Boucler sur un nombre indéfini de tableaux
    Bonjour,

    J'ai déjà écris un message dans le forum PHP mais je me suis rendu compte que c'est plus un problème d'algo.

    Je possède un tableau, avec des sous tableaux, de la forme :

    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
     
    array(3) {
     array(2) {
      [0] => string(5) "15110"
      [0] => string(5) "59999"
     }
     array(1) {
      [0] => string(2) "it"
     }
     array(1) {
      [0] => string(5) "fr"
      [0] => string(5) "uk"*
      [0] => string(5) "spane"
     }
    }
    L’idée est de concorder chaque terme pour faire :

    ‘15110 it fr’
    ‘15110 it uk’
    ‘15110 it spane’
    ‘59999 it fr’
    ‘59999 it uk’
    ‘59999 it spane’
    Sachant que le nombre de sous tableau est aléatoire.

    Comment réaliser les chaines de caractère ci-dessus, sachant que je le nombre de tableau est variable ?
    Merci.

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

    Je crois que ce que tu veux faire s'appelle le produit cartésien infini. C'est toujours bon à savoir.

    Est-ce que c'est envisageable pour toi d'utiliser des listes chaînées ? Si c'est oui, j'ai une vague idée de comment faire. Sinon je vois pas comment faire sans faire de nombreuses réallocations mémoires.

    Voici un exemple de liste chainée en php.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 70
    Points : 53
    Points
    53
    Par défaut
    Je peux utiliser une liste chaînées.
    Mais je n'ai pas d'algo qui me viens à l'esprit.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Tu peux décomposer ton problème en deux sous-problèmes plus simples.

    D'abord tu doit d'abord être capable de faire le produit cartésien entre deux tableaux de chaines de caractères.

    Par exemple, tu doit faire une fonction qui transforme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    array(3) {
     array(2) {
      [0] => string(5) "15110"
      [1] => string(5) "59999"
     }
     array(3) {
      [0] => string(2) "fr"
      [1] => string(2) "uk"
      [2] => string(5) "spane"
     }
    }
    en ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    array(6) {
      [0] => string(8) "15110 fr"
      [1] => string(8) "15110 uk"
      [2] => string(11) "15110 spane"
      [3] => string(8) "59999 fr"
      [4] => string(8) "59999 uk"
      [5] => string(11) "59999 spane"
    }
    On va appeler cette fonction "produit_cartesien_2".

    Une fois que t'as cette fonction, tu l'applique sur les deux premiers tableaux de chaines de caractères. Tu obtiens un tableau de chaines nommé T12 que tu garde en mémoire.

    Ensuite tu appliques la fonction "produit_cartesien_2" sur le tableau T12 et sur le 3ème tableau. Tu obtiens le tableau T123 que tu garde en mémoire (tu peux jeter T12 maintenant).

    Ensuite tu applique la fonction "produit_cartésien_2" sur le tableau T123 et sur le 4ème tableau ...

    --------------------------------------------------------------------
    --------------------------------------------------------------------

    Tout ça, tu peux le faire avec des tableaux classiques, mais c'est plus efficace en utilisant des listes chainées pour la construction progressive de T12, T123, T1234, ...

    Par exemple pour concaténer deux tableaux de caractères "abc" et "def", tu doit créer un 3ème tableau de 6 caractères, recopier le 1er tableau, puis recopier le 2ème tableau, puis détruire les deux premiers tableaux.

    Dans cet algorithme, si on utilise des tableaux, on va faire cela de très nombreuses fois :

    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
    "abc" + "def" + "ghi" + jkl"
     
    -> allocation d'un tableau de 6 caractères
    -> destruction de deux tableaux de 3 caractères
     
    "abcdef" + "ghi" + "jkl"
     
    -> allocation d'un tableau de 9 caractères
    -> destruction d'un tableau de 6 caractères et un autre de 3
     
    "abcdefghi" + "jkl"
     
    -> allocation d'un tableau de 12 caractères
    -> destruction d'un tableau de 9 caractères et un autre de 3
     
    "abcdefghijkl"
    Alors que si on utilise des listes chainées, on a juste à les coller bout à bout (une seule affectation est nécessaire) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    "abc" + "def" + "ghi" + jkl"
     
    -> affectation du pointeur de la lettre c vers la lettre d
     
    "abcdef" + "ghi" + "jkl"
     
    -> affectation du pointeur de la lettre f vers la lettre g
     
    "abcdefghi" + "jkl"
     
    -> affectation du pointeur de la lettre i vers la lettre j
     
    "abcdefghijkl"

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 70
    Points : 53
    Points
    53
    Par défaut
    mais c'est une idée excellent hellfoust !!

    je me lance dans le code tout de suite.

    Merci !

  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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Sinon un simple appel récursif permet de concaténer dynamiquement les éléments de chaque tableau. Je pense qu'en cherchant "produit cartésien" sur ce forum tu trouveras des explications.

Discussions similaires

  1. [XL-2003] Comment boucler sur les tableaux page web
    Par Maxgad dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 30/01/2013, 11h37
  2. [XL-2003] Boucler sur les variables tableaux
    Par MarcelG dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/12/2011, 14h24
  3. Réponses: 22
    Dernier message: 04/05/2011, 15h17
  4. Boucler sur un nombre indéfini de tableaux
    Par maryooman dans le forum Langage
    Réponses: 5
    Dernier message: 09/07/2010, 09h50
  5. Réponses: 8
    Dernier message: 14/11/2007, 10h27

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