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 :

Tableaux 3*3 à partir d'un 9*9


Sujet :

Algorithmes et structures de données

Vue hybride

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

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut Tableaux 3*3 à partir d'un 9*9
    Bonsoir !
    J'ai une matrice 9*9 (mais ça doit pouvoir s'appliquer à d'autres), et j'aimerais récupérer toutes les matrices 3*3 qui sont à l'intérieur (enfin, les unes "à coté" des autres).
    Un exemple simple :
    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
     
    Tableau de départ:
     
    [ 1  2  3  4]
    [ 5  6  7  8]
    [ 9 10 11 12]
    [13 14 15 16]
     
    -------------------
    En sortie:
     
    [1 2]            [3 4]
    [5 6]            [7 8]
     
    [ 9 10]          [11 12]
    [13 14]          [15 16]
    Pour cela, il doit y avoir des algos, non ?
    Je ne trouve pas comment le faire avec un commplexité assez faible (j'ai trois boucles imbriquées ).

    Merci pour votre aide !

  2. #2
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    ben trois boucles for imbriquées, ce n'est pas vraiment l'horreur, je trouve.

    enfin, je ne vois pas où est le problème, c'est plutot rapide comme code (avec des boucles de 0à3, ça te fait que 27 fois ta procédure pour toute la grille, c'est pas phénoménal.)



    salut

  3. #3
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Tu peux faire en deux boucles (tu parcours toute ta matrice) et avec des tests tu identifie le bloc (la matrice 3 * 3) dans lequel tu es. Cependant je ne sais pas si celà va être beaucoup plus efficace que tes trois boucles.

    Pour identifier le bloc dans lequel tu es, tu divise l'indice ou tu es (x pour savoir le n° de ma trice sur x et y pour savoir le numéro de la matrice sur y) par la taille de la matrice que tu veux extraire. (division entière).

    Et sincèrement si tu te limite aux matrices 9 * 9, le nombre d'iteration n'est pas énorme.

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Salut
    L'algo est de cette forme en supposant que matrice est un tableau de 9 matrices 3 X 3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    pour i de 1 à 9 par pas de 1
      pour j de 1 à 9 par pas de 1
        // calcul du numero de matrice 3 X 3
        num <- i div 3 + 3 * ( j div 3)
        // calcul du numero de ligne de la matrice
        mi <- i mod 3
        // calcul du numero de colonne
        mj <- j mod 3
        matrice[num][mi][mj] <- matrice_initiale[i][j]
      fin pour
    fin pour
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Oki, mais je risque d'avoir une matrice nettement plus grande ensuite (carrée tout de même), car de taille 2187*2187, que je subdiviserais en 9*9...puis 3*3...
    Pour de la convolution.
    Si vous avez un algo de complexité assez faible pour cela, je prend !

    Edit: Merci Trap D quand même

  6. #6
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Pour pousser le vice, on pourrait même le faire en une seule boucle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    pour k de 1 à 81 par pas de 1
        //calcul de i 
        i <- k div 9
        //calcul de j
        j <- k mod 9
        // calcul du numero de matrice 3 X 3
        num <- i div  + 3 * ( j div 3)
        // calcul du numero de ligne de la matrice
        mi <- i mod 3
        // calcul du numero de colonne
        mj <- j mod 3
        matrice[num][mi][mj] <- matrice_initiale[i][j]
    fin pour
    Mais franchement, la complexité à l'air d'être plus faible mais elle l'était déjà avant. Le fait d'avoir trois boucles ne veut pas dire que la complexité est élevé. L'algorithme de départ était en O(n) où n est le nombre d'éléments, celui-ci l'est aussi... Mais si on regardait le temps de calcul, avec une boucle, il y a des modulos, des divisions ce qui va rendre le tout beaucoup plus lent.

    Jc

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Par défaut
    Citation Envoyé par fearyourself
    Pour pousser le vice, on pourrait même le faire en une seule boucle
    On peut démontrer que n'importe quel programme peut s'écrire avec une seule boucle. Je m'en souviens bien, j'avais eu ça comme question à un exam d'IA.

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Par défaut
    Etrange de vouloir évaluer la complexité d'un algo qui s'applique à une matrice de taille constante...

  9. #9
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    De retour !
    Je n'ai plus un tableau 2 dimensions, mais un vecteur !
    Il me faut toujours extraire en 3*3...
    En clair, sur ceci :
    0 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 26
    etc...
    Il me faut avoir au final :
    0=> 0 1 2 9 10 11 18 19 20
    1=> 4 5 6 12 13 14 21 22 23
    2=> 6 7 8 15 16 17 24 25 26
    etc...
    Et alors là, je suis paumé dans les div et les modulo !!!
    Merci de m'aider :s

Discussions similaires

  1. [E-07] Tableaux de nombres à partir d'une chaine de caractères ?
    Par edouardg dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 03/12/2008, 00h00
  2. tableaux croisé dynamique à partir de 2 sources?
    Par kev0631 dans le forum Excel
    Réponses: 6
    Dernier message: 04/05/2007, 09h31
  3. [débutant] [Tableaux] un array à partir d'une boucle
    Par denis.ws dans le forum Langage
    Réponses: 3
    Dernier message: 22/11/2006, 22h37
  4. [Tableaux] DNS primaire à partir d'un HTTP_REFERER
    Par trihanhcie dans le forum Langage
    Réponses: 3
    Dernier message: 11/07/2006, 16h13
  5. [Tableaux] Coloriser un tableau à partir de mon code
    Par pod1978 dans le forum Langage
    Réponses: 3
    Dernier message: 10/11/2005, 16h25

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