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 1023100 % gratuit
La suite du chapitre est sur Adloun
- 11 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.