algorithmique (école d'ingénieur) · Chapitre 9 · Exercice de TD
Accélération de Knuth
Arbres binaires de recherche de coût minimum · niveau 3 (difficile)
Énoncé
Knuth a montré qu'on peut chercher la racine de l'arbre optimal sur entre les racines des arbres optimaux sur et sur : .
- Programmer la variante de
calculerMdans laquelle, pour , la boucle sur parcourt (rappel : ). - Vérifier sur des fréquences aléatoires qu'elle donne les mêmes coûts que la version du cours, et mesurer les temps de calcul pour .
- Montrer que, pour une taille fixée, la somme des longueurs des intervalles de recherche est au plus . En déduire la complexité.
Corrigé
- Les intervalles de taille sont traités à part (la racine est l'unique valeur), puis la boucle sur est restreinte :
static int[][] calculerMknuth(int[] F) { int n = F.length;
int[] P = new int[n + 1];
for (int x = 0; x < n; x++) P[x + 1] = P[x] + F[x];
int[][] M = new int[n + 1][n + 1];
for (int i = 0; i < n; i++) { M[i][i + 1] = F[i]; M[i + 1][i] = i; } // t = 1
for (int t = 2; t < n + 1; t++)
for (int i = 0; i < n - t + 1; i++) { int j = i + t;
M[i][j] = Integer.MAX_VALUE;
for (int k = M[j - 1][i]; k < M[j][i + 1] + 1; k++) { // a(i,j-1) <= k <= a(i+1,j)
int mikj = M[i][k] + M[k + 1][j];
if (mikj < M[i][j]) { M[i][j] = mikj; M[j][i] = k; }
}
M[i][j] += P[j] - P[i];
}
return M;
}
- Sur des fréquences aléatoires dans (les temps dépendent de la machine) :
n=200 : m = 63959 / 63959, Θ(n³) 5,5 ms, Knuth 1,8 ms
n=400 : m = 147539 / 147539, Θ(n³) 19,6 ms, Knuth 1,5 ms
n=800 : m = 340726 / 340726, Θ(n³) 91,4 ms, Knuth 4,0 ms
Les coûts sont identiques. Quand double, la version du cours est environ à fois plus lente (on attendrait pour de grands ), la version de Knuth environ à fois.
- Pour fixé, l'intervalle parcourt , de longueur . En sommant sur , les termes se télescopent : la somme vaut . Chaque taille coûte donc , et les tailles : la complexité devient .
100 % gratuit
La suite du chapitre est sur Adloun
- 10 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.