Somme de nombres aleatiores

feunaye Messages postés 6 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 24 décembre 2003 - 13 déc. 2003 à 21:44
feunaye Messages postés 6 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 24 décembre 2003 - 24 déc. 2003 à 01:54
Salut,
Je dois créer deux vecteurs (ou tableaux) de nombres aleatoires compris entre une borne inf et une borne sup. Ces bornes sont spécifiques è chacun des vecteurs.
Le probleme est que la somme des elements d'un des vecteurs doit etre egale a la somme des elements de l'autre vecteur ; tout en tenant compte des bornes.
Auriez vous une petite idée d'un algorithme qui résolve mon problème svp ?
Merci par avance

9 réponses

cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
14 déc. 2003 à 02:36
Bonjour
Tes "nombres aléatoires" doivent-ils être entiers ou bien peuvent-ils être quelconques ? Dans ce dernier cas, ça ne doit pas être bien difficile.
0
feunaye Messages postés 6 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 24 décembre 2003
14 déc. 2003 à 07:26
Oui, ces nombres doivent etre entiers.
Sûrement, ce n'est pas compliqué, mais pour tout te dire, je fais appel à vous tous après m'être un creusé la tête, et vraiment, je ne trouve pas :-(
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
14 déc. 2003 à 18:47
Bonsoir

Peux-tu donner un exemple ?
- dimension(s) des deux vecteurs
- bornes pour les composantes de chacun
0
feunaye Messages postés 6 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 24 décembre 2003
15 déc. 2003 à 00:42
Bonjour,

Les nombres que tu me demandes seront, eux aussi, aléatoires, c'est l'utilisateur de mon programme qui choisit les valeurs possibles.
En gros, les vecteurs auront une taille entre 1000 et 2000 elements chacun ; pour les bornes, tu peux mettre ce que tu veux (les nbs ne peuvent pas etre négatifs).

Un petit exemple : taille du premier vecteur v1=6, bornes de ses éléments : entre 0 et 7 ; taille du deuxieme vecteur v2=2, bornes de ses elements : de 5 à 10.
v1=(0,1,2,3,4,5)
v2=(8,10)
la somme egal 18, les bornes sont respectées.

Merci !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
15 déc. 2003 à 01:33
Bonsoir

v1=(0,1,2,3,4,5) 0+1+2+3+4+5 - 15 <> 18 !!!

Je me penche tout de même sur la question
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
16 déc. 2003 à 11:58
L'idée de départ pour ton algo pourrait être la suivante :

Soit un tableau de n éléments variant de m (=minimum) à M (=maximum). La somme des n éléments doit être égale à S.

1-Remplir un tableau de n éléments en visant une somme de S, revient à mettre la valeur V dans le 1er élément et remplir un tableau de n-1 éléments en visant une somme de S-V

2-A chaque ajout d'un nouvelle élément dont la valeur serait V, il faut que :
(n-1)*m >= (S-V) ' Il faut que si les n-1 éléments restants ont la valeur mini tu atteignes AU MOINS ta somme cible
ET QUE
(n-1)*M <= (S-V) ' Il faut que si les n-1 éléments restants on la valeur maxi tu atteignes AU PLUS ta somme cible

Bosses avec cela si ca te convient et je fait de même de mon coté

Christophe R.
0
feunaye Messages postés 6 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 24 décembre 2003
16 déc. 2003 à 14:00
Merci,

Le principe me semble pas mal, je vais voir ce que je peux faire avec ça
0
feunaye Messages postés 6 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 24 décembre 2003
17 déc. 2003 à 00:06
Nickel :

Je génère v1 de façon aléatoire (notons s la somme de ses éléments), et pour les n éléments de v2 (compris entre m et M) :

while (n>0)
{
if (s - (n-1)*m > m)
min = s - (n-1)*m;
else
min=m;

if (s - (n-1)*M < M)
max = s - (n-1)*M;
else
max=M;

c = genere (min, max); //pour generer c : min<c<max
v[i] = c;
s = s - c;
n--;
}

Merci pour le petit coup de pouce !
0
feunaye Messages postés 6 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 24 décembre 2003
24 déc. 2003 à 01:54
Oups, il y avait une petite erreur dans mes tests, voici pour ceux que ça interesse la version correcte :

if ((s - (n-1)*m) > M)
temp = s - (n-1)*m;

if ((s - (n-1)*M) < m)
min = s - (n-1)*M;

maz = temp
0
Rejoignez-nous