J’ai besoin de trouver à coup sûr le plus petit élément de kth dans l’arborescence de recherche binaire à l’aide de n’importe quelle variable statique/globale. Comment faire pour y parvenir efficacement ? La solution que j’ai dans mon esprit fait l’opération en o (n), le pire des cas étant donné que j’ai l’intention de faire une traversée envue de l’intégralité de l’arborescence. Mais au plus profond, je pense que je n’utilise pas la propriété de CEST ici. Ma solution assumptive n’est correct ou y a-t-il un meilleur disponible ?
Réponses
Trop de publicités?Voici juste un aperçu de l'idée:
Laissez chaque nœud du BST ont un champ qui retourne le nombre d'éléments à sa gauche et à droite de la sous-arborescence. Laissez la gauche de la sous-arbre du nœud T contiennent que des éléments de plus petite que T et le droit de la sous-arborescence que des éléments de taille supérieure ou égale à T.
Maintenant, supposons que nous sommes au nœud T:
-
k == num_elements(à gauche sous-arbre de T), alors la réponse que nous recherchons est la valeur du nœud
T
-
k > num_elements(à gauche sous-arbre de T) alors il est évident que nous ne pouvons ignorer le sous-arbre gauche, car ces éléments seront également plus petit que l'
k
ème plus petite. Ainsi, nous réduisons le problème de trouver l'k - num_elements(left subtree of T)
plus petit élément du sous-arbre droit. -
k < num_elements(à gauche sous-arbre de T), alors l'
k
ème plus petite est quelque part dans le sous-arbre gauche, nous avons donc de réduire le problème de trouver l'k
ème plus petit élément dans le sous-arbre gauche.
C'est - O(log N)
en moyenne (en supposant que l'équilibre de l'arbre).
Vous pouvez utiliser afinde itératif traversal : http://en.wikipedia.org/wiki/Tree_traversal#Iterative_Traversal avec un simple recherchez kth élément après poping, un nœud de la pile.