En tentant de résoudre un problème d'un concours d'informatique ( www.soinf.ch ), je suis arrivé au problème général suivant :
Soit A = {a1; a2; a3; a4; ... } un ensemble de nombres entiers.
Soit B = {b1; b2; b3; b4; ... } un sous-ensemble de A.
Somme(B) = 1/2 Somme(A)
(b1 + b2 + b3 ...) = 1/2 (a1 + a2 + a3 ...)
Question : si A est connu, comment trouver un sous-ensemble B qui réponde à ce critère ?
La méthode de force brute étant trop lente :-( (compter quelques millénaires)...
Sinon, est-ce que quelqu'un saurait où je peux trouver des indices pour résoudre ce genre de problème ? (J'ai fouillé pendant un après-midi les livres d'algorithmique d'une librairie spécialisée sans résultats...)
mais si ton ensemble A est définit comme ça : A={2 ; 3 ; 8};
Tu ne peux pas définir d'ensmble B, sous ensemble de A, dont la somme des éléments fasse la moitié de la somme des éléments de A.
J'ai peut-être pas bien compris l'énoncé.
Miles Le 05/03/2002 à 23:03 non, je ne pense pas ????
jackiechan91 : il est clair que si A={2;3;8} tu ne pourras pas trouver de sous-ensemble dont la somme vale 13/2=6,5. Mais l'idée est de trouver ce sous-ensemble, si il existe, bien entendu.
Par exemple A = {2; 4; 5; 1}
A ce moment-là, la solution est B = {2; 4} ou B = {5; 1}...
La question est : comment trouver un tel sous-ensemble quand le nombre d'éléments de A est grand ?
Zeph Le 06/03/2002 à 14:47 Ah ok donc il faut trouver B tel que sum(B)=sum(A)/2, et les éléments de B proviennent de A ?

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
Zeph Le 06/03/2002 à 14:49 C facile :
Tu fais SortD A, pour trier A par ordre décroissant, puis ensuite tu ajoute à une valeur, disons C, ses éléments un par un. Si C<sum(A)/2, tu continue, si C>sum(A)/2 alors tu enleve le dernier element et tu essaie le suivant dans A (qui sera plus petit).

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
Vark Le 06/03/2002 à 16:56 mouais, de ttes façon le basic ...
*** Ne sous-estimez pas la puissance de la Marmotte ***
©
Marmotte Team : LaMarmotte, sBibi, Vark & sabrina
Quessta contre le basic ?

I'm on a boat motherfucker, don't you ever forget
C'est clair que l'algo marche, mais il est bien limité.
Cela dit, je n'ai pas d'idée pour en trouver un mieux
ben justement, ton algo ne trouveras pas toujours la solution, s'il en existe une...
ça fonctionne comment un backmachin ?
des vars comme a, et b, je trouve que c po évocateur...
mais début et fin, ça l'est assez !
je met jamais de labels, c contraire à l'esprit du C (sauf si c vraiment nécessaire, ce qui est rare) qd je coe... j'en utilises en optimisant
Zeph Le 06/03/2002 à 19:22 ça ralenti un prog, ou simplement ça donne un aspect bordelique ?

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
les labels et goto ne ralentissent pas (en C), puisque c'es ce que font les boucles
a=10;
while(a!=0)
{
a--;
}
équivaut me semble-t-il, à ceci :
a=10;
label_debut_boucle:
if(a!=0)
{
a--;
goto label debut_boucle;
}
(il me semble)
toujours est-il que le code ASM généré qd tu utilises des gotos ou des boucles est EXACTEMENT le même.
cela dit, les labels, c bordélique pr comprendre !