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

VB 6 et antérieur Discussion :

Optimiser le code ->Systeme de combinaison


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Par défaut Optimiser le code ->Systeme de combinaison
    Voici le code
    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
     
    Dim total1 As String
     
    Public Function Komb1(ByVal tableau, ByVal Prefixe As String, ByVal min As Integer, ByVal max As Integer, ByVal n As Integer) As String
        Dim i As Integer
        Dim Resultat As String
     
        For i = min To max - n + 1
            If Prefixe = "-1" Then
                Resultat = tableau(i)
            Else
                Resultat = Prefixe & "*" & tableau(i)
            End If
     
            If n > 1 Then
                Komb1 tableau, Resultat, i + 1, max, n - 1
            Else
                If total1 = vbNullString Then
                    total1 = Resultat
                Else
                    total1 = total1 & "+" & Resultat
                End If
            End If
        Next
     
        Komb1 = total1
    End Function
     
    Sub Main()
     
        Dim tableau() As Variant
        Dim max As Integer
        Dim min As Integer
        max =4 
        min = 3
     
        ReDim tableau(0 To max - 1)
        For i = 1 To max
            tableau(i - 1) = Chr(64 + i)
        Next i
     
        MsgBox Komb1(tableau, -1, 0, max - 1, min)
    end sub
    Le resultat final est : A*B*C+A*B*D+A*B*E+A*C*D+A*C*E+A*D*E+B*C*D+B*C*E+B*D*E+C*D*E
    donc 10 combinaisons


    Mon probleme est que si je demande combinaison de 6/16 j'ai 8008 combinaisons, cela met beaucoup trop de temps.

    Comment puis je optimiser mon code ? Au maxi j'aurais 16 elements


    Merci de votre aide.

  2. #2
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    J'ai un peu de mal a suivre, Kom1 est recurent. Ce que je sais, c'est que tu as utilisé les types de variable lel plus lent que vb puisse traiter : les variants et pire encore les strings.
    Je ne sais si ton algo pourrait fonctionner avec des entiers, mais si oui, aucun doute ca ira beaucoup,beaucoup plus vite.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Par défaut
    J'ai la meme pour les nombres, elle est tres rapide, je l'utilise que tout a la fin du programme pour donner le gain maxi et mini.

    C'est un peu complique ce que j'ai fais, j'explique.

    Partons d'un cas simple:

    le calcul des toutes les combinaisons qui se repete pas avec a(2/3)=3=>K=A*B+A*C+B*C

    Quand j'ai des sous-ensemble de A {A1,A2}, je redevelopper: K=A1*B+A2*B+A1*C+A2*C+B*C la j'ai 5 combinaisons

    Voila pourquoi j'ai besoins de string, c'est pour trouver le nombre de combinaisons lorsque j'ai des sous ensembles.

    Au maxi je peux avoir 3 elements dans A {A1,A2,A3} et au mini 1 element A

    Merci de votre aide

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut
    Citation Envoyé par Delbeke
    c'est que tu as utilisé les types de variable lel plus lent que vb puisse traiter : les variants et pire encore les strings.
    c'est faux, le traitement des variants est plus long que les strings.

  5. #5
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Je trouve que le sujet n'est pas tres clair. Je ne comprends pas vraiment ce que tu veux calculer, est ce que tu peut expliquer un peu ?
    Parce que pour optimiser un code il faut souvent changer l'algo, et la je ne peut pas réfléchir à un autre algo si je ne sais pas ce que tu veux obtenir.
    Ha et est ce que tu pourrais commenter ton code ? Parce que tu le comprends peut être parfaitement, mais pour nous c'est pas forcement évident de le comprendre, surtout lorsque c'est recursif.

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut
    J'ai deux remarques :

    1) est-tu sur du "Komb1(ByVal tableau() ..." ? n'est-ce pas plutôt un byref ? Tu dupliques systématiquement le contenu de ton tableau ...

    2) chez moi ton code met 5 secondes à s'exécuter (6/16), c'est "long" pour toi ?

  7. #7
    Membre éclairé
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Par défaut
    Citation Envoyé par Vld44
    c'est faux, le traitement des variants est plus long que les strings.
    Une question, qui n'a pas grand chose a voir avec le sujet, mais qui est relatif à l'optimisation en VB6 :
    J'ai lu il y a tres longtemps que si on souhaite utiliser des entier, il valais mieux utiliser des Long (8 oct)plutot que des Integer (4 oct).
    bien que le long est 2 fois plus long, mais il paraitrait que le temps de chargement ne soit pas plus long (mettre le nombre dans le registre) alors que certaines operation sont plus rapide sur du long...

    qu'en pensez-vous ?

    PS : moi depuis tous mes entiers sont des Long

  8. #8
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut
    aucune idée.
    Si c'est le cas, je pense qu'un rechercher remplacer dans mon prog me renverrais 1548569 occurences ...

    edit : (msdn)
    Performance
    Les opérations arithmétiques sont plus rapides avec les types intégraux qu'avec les autres types de données. Elles sont plus rapides avec les types Integer et UInteger dans Visual Basic.

    Grands entiers
    Si vous devez placer un entier plus grand que le type de données Integer ne peut contenir, vous pouvez utiliser à la place le type de données Long. Les variables Long peuvent contenir des nombres compris entre -9 223 372 036 854 775 808 et 9 223 372 036 854 775 807. Les opérations avec Long sont légèrement plus lentes qu'avec Integer.

  9. #9
    Membre éclairé
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Par défaut
    Merci Vld44,
    Bon j'ai plus que 1212133212 occurences de Long a changer en Integer moi maintenant

    Si j'ai le temps je ferai un bench (a base de l'algo des tours de hanoi) et je vous dirait le pourcentage d'ecart.... 'tain j'aurai du poser la question avant

  10. #10
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Apres une vérification sur le net, un registre en assembleur est de 8, 16, 32, ou 64 bits. Soit je pense que cela dépend de la machine que l'on a. Un long 8 octets devraient représenter 64 bits et un integer 4 octets -> 32 bits. Donc sur une machine 32 bits Long -> nescessite 2 registres, integer -> nescessite 1 registre. Je vous laisse en tirer les conclusions.

    PS : sur les machines 64 bits je crois que les long et integer doubles, ou devraient doubler. Je ne suis plus sur.

Discussions similaires

  1. Comment optimisez mon code ? Systeme de combinaison
    Par enibris dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 20/10/2007, 13h29
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

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