Adloun

algorithmique (école d'ingénieur) · Chapitre 10 · Application directe du cours

Compter des tours de boucle

Complexité des programmes · niveau 2

Énoncé

Donner, en fonction de , le nombre exact d'exécutions de l'instruction c++ dans chacun des deux fragments, puis leur complexité.


for (int i = 0; i < n; i++)
    for (int j = i; j < n; j++)
        for (int k = i; k < j; k++) c++;

for (int i = 1; i < n; i = 2 * i)
    for (int j = 0; j < i; j++) c++;

Vérifier les réponses en programmant ces boucles avec un compteur.

Corrigé

Premier fragment. Pour et fixés, la boucle sur fait tours. Posons : pour chaque , il y a couples tels que . Le nombre total est donc

Second fragment. La variable prend les valeurs , où est le nombre de tours de la boucle externe (). La boucle interne fait tours, d'où exécutions. Comme , on a : la complexité est , et non comme on pourrait le croire en multipliant « tours externes » par « au plus tours internes ».

Vérification (programme Boucles.java) :


     n   triple  n(n²-1)/6  doubl.  2^ceil(log2 n)-1
     1        0          0       0       0
     2        1          1       1       1
     5       20         20       7       7
    10      165        165      15      15
   100   166650     166650     127     127
  1000 166666500  166666500    1023    1023

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →