Je voudrais estimer le nombre de feuilles dans une grande arborescence pour laquelle je ne peux pas visiter tous les nœuds de façon exhaustive. Cet algorithme est-il approprié? A-t-il un nom? Aussi, s'il vous plaît pédante si j'utilise des termes inappropriés.Estimation de la taille d'un arbre
sum_trials = 0
num_trials = 0
WHILE time_is_not_up
bits = 0
ptr = tree.root
WHILE count(ptr.children) > 0
bits += log2(count(ptr.children))
ptr = ptr.children[rand()%count(ptr.children)]
sum_trials += bits
num_trials++
estimated_tree_size = 2^(sum_trials/num_trials)
Je ne vois pas comment cela pourrait fonctionner sur un arbre déséquilibré de quelque sorte que ce soit. Il serait plus logique de personnaliser l'objet arbre lui-même pour garder une trace de ce genre de choses pendant les insertions et les suppressions. –
Pensez énorme, comme un arbre de tous les jeux de dames possibles. Pas quelque chose qui serait en mémoire. –
Je comprends énorme. :) Il semble que vous puissiez avoir un arbre qui existe physiquement (même si c'est un arbre séparé) ou vous avez un arbre qui n'existe pas réellement et qui est généré à partir d'un noeud donné si nécessaire. Dans le premier cas, le code arbre-genning doit garder les statistiques pour vous donner ce que vous voulez. Le deuxième cas, vous ne pouvez pas résoudre pour une structure arborescente arbitraire. Si vous avez un deuxième cas spécial - comme les permutations de jeux de dames - il y a de meilleures méthodes à utiliser que l'échantillonnage statistique. –