
Envoyé par
Obsidian
Bon, après relecture, l'algorithme utilisant une file est le même que celui à pile de Climoo en #4, et en plus, il consomme beaucoup plus de mémoire. Il stocke la moitié de l'arbre, là où une pile ne stocke que la branche explorée. En plus, la pile est plus facile à gérer. Donc, on oublie.
Par contre, il a l'avantage de détruire l'arbre « dans l'ordre » (père, puis fils, puis petits-fils) tels que les noeuds auraient été créés, même récursivement. En plus, il permet d'affirmer que l'algorithme n'est plus du tout récursif.
Non, Si tu as un champ « père », tu auras en permanence n éléments en mémoire, là où la file n'en retiendrait que n/2 et la pile log2(n). Pour te donner un ordre d'idée, pour un arbre complet à 16 niveaux :
- 65535 éléments non libérables dormants (autant que le nombre de nœuds) avec un champ « père », avant le processus de libération. Tant que ton arbre existe, cette mémoire est perdue et, en plus, cela t'oblige à modifier la structure.
- 32768 éléments dans la file, étant donné que pour chaque élément supprimé, on ajoute 2 fils, soit un nœud stocké pour chaque nœud visité, jusqu'à ce que l'on atteigne le dernier niveau. Donc emmagasinage de n-1 niveaux. Exploration « en largeur d'abord ».
- 16 avec la pile, puisqu'on explore d'abord les fils, « en profondeur » d'abord, ce qui permet de commencer à retirer des nœuds (les feuilles) sans en ajouter, avant d'avoir exploré la totalité des niveaux supérieurs.
Dans tous les cas, la solution à champ « père » est la pire si elle ne sert qu'à la suppression de l'arbre, d'autant plus qu'elle stocke exactement les mêmes informations que la fonction de suppression dans la pile ou la file, mais que ce travail est fait à l'avance. Et ce prétraitement ne t'apporte rien puisque cela t'oblige ensuite à examiner plusieurs fois le même nœud.
En revanche, l'intérêt d'une telle méthode est d'être applicable à un automate : il n'a besoin d'aucune mémoire des états antérieurs pour mener à bien sa mission.
Partager