bon, je suis obligé de me défendre une autre fois.
😡
La différence entre nano-, micro-, milli- et secondes, cela est d'un niveau "débutant" qu'on peut lire dans des livres comme "Maths for dummies".
Je n'ai pas fait une erreur contre cela ! Comme formation d'ingénieur, je connais bien cela !
Ce sujet n'a jamais tenu ses promesses. Les méthodes 1 et 2 ne sont pas des tirages aléatoires, puisqu'elles ne couvrent que la moitié du champ, et sont donc beaucoup plus rapides, mais comme souvent, la vitesse est un inconvénient. Par conséquent, ces deux méthodes seront désormais ignorées.
L'advantage de ce topic est que j'ai appris l'outil incroyable "Benchmark" pour chronomètres plusieurs phases, c'est ce que j'ai fait dans le PJ.
Bon, il restait que la méthode Fisher-Yates à utiliser, la référence pour ce genre de problèmes.
Les feuilles "Blad1", "Blad2" et le graphique (les 2 axes sont logarithmes) montrent les temps pour réaliser tout avec 3 temps principales dans la macro "M_FY" :
- "End READ" = le temps pour lire les données originales
- "fin inner loop" = le temps pour le tirage Fisher-Yates
- "Fin Write" = le temps pour coller la matrice dans la feuille
Les colonnes "A:F" de "blad1", c'est le report du "Benchmark" et en colonne F les temps en ns, us, ms et s. La colonne C "Count" montre le nombre de fois qu'on a cumulé, c'est le nombre de loops qu'on a fait (ici 100). Donc, en colonne G, il faut diviser la colonne F avec la colonne C.
La macro "Test_FY" lance le "benchmark" et puis lance 100 fois la macro "M_FY" avec un certain nombre pour le tirage (normallement 50). A certains lignes de les macros sont des jalons pour le benchmark et comme ça, on est capable de cumuler 100 fois les parties "READ", "Fisher-Yates" et "Write". Les autres jalons sont à ignorer, ils sont trop petits.
Bon, normallement on a quoi, 5 à 100 éléments dans le tirage. Le tableau de la feuille "Blad2" montre les temps du "Benchmark"et on y voit que FY fait cela en 12 à 66 microsecondes. Si on veut utiliser les 2 autres méthodes (qu'on ne peut pas appeler "tirage aléatoire") on gagne quelque microsecondes, mais la partie "FY" dans le total "READ + Tirage + WRITE" est maximal 5%, donc à ignorer. Oubliez ces méthodes, catastrophe totale !
Et puis, on a les tirages avec des nombres plus élevés. Bon, Patrick Toulon faisait le teste avec 50.000 éléments en 15 millisecondes, chez moi, c'était 20 millisecondes, donc comparable (22% du total) et en total "READ+Tirage+Write" = 91 ms. Même ici, ces les méthodes 1&2 sont 2.5 fois plus vite, alors on gagne 12 millisecondes et le total serait 80 ms. C'est une blaque si on veut faire cela ... !
Résumé : Fisher-Yates est encore la référence, je n'ai pas fait une erreur au niveau nano/micro/milli et on a perdu beaucoup de temps avec ce topic !!!