cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 28 juil. 2005 à 13:07
Si tu recherches l'éfficacité, tu fais un arbre de toutes les valeurs autorisées, et tu sais combien tu as de valeurs autorisées, tu pioches un nombre entre 1 et n, et tu prends la valeur correspondante (temps O(log(n)))
Bon c'est sur que la complexité d'un tel algorithme est horrible, mais le jour ou tu en auras plus que 500 (ce qui est deja beaucoup), les performances vont chuter.
N.B. : hasard
Pourquoi faire simple quand on peut faire compliqué ?
mondrone
Messages postés246Date d'inscriptionmercredi 5 janvier 2005StatutMembreDernière intervention11 mars 2012 28 juil. 2005 à 16:22
Je v faire chier mon monde je le sens LOL.
Si tu connais a l'avance les valeurs a exclure, et pour ne perdre ni
trop de rapidité (sauf quand tu as vraiment beaucoup de valeurs a
exclure) ni trop de place avec des tableaux, tu génère un nombre
aléatoire dans chaque tranche de nombre permises (genre entre 1 et 10
sauf 5 ca fait entre 1 et 4 et entre 6 et 10)
Puis tu reprend parmis toutes ces valeurs une valeur au hasard. Mais là tu vas ptet me dire que je cherche trop loin !
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 28 juil. 2005 à 16:27
Oui bien sur, le tableau marche tres bien mais en supposant que l'on connaisse d'avance (i.e. a la compilation) les valeurs autorisées.
S'il veut le faire dynamiquement, alors il faut une structure de données dynamique, pourquoi pas l'arbre ... On pourrait aussi le faire sous forme d'un tableau, mais il faurait construire un nouveau tableau et tout recopier (O(n)).
Dans ce cas il y a deux etapes
#1 l'ajout de valeurs interdites
#2 le choix d'une valeurs autorisées
Apres soit on choisit un cout O(n) pour le #1 et O(1) pour le #2 (version tableau), soit un cout O(ln(O)) pour le #1 et O(ln(n)) pour le #2 (version arbre). (le cout de la suppression d'une valeur dans un arbre doit etre plus petit que O(ln(n)), mais bon il faut voir ...)
Pourquoi faire simple quand on peut faire compliqué ?
cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 juin 20102 28 juil. 2005 à 12:55
tu genere un nombre au hazard jusque ce que tu trouve un valeur qui
n'est pas 5 ou 6, ben j'y ais pensé mais je me demandais si ca prendre
pas un peut de temps car il peut arriver que je genere un nombre entre
1 et 500 en interdisant toutes les valeurs sauf 1 et 2.
Merci de ton aide mais je vais faire cette solution vu que y'a rien de prevu dans msdn apparement.
mondrone
Messages postés246Date d'inscriptionmercredi 5 janvier 2005StatutMembreDernière intervention11 mars 2012 28 juil. 2005 à 18:38
Par conte, il reste quand meme à l'ardre (si j'ai bien compris il
s'agit d'une liste chainée non ?) l'avantage de pouvoir etre libéré de
la mémoire après la génération du nombre aléatoire. Ce n'est peut etre
pas tres important, mais au contraire ca peut l'etre. tout depend du
contexte.