web-dev-qa-db-fra.com

Complexité temporelle de la boucle for imbriquée

Je dois calculer la complexité temporelle du code suivant:

for (i = 1; i <= n; i++)
{
  for(j = 1; j <= i; j++)
  {
   // Some code
  }
}

Est-ce que O (n ^ 2) ?

19
yyy

Un moyen rapide pour expliquer cela est de le visualiser.

si i et j vont de 0 à N, il est facile de voir O (N ^ 2)

O O O O O O O O
O O O O O O O O
O O O O O O O O
O O O O O O O O
O O O O O O O O
O O O O O O O O
O O O O O O O O
O O O O O O O O

dans ce cas, c'est:

O
O O
O O O
O O O O
O O O O O
O O O O O O
O O O O O O O
O O O O O O O O

Il s’agit de la moitié de N ^ 2, qui est toujours O (N ^ 2)

21
Krys Jurgowski

En effet, c’est O (n ^ 2). Voir aussi un exemple très similaire avec le même runtime ici .

9
Chris Bunch

Tout d'abord, considérons les boucles où le nombre d'itérations de la boucle interne est indépendant de la valeur de son index. Par exemple:

 for (i = 0; i < N; i++) {
     for (j = 0; j < M; j++) {
         sequence of statements
      }
  }

La boucle externe s'exécute N fois. Chaque fois que la boucle externe s'exécute, la boucle interne exécute M fois. En conséquence, les instructions de la boucle interne exécutent un total de N * M fois. Ainsi, la complexité totale des deux boucles est O (N2).

1
napender

A la 1ère itération de la boucle externe (i = 1), la boucle interne itérera 1 fois À la 2ème itération de la boucle externe (i = 2), la boucle interne itérera 2 fois 3ème itération de la boucle externe (i = 3), la boucle interne itérera 3 fois
.
.
Lors de l'itération FINALE de la boucle externe (i = n), la boucle interne sera Itérer n fois

Ainsi, le nombre total de fois que les instructions de la boucle interne seront exécutées .__ sera égal à la somme des entiers compris entre 1 et n, soit:

((n)*n) / 2 = (n^2)/2 = O(n^2) times 
0
user2831683