Alors permettez-moi de clarifier certaines choses, vous êtes intéressé par la notation big-O - cela signifie la limite supérieure . En d'autres termes, il est acceptable de compter plus d'étapes que vous ne le faites réellement. En particulier, vous pouvez modifier l'algorithme pour
...
for (j = 0; j < n; j++)
...
Vous avez donc deux boucles imbriquées, chaque boucle s'exécute fois, ce qui vous donne une limite supérieure de O ( n 2 )nO(n2)
Bien sûr, vous aimeriez avoir une bonne estimation de la limite supérieure. Donc, pour l'achèvement, nous voulons déterminer une borne inférieure. Cela signifie qu'il est acceptable de compter moins d'étapes. Considérez donc la modification
for (i = n/2; i < n; i++)
for (j = 0; j < n/2; j++)
sum++;
Ici, nous n'effectuons qu'une partie des itérations de boucle. Encore une fois , nous avons deux boucles imbriquées, mais cette fois nous avons itérations par boucle, ce qui montre que nous avons au moins n 2 / 4 ajouts. Dans ce cas, nous désignons cette borne inférieure asymptotique par Ω ( n 2 ) . Puisque les bornes inférieure et supérieure coïncident, nous pouvons même dire que n 2 est une borne asymptotique étroite, et nous écrivons Θ ( n 2 ) .n/2n2/4Ω(n2)n2Θ(n2)
Si vous voulez en savoir plus, lisez ici .