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 :

Reduire le nombre de boucles For/next


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
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 32
    Par défaut Reduire le nombre de boucles For/next
    Bonjour.

    Je souhaiterai réduire le nombre de boucle for/next de l'exemple suivant:

    Compteur d'incrementation de Combinaisons de 5 ( dans cet exemple)



    total = 20
    debut = 1

    for a = debut to total -4
    for b = a+1 to total -3
    for c = b+1 to total -2
    for d = c+1 to total -1
    for e = d+1 to total

    (code utilisant les variables a,b,c,d,e)

    next e
    next d
    next c
    next b
    next a

    = = =

    La on genere les combinaisons de 1-2-3-4-5 à 16-17-18-19-20.
    Est'il possible de reduire le nombre de for/next ?
    Car finalement on ne fait qu'incrementer de 1 a chaque fois .
    En partant de la derniere Variable.

    Une optimisation/remplacement par Algorithme avec sentinelle ou autre serait'elle possible ? Faire plus court et rapide ?

    Merci pour toute information.

  2. #2
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    S'il ne s'agit que de compter (pas énumérer) le nombre de combinaisons de n éléments parmis p tu peux essayer ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Fonction Combinaisons(n Entier, p Entier) renvoi Entier
        Si p = 0 ou p = n Alors
            Renvoyer 1
        Sinon
            Renvoyer Combinaisons(n - 1, p) + Combinaisons(n - 1, p - 1)
        Fin Si
    Fin Fonction
    Moins de boucles mais comme c'est récursif attention au dépassement de pile pour les trop grandes valeurs, l'avantage est qu'il n'y a pas besoin de rajouter de boucles en fonction des valeurs comme dans ton exemple si on souhaitait les combinaisons de 6 éléments parmi 20.

    En espérant avoir été utile!

  3. #3
    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 : 52
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Aguire_ Voir le message
    Une optimisation/remplacement par Algorithme avec sentinelle ou autre serait'elle possible ? Faire plus court et rapide ?
    un truc comme ca ?

    Code java : 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
    int[] tab={1,2,3,4,5};
    int[] max={16,17,18,19,20};
    int len = tab.length-1; // = 4
     
    void main() {
    	do { /* code utilisant tab[] */ } while (next());
    }
     
    boolean next() {
    	for(int i=len;i>=0;i--) {
    		if (tab[i]<max[i]) { // if possible, increment current digit
    			tab[i]++;
    			for(int j=i+1;j<=len;j++) // initialize following digits
    				tab[j]=tab[j-1]+1;
    			return true;
    		}
    	}
    	return false;
    }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 32
    Par défaut
    Merci pour vos 2 reponses instructives.

    pseudocode, j'etudie avec attention l'exemple de code en java.
    Je ne connais pas vraiement ce langage, mais avec les information presentes sur le site, je m'y suis mis.

    +

Discussions similaires

  1. les boucles for..next
    Par dispa dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/06/2007, 14h23
  2. boucle for next ? peut être mais comment
    Par caro2552 dans le forum VBA Access
    Réponses: 11
    Dernier message: 07/02/2007, 20h26
  3. [VB.net] Boucle for next avec un tableau
    Par grand_prophete dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/05/2006, 11h08
  4. [VB6] Problème contrôle Timer et boucle For-Next ...
    Par Stéphane BEHMENBURG dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 01/12/2005, 17h36
  5. Réponses: 3
    Dernier message: 03/11/2005, 19h22

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