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 :

Algorithme combinaison denombrement


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 9
    Par défaut Algorithme combinaison denombrement
    Bonjour tout le monde , je sais pas ce que c'est ce que je demande vraiment et c'est pour ça que j'ai mis ce titre un peu ambigu .

    j'ai une liste (ligne d'une matrice par exemple ) composée de N cases dans lesquelles j'ai K fois le nombre 1 et N-K fois le nombre 0
    je cherche un algorithme qui me permet d'avoir toutes les combinaisons possibles .


    j'ai imaginé un algo récursif avec une pile mais je n'arrive vraiment pas à le concevoir

    merci d'avance

  2. #2
    Membre très actif
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Par défaut
    Tous les nombres de 0 à N écrits en binaire ?

  3. #3
    Membre éclairé Avatar de cs_ntd
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2006
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 598
    Par défaut
    Citation Envoyé par Nebulix Voir le message
    Tous les nombres de 0 à N écrits en binaire ?
    Il me semble oui... En gors Ya que des 0 et des 1, et pas d'ordre specifique ?

    Un peu compliqué ton systeme Acrim... surtout les K boucles

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 9
    Par défaut
    Merci pour vos réponses
    ce ne sont pas tous les nombres binaires car le nombre des 1 est fixe , cependant ça m'a donné l'idée de générer tous les nombres binaires et d'en retenir ceux que je veux

    @Acrim

    je pense qu'il y a toujours le problème de l'initialisation de la liste (L) à chaque fois , même si j'ai pas bien compris ton algo peut être

  5. #5
    Membre expérimenté Avatar de Acrim
    Profil pro
    En recherche d'emploi
    Inscrit en
    Septembre 2010
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Septembre 2010
    Messages : 134
    Par défaut
    Tous les nombres binaires, ça en fait quand même 2^N pour une nombre de combinaisons "gagnantes" pas forcement élevé (tirage de k éléments dans un ensemble en comportant N aux permutations prés, ce qui doit faire n!/(n-k)!k!)

    Par rapport à mon algo., le seul appel que tu as à faire serait : boucle(K,0,N,{}).
    L contenant une combinaison possible chaque fois que la ligne 6 est atteinte.

    Une implémentation vite fait :

    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
    20
    21
    22
    23
    24
     
    public class Combinaison {
    	public static void main(String[] args) {
    		int nbUn = 7;
    		int nbElements = 20;
    		iniBoucle(nbUn, nbElements);
    	}
     
    	public static void iniBoucle(int k, int n) {
    		boucle(k,0,n, new BitSet());
    	}
     
    	public static void boucle(int k, int debut, int n, BitSet idxs) {
    		if(k > 0) {
    			for(int i = debut; i < n; i++) {
    				idxs.set(i);
    				boucle(k-1, i+1, n, idxs);
    				idxs.clear(i);
    			}
    		} else {
    			System.out.println(idxs);
    		}
    	}
    }


    ps : Une autre réponse plus maline pour la gestion de "L".

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 9
    Par défaut
    Citation Envoyé par Acrim Voir le message
    Tous les nombres binaires, ça en fait quand même 2^N pour une nombre de combinaisons "gagnantes" pas forcement élevé (tirage de k éléments dans un ensemble en comportant N aux permutations prés, ce qui doit faire n!/(n-k)!k!)

    Par rapport à mon algo., le seul appel que tu as à faire serait : boucle(K,0,N,{}).
    L contenant une combinaison possible chaque fois que la ligne 6 est atteinte.

    Une implémentation vite fait :
    .
    merciii Acrim ça marche comme dans un rêve
    ça m'a permis aussi de découvrir BitSet

    je trouve aussi que ta gestion de la liste est plus maline et propre

  7. #7
    Membre expérimenté Avatar de Acrim
    Profil pro
    En recherche d'emploi
    Inscrit en
    Septembre 2010
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Septembre 2010
    Messages : 134
    Par défaut
    Je pense que tu peux le faire avec k boucles imbriquées, ici l'exemple avec 3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for(i=0; i <N-2; i++) {
    	for(j=i+1; i<N-1; j++)  {
    		for(k=j+1; k < N; k++) {
    			//Mettre les case i,j et k à 1
    		}
    	}
    }

    D'où un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    boucle(K, debut, N, L) {
    	if(K>0) {
    		for(i=debut, i<N-K, i++) 
    			boucle(K-1,i+1, N, L union {i})
    	} else {
    		// Resultat L
    	}
    }
    avec comme appel : boucle(K,0,N,{})
    • K : le nombre de 1 à insérer
    • N : le nombre d’éléments
    • L : l'ensemble contenant les index des cases à mettre à 1

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

Discussions similaires

  1. Algorithmes de combinaison de nombres
    Par marienbad dans le forum Mathématiques
    Réponses: 10
    Dernier message: 01/03/2012, 16h20
  2. Algorithme combinaisons d'éléments d'une liste
    Par smallbean dans le forum Langage
    Réponses: 2
    Dernier message: 17/11/2010, 16h11
  3. Algorithme combinaisons différentes
    Par fdfdfd dans le forum Mathématiques
    Réponses: 7
    Dernier message: 25/06/2009, 18h31
  4. Algorithme : combinaisons uniques
    Par Mainman dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 24/02/2009, 18h06
  5. Algorithme combinaisons mots à partir de lettres
    Par micfont999 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 16/01/2007, 00h53

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