cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 2014
-
24 mars 2006 à 10:29
cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 2014
-
24 mars 2006 à 16:01
Bonjour,
Vla le problème : jai un ensemble de paires du genre (catégorie1, 3 objets), (catégorie 2, 6 objets), (catégorie 3, 18 objets), (catégorie n, m objets).
N nest pas connu davance, pas plus que le nombre M dobjets que contient chaque catégorie.
Je cherche un algorithme qui me permettrait de calculer la répartition de ces paires en deux sous ensembles le plus « équilibré ». Cest-à-dire donnant des sommes de poids (nombre dobjets) de chaque sous ensemble dont le rapport est le plus proche de 1.
Par exemple :
Cat1, 2
Cat2 3
Cat3, 5
Cat4 1
Pourrait me donner comme solution
(Cat1, Cat2) et (Cat3, Cat4) parce que 2+3 / 5 +1 est proche de 1
ou encore
(Cat1, Cat2, Cat4) et (Cat3) parce que 2+3+1 / 5 est proche de 1
mais pas (Cat1, Cat2, Cat3) et (Cat4) parce que (2+3+5) / 1 est moins proche de 1 que les autres solutions
Mais à quoi ça sert ?
Ayant extrait des données par catégorie dune base de données, je souhaiterais les présenter sur deux colonnes, classées par catégorie mais également avec une présentation correcte, cest-à-dire sur deux colonnes « équilibrées »
PS : Je ne suis pas une tête en mathématique, alors si vous avez une solution ayez pitié de me la présenter dans un langage pas trop complexe. Ou alors dites-moi direct « Oublies si tas pas bac +15 et deux ou trois thèses en préparation».
scaryman
Messages postés492Date d'inscriptionvendredi 30 janvier 2004StatutMembreDernière intervention16 mai 200712 24 mars 2006 à 11:26
Salut
Il ne faut pas etre particulierement fort en math (bien que l'algorithmique ce n'est pas grand chose d'autre) pour faire de la prog.
Je n'ai pas vraiment de réponse à ton problème mais un début de piste, c'est d'additionner tous les objets ensemble et de diviser ce nombre par le nombre de catégories. Ensuite, tant que tu ne dépasses pas ce nombre (ou alors de peu), tu pourrais ajouter les catégories dans la 1ère colonne.
Ensuite, tu mettrais ce qui reste dans la 2e colonne.
Je sais bien que ce n'est pas (du tout) optimal mais ce n'est qu'un début de piste.
cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 201419 24 mars 2006 à 11:44
Salut
tu le dis bien toi même :
"bien que l'algorithmique ce n'est pas grand chose d'autre"
La solution que tu me proposes est celle que j'utilise pour l'instant. Mais si la catégorie qui est à la frontière des deux colonnes contient beaucoup d'objets, les colonnes deviennent completement désequilibrées. Cette méthode présuppose que lorsque je "coupe en deux", la catégorie frontière est "gentille" et contient un nombre d'objets appropriés pour faire une bonne répartition. Malheureusement c'est loin d'être toujours le cas.
cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 201419 24 mars 2006 à 13:42
Valckar ou quelqu'un ayant compris sa solution :
Je ne connais pas très bien java. J'ai posté ici parce qu'il n'existe pas de catégorie "recherche d'algorithme". Pourrais-tu me traduire ta solution sans "langage dependance".
"si tu scannes tes catégories et que tu les tries par ordre de nombre d'éléments du plus petit au plus grand et que tu prends tes catégories par multiple de 2, la 1ere et la nieme la 2eme et la nieme-1 la 3eme et la nieme-2 tu vas ordonner tes colonnes pour avoir toujours un nombre d'élement proche de la moyenne du nombre d'objets.
Bien sur plus le nombre de catégories est grand et plus ton nombre d'objet et proche de la moyenne plus tes colonnes seront équilibrées."
cs_valckar
Messages postés34Date d'inscriptionjeudi 16 mars 2006StatutMembreDernière intervention30 juin 2006 24 mars 2006 à 15:18
La problématique de l'autre solution est que si tu à un élément trés
grand tous seule ça ne marche pas : tu sous entend que ta liste est
bien réparti !
contre exemple : l=16 5 4 3 2 1 la solution est R1(16) R2(5 4 3 2 1)
avec l'autre algo je crois que le résultat serais plus éloigné.