Voila un petit problème qui me parait très simple, mais toutes les façon de le résoudre que je trouve sont trop gourmande a mon gout.
On a un ensemble de N nombres rationnel distinct (ou pas mais on peut considérer qu'ils sont tous distinct).
On cherche a énumérer dans l'ordre décroissant les sommes de P nombres parmi les N.
Par exemple :
Pour un ensemble S={1,2,4,6,8} et pour P=2
On cherche à avoir l'énumération :
8+6=14
8+4=12
6+4=8+2=10 (on peut choisir qu'ils sont énumérés en meme temps ou alors imposer un ordre total par exemple en considérant en cas d'égalité un ordre lexicographique des sur les termes)
8+1=9
6+2=8
6+1=7
4+2=6
4+1=5
2+1=3
Pour l'instant la meilleur méthode que j'ai trouvé et qui me parait trop gourmande vu la "simplicité" du problème consiste a utiliser un arbre d'énumération :
On cherche d'abord la plus grosse somme (facile c'est les P plus grands nombres).
Ensuite on sait que la seconde meilleur somme correspond a une variation d'un unique nombre, il s'agit donc soit de 8+4, soit de 6+4, c'est donc 8+4.
La troisième meilleure somme est une variation d'un nombre parmi les états qu'on a pas encore totalement développé, c'est a dire soit 6+4, soit 8+2.
Et on continue jusqu'au bout.
Ce qui correspondrait a un arbre de type :
8+4 -> 6+4 -> 6+2
***| **** |
***| **** -> 4+2
***-> 8+2 -> 6+2
******** |
******** -> 8+1
Dont le principe serait de partir de la racine et à chaque énumération prendre l'ensemble des nuds a somme maximaux parmi les nuds encore non énumérés. La taille de l'arbre est énorme puisque en chaque nud on a potentiellement P branches. Ce qui est problématique puisqu'a chaque énumération on doit alors retenir un ensemble de plus en plus grand de nuds non développé entièrement et le calcul de la k ème meilleure somme deviens alors très lourd si k est grand.
Pour résumer on cherche une fonction qui renvoie toutes les sommes maximales inférieur à M donné de P termes parmi N.
Des idées ??
