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 :

[Optimisation]Peut-on améliorer ce code ?


Sujet :

Algorithmes et structures de données

  1. #1
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut [Optimisation]Peut-on améliorer ce code ?
    Bonjour à tous !
    J'ai sous la main un petit code qui me paraît tellement simple qu'il doit être optimisable... Je pense ?
    Peut-on en tirer quelque chose ?
    A savoir: Les couples de valeurs possibles de uiWidth et uiHeight respectivement sont les suivantes :
    1. 17 - 4
    2. 5 - 4
    3. 4 - 1
    4. 16 - 1
    5. 15 - 1


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for (UInt j = 0; j < uiHeight; j++)
        {
          for (UInt i = 0; i < uiWidth; i++)
          {
            if ( (paucLenTab[i] == uiLenRead) && (paucCodTab[i] == uiCode) )
            {
              uiVal1 = i;
              uiVal2 = j;
              return Err::m_nOK;
            }
          }
    	  paucLenTab += uiWidth;
    	  paucCodTab += uiWidth;
        }
    Edit: Je précise que ce code fait partie d'une fonction, qui est donc appelée cinq fois.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    Tout faire en une seule boucle pourrait pas mal accélérer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UInt n = uiWidth*uiHeight;
    for (UInt i = 0; i < n; i++)
    {
      if ( (paucLenTab[i] == uiLenRead) && (paucCodTab[i] == uiCode) )
      {
        uiVal1 = i%uiWidth;
        uiVal2 = i/uiWidth;
        return Err::m_nOK;
      }
    }

  3. #3
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Malgré le modulo et la division...
    A essayer donc .

  4. #4
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Ca ne change pas grand chose, je dirais même, rien.
    A priori, le gros point noir est le test, donc il faudrait réécrire ce test pour aller plus vite.
    Ou mieux, éviter ce test, mais je ne vois pas comment.

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    faire (si ce n'est déjà fait) une boucle sur pauclenTab, pour en chercher le max. Calculer le nombre N pas en divisant ce max par Uiwidth.

    Faire la boucle des J en faisant à l'intérieur juste une boucle sur N..

  6. #6
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Le max, c'est fait .
    Je vais tester .

  7. #7
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Du coup j'ai réfléchi un peu, et je me suis dit que le code complet de la fonction pouvait certainement être modifié, en utilisant ce que tu viens de dire, souviron34.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
      const UChar *paucLenTab;
      const UChar *paucCodTab;
      UChar  uiLenRead = 0;
      UChar  uiCode    = 0;
      UChar  uiMaxLen  = 0;
     
      // Find maximum number of bits to read before generating error
      paucLenTab = aucLen;
      paucCodTab = aucCod;
     
      const int max_width = uiWidth*uiHeight;
      uiMaxLen = *std::max_element(paucLenTab, paucLenTab+max_width);
     
      while ( uiLenRead < uiMaxLen )
      {
        // Read next bit
        UInt uiBit;
        RNOKS( m_pcBitReadBuffer->get( uiBit, 1 ) );
        uiCode = ( uiCode << 1 ) + uiBit;
        uiLenRead++;
     
        // Check for matches
        paucLenTab = aucLen;
        paucCodTab = aucCod;
        for (UInt j = 0; j < uiHeight; j++)
        {
          for (UInt i = 0; i < uiWidth; i++)
          {
            if ( (paucLenTab[i] == uiLenRead) && (paucCodTab[i] == uiCode) )
            {
              uiVal1 = i;
              uiVal2 = j;
              return Err::m_nOK;
            }
          }
    	  paucLenTab += uiWidth;
    	  paucCodTab += uiWidth;
        }
     
      }
      return Err::m_nERR;
    }

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 13/09/2011, 11h08
  2. Est ce que ce code peut être amélioré ?
    Par _s4z_ dans le forum Langage
    Réponses: 3
    Dernier message: 04/09/2010, 13h51
  3. [Toutes versions] Peut on améliorer ce code
    Par johannj dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/04/2009, 15h09
  4. [E-07]Peut-on améliorer ce code?
    Par rvtoulon dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 21/03/2009, 17h48
  5. Optimisations et Améliorations de code
    Par womannosky dans le forum Langage
    Réponses: 19
    Dernier message: 02/07/2008, 16h05

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