Next: les algorithmes de Up: types Previous: type récursif

type avec des tableaux

Il est aussi possible de numéroter chacune des variables de l'image et de les ranger dans un tableau. Une variable peut alors désigner ses fils par leurs indices dans le tableau si ce sont aussi des nuds, et si ce sont des couleurs, on peut définir une convention comme -1 pour Noir, et -2 pour Blanc ; la racine de l'image est alors la première variable :


type variable== int list;;
type image==variable vect;;
(On aurait aussi pu choisir :

type fils = Var of int | Blanc | Noir;;
type variable== fils list;;
type image==variable vect;;
qui est plus propre, mais sûrement moins compact en mémoire)

Le triangle est alors :


let triangle=[|-2;0;-1;0|]
Ce qui est déjà moins lisible ! En revanche cette représentation non récursive a l'avantage de permettre un parcours facile et instinctif de l'arbre de l'image (voir plus loin les algorithmes) sans risque de ``boucler'', il suffit en effet de parcourir le tableau. De même, tous les algorithmes qui ont besoin de stocker des références à une variable pourront le faire très facilement grâce aux indices, en particulier le calcul de la surface et la résolution de matrice qu'il entra^ne. Malheureusement, c'est inefficace du point de vue de la gestion mémoire, les tableaux de longueur variable sont difficiles à gérer, et dans le cas de l'intersection on ne sait rien à l'avance du nombre de nuds créés, si ce n'est qu'il est borné par !

L'efficacité du garbage-collector (euh, glaneur de cellules, pardon M. Toubon !) de Caml nous a donc amené à choisir le type avec references, qui est également plus parlant, malgré le ralentissement qu'il entraine.


fdurand@clipper.ens.fr, fleuret@clipper.ens.fr
Thu Jun 9 18:32:25 MET DST 1994