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 :

Combinaisons de répartition de votes


Sujet :

Algorithmes et structures de données

  1. #1
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 944
    Par défaut Combinaisons de répartition de votes
    Bonjour,

    L'intitulé me parait déjà compliqué

    Je cherche à construire un tableau contenant toutes les combinaisons possibles de ventilation des votes.

    Ainsi, et pour l'exemple: avec 4 votants et 4 candidats, le tableau résultant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    4 0 0 0
    3 1 0 0
    3 0 1 0
    3 0 0 1
    2 2 0 0
    ...
    0 0 0 4
    soit 35 lignes (si je ne me suis pas gourré dans mon tableau manuel)
    je pensais à du récursif, mais je n'arrive à trouver la condition de sortie satisfaisante, et après la 4ème ligne, ça part en sucette et j'ai toujours "3" en colonne 1.

    Avez-vous un algo à me proposer ?

    Précision: je dois faire ça en vba/excel

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    Bonjour

    décidément, c'est la semaine du dénombrement sur le forum.

    Ton cas est simple. "c" est le nombre de candidats et "v" le nombre de votants. On choisit c-1 séparations entre les bulletins parmi v+1, indépendamment de l'ordre (les séparations sont indiscernables) et avec répétition (si on répète, un candidat a zéro vote). C'est donc une combinaison avec répétition.

    Formule mathématique

    Je ne suis pas surpris que tu trouves 35 empiriquement :

    Formule mathématique


  3. #3
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 944
    Par défaut
    Merci pour cette réponse.

    Tu évoques le "dénombrement" que j'ai googlisé et pour excel (ma contrainte), il existe la fonction COMBINA qui renvoie bien 35.

    Mais comment obtenir ces 35 tuples?

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    Es-tu bien sûr de savoir ce que tu fais ? Pour l'élection présidentielle française 2022, il y a eu 32057325 votes exprimés pour 12 candidats. Soit 9.205423378019423e+74 possibilités de répartitions. Environ 1075. . Tu vas légèrement faire exploser la mémoire de ton ordinateur. Surtout avec un tableur qui n'est pas un outil très robuste.

    Quel est le vrai but final ?

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 493
    Par défaut
    salut


    si tu n'as que 4 elements max
    en faisant 4 boucle imbriqué tu peut faire apparaitre tes denombrement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      POUR  L De 4 a 0  Faire 
        POUR   K De 4 a 0  Faire 
          POUR   J De 4 a 0  Faire 
             POUR  I De 4 a 0  Faire 
                SI I+J+K+L = 4 Faire
                   ECRIRE(I,J,K,L)
                FIN SI
             FIN POUR
          FIN POUR
       FIN POUR
     FIN POUR
    pour la recursivité je pense qu'il va faloir passer par un tableau

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 236
    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 236
    Par défaut
    Le même code que Anapurna, mais un peu optimisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Pour i de 4 à 0 pas -1 faire 
       Pour j de 4-i a 0 pas -1 faire 
          Pour j de 4-i-j a 0 pas -1 faire 
             l=4-i-j-k
             ecrire (i,j,k,l)
          Fin pour
       Fin pour
    Fin pour

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2018
    Messages : 104
    Par défaut Generation des tuples pour des paramêtres quelconques
    Bonjour,

    Voilà un script pour la génération des tuples de manière récursive.
    L'idée est de créer une fonction listant les tubles étant donnés:
    - les valeurs du tuple calculées jusque là (initialement vide)
    - le nombre d'éléments restant à ajouter dans le tuple
    - la somme des valeurs qui restent à rajouter

    Je l'ai fait en Python qui est assez explicite. Je te laisse le traduire dans le language que tu veux.

    Code python : 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
    # Compute all n-tuples with given sum, starting with the optional tuple values
    # Found tuples are added to result
    def get_tuples_with_sum(result, n, sum, tuple=[]):
        if len(tuple) == n:
            # Stop recursion when the tuple is complete, and then the sum should be null
            if sum == 0:
                result.append(tuple.copy())
            return
        for x in range(sum + 1):  # between 0 and sum included
            tuple.append(x)
            get_tuples_with_sum(result, n, sum - x, tuple)
            tuple.pop()
     
     
    result = []
    get_tuples_with_sum(result, 4, 4)
    for X in result:
        print(X)

  8. #8
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 944
    Par défaut Suite & fin
    Hello à tous les répondants.

    Pressé par le temps, j'ai mis en oeuvre la solution proposée par Anapurna.
    L'optimisation proposée tbc suggère des votes négatifs je me suis sûrement trompé

    Je clos le sujet, mais pas la récursivité...
    J'y reviendrai à tête reposée pour ma satisfaction intellectuelle.

    Merci à AbsoluteLogic pour son algo

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

Discussions similaires

  1. Toutes les combinaisons de répartition de n éléments dans n containers
    Par jlbrd dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 30/12/2017, 21h17
  2. [Algo] Trouver un arrangement ou une combinaison d'éléments
    Par Morvan Mikael dans le forum Algorithmes et structures de données
    Réponses: 16
    Dernier message: 20/04/2013, 11h46
  3. Combinaison et répartition
    Par Ry_Yo dans le forum Mathématiques
    Réponses: 3
    Dernier message: 06/09/2012, 20h24
  4. [combinatoire] combinaisons de toutes longueur
    Par Toorop dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 16/02/2007, 16h08
  5. Réponses: 2
    Dernier message: 22/07/2002, 18h02

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