En parcourant les exemples et les explications de la durée d'exécution des boucles imbriquées sur http://faculty.simpson.edu/lydia.sinapova/www/cmsc250/LN250_Weiss/L03-BigOh.htm#Counting, le deuxième exemple ne me semble pas correct.Durée de la boucle for
exemple 1
sum = 0;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
sum++;
a un sens tout de suite. L'extérieur pour la boucle est O (n). Inner for Loop est également O (n). Multipliez-les ensemble, O(n) * O(n) = O(n*n) = O(n^2).
Deuxième exemple. intérieur de la boucle ne commence pas par 0.
sum = 0;
for(i = 0; i < n; i++)
for(j = i; j < n; j++)
sum++;
le temps de marche de la boucle interne sera (1 + 2 + … + n) = n*(n+1)/2 = O(n^2)
Comme dans le premier exemple, la boucle externe fonctionne à O (n). Par conséquent, la durée totale est O(n) * O(n^2) = O(n^3).
J'ai raison, ou il me manque quelque chose? Merci!
Je pense que j'ai compris où j'avais tort. En effet (1 + 2 + ... + n) = n * (n + 1)/2 = O (n^2) Tout d'abord, la boucle interne dépend de la boucle externe, et vous ne pouvez pas simplement multiplier les complexités comme nous fait dans les exemples précédents. Nous devons compter le nombre d'exécutions de la boucle interne pour toutes les n exécutions de la boucle externe. Par conséquent, nous obtenons des séries faites de n termes. Merci pour votre aide! – newprint