algorithmique (école d'ingénieur) · Chapitre 10 · Exercice de TD
Sous-tableau de somme maximum : trois algorithmes
Complexité des programmes · niveau 2
Énoncé
On cherche la somme maximum d'un sous-tableau de (chapitre 11), le sous-tableau vide étant de somme .
- Écrire un programme qui calcule la somme de chaque sous-tableau par une boucle sur . Donner le nombre exact d'additions.
- Améliorer le programme en remarquant que la somme de s'obtient à partir de celle de . Nombre d'additions ?
- Mesurer les deux programmes pour , , et comparer au programme en du chapitre 11.
Corrigé
-
static int cubique(int[] T) { int n = T.length, best = 0; // sous-tableau vide : 0
for (int d = 0; d < n; d++)
for (int f = d + 1; f < n + 1; f++) {
int s = 0;
for (int i = d; i < f; i++) s = s + T[i]; // s = somme de T[d:f]
if (s > best) best = s;
}
return best;
}
Le nombre d'additions est .
- On conserve la somme courante quand augmente :
static int quadratique(int[] T) { int n = T.length, best = 0;
for (int d = 0; d < n; d++) {
int s = 0; // s = somme de T[d:d]
for (int f = d + 1; f < n + 1; f++) {
s = s + T[f - 1]; // s = somme de T[d:f]
if (s > best) best = s;
}
}
return best;
}
additions : .
- Sur le tableau du chapitre 11 (), les deux programmes trouvent , avec et additions. Sur des tableaux aléatoires (programme
SommeMaxNaive.java) :
n = 500 : cubique 1739 en 8 ms (20958500 add.), quadratique 1739 en 1 ms (125250 add.)
n = 1000 : cubique 1263 en 48 ms (167167000 add.), quadratique 1263 en 0 ms (500500 add.)
n = 2000 : cubique 3722 en 432 ms (1335334000 add.), quadratique 3722 en 0 ms (2001000 add.)
Quand double, les additions du programme cubique sont multipliées par , celles du programme quadratique par . Le programme du chapitre 11 fait tours de boucle : tours pour . (Les temps mesurés dépendent de la machine.)
100 % 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.