Comment faire référence à des enfants dans un arbre avec des millions de nœuds

J’essaie de construire un arbre, où chaque nœud peut avoir un nombre non spécifié de nœuds enfants. L’arbre doit avoir plus d’un million de nœuds dans la pratique.

J’ai réussi à construire l’arborescence, mais je rencontre des erreurs de mémoire dues à un tas plein lorsque je la remplis avec quelques milliers de nœuds. La raison en est que j’essaie de stocker les enfants de chaque nœud dans une structure de données Dictionnaire (ou toute structure de données d’ailleurs). Ainsi, au moment de l’exécution, des milliers de structures de données de ce type sont en cours de création, car chaque nœud peut avoir un nombre non spécifié d’enfants et les enfants de chaque nœud doivent être stockés dans cette structure de données.

Y a-t-il une autre façon de faire cela? Je ne peux pas simplement utiliser une variable pour stocker une référence des enfants, car il peut y avoir une quantité non spécifiée d’enfants pour chaque nœud. Ainsi, ce n’est pas comme un arbre binary où je pourrais avoir 2 variables gardant une trace de l’enfant gauche et de l’enfant droit respectivement.

S’il vous plaît pas de suggestions pour une autre méthode de le faire. J’ai les raisons pour lesquelles j’ai besoin de créer cet arbre et, malheureusement, je ne peux pas faire autrement.

Merci!

Combien de vos nœuds seront des nœuds “feuille”? Peut-être ne créez-vous la structure de données pour stocker les enfants que lorsque vous avez un enfant, sinon gardez une référence nulle.

À moins que vous n’ayez besoin de rechercher les enfants sous forme de carte, j’utiliserais une List (initialisée avec une capacité appropriée) au lieu d’un Dictionary<,> pour les enfants. Il semble que vous ayez peut-être plus d’exigences que ce que vous avez expliqué, ce qui rend difficile à dire.

Je suis surpris que vous échouiez après seulement quelques milliers de nœuds: vous devriez pouvoir créer un assez grand nombre d’objects avant d’avoir des problèmes.

Je suggérerais également que si vous pensez que vous utiliserez beaucoup de mémoire, assurez-vous que vous êtes sur un ordinateur 64 bits et que votre application elle-même est configurée pour être 64 bits. (Cela peut simplement être une mince enveloppe sur une bibliothèque de classes, ce qui est correct tant que la bibliothèque de classes est définie sur 64 bits ou sur AnyCPU.)