Adloun

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 calculerM dans 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

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 →