– Et nous voici avec notre petite REQUÊTE… : on rentre 10 000 et on obtient INSTANTANÉMENT :
- Notre petite requête
– Pierre : « Monsieur, j’ai essayé 100 000 et en à peine 10 s » :
– Jullien : « Monsieur, pour 1 000 000, faut 53 s » :
– Et Lisa m’achève : « Monsieur, j’ai essayé avec 5 000 000, et ça a mis à peu près 4 min, et j’ai 6 chiffres significatifs ! » :
REMARQUE 3 :
Moi le profane, je n’avais pas évalué à quel point la boucle TantQue pouvait ralentir l’algorithme…
Merci à Guillaume C. qui m’a mis une puce à l’oreille, puis à mes élèves, qui l’ont fait sortir !
Alors c’est quoi qui ralentit… ? Au début, on pense au Test en début de boucle… mais bon je ne suis pas des plus convaincus… Il aura fallu le concours d’autres collègues, à qui je raconte l’épopée, pour, ENFIN, repenser à cette fichue boucle TantQue…
C’est pourtant moi qui l’aie conçue cette boucle, non sans mal d’ailleurs, et je me souviens comment je l’ai fait tourner dans ma tête... mais j’ai apparemment tout oublié de suite comme le poisson rouge...
En effet, donc, pour un même nombre n $\ge$ 2 de rectangles en sortie, la boucle FOR simple, fait n tours..... quand elle en fait $2 + 3 + ... + n$ = $ \frac {n(n+1)} {2} - 1$ lorsqu’on l’imbrique dans le TantQue !!!
Ce n’est donc pas tant le test en début du TantQue qui coûte, mais bien le nombre de tours « en $n^2$ » de la boucle FOR qui se réinitialise à chaque “passage+incrémentation sur n” dans la boucle TantQue.
(Re)Voir, ci-après, l’intérieur de la boucle TantQue pour comprendre le comptage des tours...
- La boucle FOR dans le TantQue
|
- La boucle FOR simple du début
|
$2 + 3 + ... + n$ = $ \frac {n(n+1)} {2} - 1$ tours |
n tours (ici 4) |
Je me dis maintenant, après coup, qu’on tient là une question intéressante, sur le plan Algorithmique (Analyse), à poser à des élèves : « Comparer les deux algorithmes en comptant, pour un même nombre n de rectangles en sortie, le nombre de tours dans les boucles FOR et justifier ainsi le ralentissement pour l’un d’entre eux deux. »