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 :

Optimiser un code de combinaison pour toutes les longeurs de mots de 1 à 12 caractères


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Avril 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : autre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2016
    Messages : 34
    Par défaut Optimiser un code de combinaison pour toutes les longeurs de mots de 1 à 12 caractères
    Voici un extrait de code vbs,
    qui détermine toutes les combinaisons selon un choix de caractères mis à disposition dans un vecteur (abc..ABC..;:/!$..123..)
    qui se nomme : vec_caractere()

    Dans cette extrait de code, vous constaterez qu'il y a 6 boucle while, donc destiné à créer toutes les combinaisons de mots
    d'une longeur de 6 caractères.

    J'aimerais savoir comment faire pour optimiser l'écriture de ce code afin qu'il fonctionne pour les longeurs de mot de 1 à 12 caractères.

    Car dans l'état actuel si je veux qu'il fonctionne de 1 à 12, je devrais copier/coller ce code l'un à la suite de l'autre
    et soit enlever une ou plusieurs boucles while et/ou ajouter une ou plusieurs boucles while...

    voici par exemple pour un mot de longeur 6 :

    indice(1)=0
    while (indice(1) <= limite_sup) and (resultat=false)
    indice(2)=0
    while (indice(2) <= limite_sup) and (resultat=false)
    indice(3)=0
    while (indice(3) <= limite_sup) and (resultat=false)
    indice(4)=0
    while (indice(4) <= limite_sup) and (resultat=false)
    indice(5)=0
    while (indice(5) <= limite_sup) and (resultat=false)
    indice(6)=0
    while (indice(6) <= limite_sup) and (resultat=false
    combi =""
    for l = 1 to longeur_actuel
    combi = combi & vec_caractere(indice(l))
    next
    'msgbox combi

    cpt(6) = cpt(6) + 1
    totCpt = totCpt +1
    resultat = isPassword(combi)

    indice(6) = indice(6) + 1
    wend '6
    indice(5) = indice(5) + 1
    wend '5
    indice(4) = indice(4) + 1
    wend '4
    indice(3) = indice(3) + 1
    wend '3
    indice(2) = indice(2) + 1
    wend '2
    indice(1) = indice(1) + 1
    wend '1

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 230
    Par défaut
    Une indication rapide : récursivité.

  3. #3
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Avril 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : autre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2016
    Messages : 34
    Par défaut
    récursivité : je bloque, la récursivité ne résout pas le problème du nombre de boucle en rapport au nombre de la longeur.

    Si tu as une solution (extrait de code) qui prouve le contraire, je suis prenneur...

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 230
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ch est une chaîne 
    ch = "abcdefghijkl"
    traite ( ch, "", 12)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    PROCEDURE traite(ch, ch_actuelle , n)
    i, t est un entier 
    t = Taille( ch)
    SI n = 0 ALORS
    	Trace( ch_actuelle) 
    SINON
    	POUR i = 1 A t
    		traite ( ch, ch_actuelle + ch  [[i]] , n-1)	
    	FIN
    FIN
    C'est en langage 'Windev', mais tu devrais savoir adapter à n'importe quel langage.
    Attention, pour des chaines de longueur 12, tu vas avoir des milliards de combinaisons, ce n'est absolument pas raisonnable de toutes les recenser.

    Si je lance traite ( "abcd","",3) , j'obtiens bien les 64 réponses :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    aaa
    aab
    aac
    aad
    aba
    abb
    abc
    abd
    aca
    acb
    acc
    acd
    ada
    adb
    adc
    add
    baa
    bab
    bac
    bad
    bba
    bbb
    bbc
    bbd
    bca
    bcb
    bcc
    bcd
    bda
    bdb
    bdc
    bdd
    caa
    cab
    cac
    cad
    cba
    cbb
    cbc
    cbd
    cca
    ccb
    ccc
    ccd
    cda
    cdb
    cdc
    cdd
    daa
    dab
    dac
    dad
    dba
    dbb
    dbc
    dbd
    dca
    dcb
    dcc
    dcd
    dda
    ddb
    ddc
    ddd

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Par défaut Nombre
    De combinaisons, je trouve 479 millions

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 230
    Par défaut
    479 Millions ... pour un ""alphabet''' de combien de lettres, et des mots de quelle longueur ?

Discussions similaires

  1. Un seul code pour toutes les feuilles
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 16/05/2013, 16h46
  2. [XL-2010] Un seul code VB pour toutes les feuilles
    Par juan67 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 11/02/2013, 16h45
  3. Incorporer un code dans un module pour toutes les pages
    Par jlb59 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 20/02/2012, 05h17
  4. Code qui permet de garder BO ouvert pour toutes les macros
    Par Alexandra0907 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 21/05/2008, 12h56
  5. Algo pour toutes les combinaisons possibles
    Par rantanplan08 dans le forum Général Java
    Réponses: 6
    Dernier message: 03/01/2008, 09h45

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