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.