Adloun

Le même élagage, dix fois plus vite

Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 14 — Exploration exhaustive et retour sur trace

Énoncé

Le test compatible des reines parcourt les colonnes déjà remplies : il coûte . On peut le rendre en maintenant trois tableaux de booléens — lignes occupées, diagonales montantes, diagonales descendantes. Le nombre de nœuds change-t-il ? Et le temps ?

Corrigé

Le nombre de nœuds ne change pas d'un seul : les deux versions coupent aux mêmes endroits, elles ne diffèrent que par le prix du test.


(* Une reine en (c, l) occupe la ligne l, la diagonale montante c + l et la
   diagonale descendante c - l ; on décale cette dernière de n-1 pour indexer. *)
let reines n =
  let ligne = Array.make n false in
  let montante = Array.make (2*n) false and descendante = Array.make (2*n) false in
  let total = ref 0 in
  let rec explorer c =
    if c = n then incr total
    else
      for l = 0 to n - 1 do
        if not ligne.(l) && not montante.(c + l) && not descendante.(c - l + n - 1)
        then begin
          ligne.(l) <- true; montante.(c + l) <- true; descendante.(c - l + n - 1) <- true;
          explorer (c + 1);
          ligne.(l) <- false; montante.(c + l) <- false; descendante.(c - l + n - 1) <- false
        end
      done
  in explorer 0; !total

Temps mesurés, les deux versions rendant les mêmes comptes de solutions :

solutionstest en test en rapport
10724 s s
11 s s
12 s s
13 s s13,5

Trois observations, et la troisième est celle qui compte.

D'abord, le rapport croît avec : le test coûteux est , donc son surcoût moyen grandit avec la profondeur de l'arbre.

Ensuite, le prix payé est trois lignes à défaire au lieu de zéro. La version du cours n'avait rien à défaire, car était réécrite au tour suivant ; ici, trois tableaux sont modifiés et doivent être restaurés. On a échangé de la vitesse contre le risque de l'exercice 14.3.

Enfin — et c'est la leçon — un facteur ne change rien à la nature du problème. Cette version calcule en deux secondes ; à elle mettra des heures. L'optimisation constante recule le mur ; seul un changement de méthode le supprime, et pour les reines il n'y en a pas.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.