Oui, ils sont tous O (n), et oui, vos équations pour T
sont correctes.
En général, alors que T
est utile pour se familiariser avec l'analyse de complexité, il n'est pas utilisé autrement. La plupart des gens sont préoccupés par le O
d'un problème. En outre, une fois que vous avez trouvé un ensemble d'algorithmes avec O
minimal (ou optimal), le problème de trouver le meilleur de cet ensemble dépend rarement de T
. En effet, des choses comme, par exemple, la cohérence de la mémoire cache sont généralement plus importantes que le nombre absolu de comparaisons ou d'ajouts pour la plupart des problèmes pratiques.
Si vous prenez deux boucles:
for (i = 0; i < n; i++) {}
et
for (i = 0; i <= n; i++) {}
La boucle inférieure exécutera une fois de plus que celui du haut (il exécutera lorsque i == n
, tandis que la boucle supérieure sautera ce). Ainsi, lors du calcul de l'exécution, ceux-ci sont différents. Le premier exécute la comparaison/incrément n
fois exactement (lorsque i
est {0,1,...,n-1}
); le bas l'exécutera n+1
(lorsque i
est {0,1,...,n-1,n}
).
Cependant, en notation Big-O, vous recherchez comportement asymptotique - c'est-à-dire que ce qui se passe avec n
est vraiment important. Et dans ce cas, vous ne prenez que le facteur n
qui varie le plus rapidement. Lorsque n
est très grand, l'itération supplémentaire de la boucle ci-dessus n'aura pas d'importance du tout, donc les deux boucles sont O(n)
.
Une chose importante à garder à l'esprit avec la notation Big-O est qu'elle ne capture absolument pas tout ce qui concerne un algorithme. C'est un bon premier passage - un algorithme qui est O(n)
sera presque toujours meilleur que celui qui est O(n^3)
. Mais dans l'espace des algorithmes avec le même - ou presque le même - exposant, il peut y avoir des performances très différentes lorsqu'il est implémenté sur des systèmes réels.
Est un peu difficile parfois. Donc: "i
Wyvern666
Édition Excelent. Merci. – Wyvern666