92 lines
3.0 KiB
Plaintext
92 lines
3.0 KiB
Plaintext
|
||
|
||
----------------------------------------EX2---------------------------------------
|
||
1-
|
||
|
||
racineCarree : Temps : 0.09s et on a 10 008 appels. Ca fait donc un temps moyen d'appel de 0.01ms
|
||
|
||
racineCarreeTab : avec grpof on nous dit que son temps d'execution est de 0s. On a 3 appels qui correspondent aux deux petits tableaux de test que j'ai dans mon main et au tableau
|
||
avec 10 000 elements tous plus grand que 1 000 000. Si son temps d'execution est aussi cours c'est parce qu'on appelle racineCarree. Si on prend cela en compte on voit que
|
||
racineCarreeTab s'execute sur 30s environ.
|
||
|
||
On a donc racineCarreeTab qui appel 10 006 fois racineCarree et les 2 autres sont dans le main avec les deux petits test que j'ai mis.
|
||
|
||
Pour resume on a racineCarreeTab qui ne consomme presque rien car tout est delegue a racineCareeTab qui est appele en boucle pour parcourir le tableau.
|
||
|
||
|
||
|
||
|
||
2-
|
||
Complexite cyclomatioque :
|
||
|
||
de racineCarree est de 5 car :
|
||
1 "if (n < 0)"
|
||
|
||
2 "if (n == 0 || n == 1) "
|
||
|
||
3 "while (i <= n / i)"
|
||
|
||
4 "if ((n % i == 0) && (i == n / i))"
|
||
|
||
de racineCareeTab est de 2 car on a que la boucle for :
|
||
La boucle "for (k = 0; k < size; ++k)"
|
||
|
||
|
||
Complexite Algorithmique :
|
||
|
||
---------de racineCarree : O(√n)-------------
|
||
Si n n’est pas un carré parfait : on ne retourne pas avant la fin. Donc la boucle fait exactement ⌊√n⌋ itérations, puis on sort et on renvoie -1
|
||
|
||
Si n est un carré parfait : on retourne à i = √n donc la boucle fait √n itérations (la dernière est celle qui trouve la racine)
|
||
|
||
Dans tous les cas, le nombre d’itérations est proportionnel à √n
|
||
|
||
-------- de racineCarreeTab dépend ----------
|
||
|
||
du nombre d’éléments dans le tableau qu'on note m
|
||
|
||
du temps d’exécution de racineCarree() pour chaque élément
|
||
|
||
Et Puisque racineCarreeTab appelle racineCarree() m fois (une fois par élément du tableau) le coût total est la somme des coûts de chaque appel :
|
||
|
||
On va regarder le pire, c'est celui ou tous les elements du tableau sont proche de l'element le plus grand. Par exemple dans notre exemple avec des valeurs > 1 000 000.
|
||
On peut dire que toutes les valeurs sont proches de la plus grandes car a cette echelle de grandeur la difference est minim. On peut donc dire que dans le pire des cas
|
||
la complexite est dependante du max (la plus grande valeurs) et du nombre d'appels a la fonction racineCarree
|
||
on a comme complexite : O(m * √max)
|
||
|
||
|
||
|
||
----------------------------EX4--------------------------------
|
||
La complexite cyclomatique de TriSpecial :
|
||
|
||
1 : if (!in || !out || n == 0)
|
||
|
||
2 : if (!roots)
|
||
|
||
3 : for (...) (branche !roots)
|
||
|
||
4 : if (r == -1) (branche !roots)
|
||
|
||
5 : for (...) (branche else)
|
||
|
||
6 : if (r == -1) (branche else)
|
||
|
||
7 : if (pair)
|
||
|
||
8 : for (...) (branche pair)
|
||
|
||
9 : if (i % 2 == 0) (branche pair)
|
||
|
||
10 : for (...) (branche impair)
|
||
|
||
11 : if (i % 2 == 0) (branche impair)
|
||
|
||
Donc on a une complexite de 12 pour TriSpecial
|
||
|
||
La complexite cyclomatique de TriSpecial :
|
||
|
||
C'est le meme principe que racineCarreeTab et ca depend du nombre d'appel et de l'element le plus grand
|
||
|
||
On a O(N * √M) ou est M est le plus grand nombre et N le nombre d'appel.
|
||
|