Je cherche un algorithme pour fusionner deux arbres de recherche binaires de taille et de plage arbitraires. La manière évidente de procéder pour l'implémenter serait de trouver des sous-arbres entiers dont la plage peut s'insérer dans un nœud externe arbitraire dans l'autre arbre. Cependant, le pire temps d'exécution pour ce type d'algorithme semble être de l'ordre de l' O(n+m)
endroit n
et de m
la taille de chaque arbre respectivement.
Cependant, on m'a dit que cela pourrait être fait à O(h)
, où h
est la hauteur de l'arbre avec la plus grande hauteur. Et je suis complètement perdu sur la façon dont cela est possible. J'ai d'abord essayé d'expérimenter la rotation d'un arbre, mais la rotation d'un arbre en colonne vertébrale est déjà O (h).
O(log n)
avec une simple fonction de déplacement de nœud?n
. Seuls les arbres binaires complets ou complets ont une hauteur logarithmique par rapport à leur nombre total de nœuds.Réponses:
Dans ArXiv: 1002.4248 , John Iacono et Özgür Özkan décrivent un algorithme relativement simple pour fusionner deux arbres de recherche binaire en temps amorti ; l'analyse est la partie difficile. [ Mise à jour: Comme Joe l'observe correctement dans sa réponse, cet algorithme est dû à Brown et Tarjan.] Ils décrivent également une structure de données de dictionnaire plus compliquée, basée sur des listes de saut biaisées, qui prend en charge les fusions dans le temps amorti O ( log n ) .O(log2n) O(logn)
D'un autre côté, une pire limite de est impossible. Considérons deux arbres de recherche binaires avec n nœuds, l'un stockant les entiers pairs entre 2 et 2 n , l'autre stockant les entiers impairs entre 1 et 2 n - 1 . La fusion des deux arbres crée un nouvel arbre de recherche binaire stockant tous les entiers compris entre 1 et 2 n . Dans un tel arbre, une fraction constante des nœuds a une parité différente de celle de leurs parents. (Preuve: le parent d'une feuille impaire doit être pair.) Ainsi, la fusion des arbres pairs et impairs nécessite de changerO(logn) n 2 2n 1 2n−1 1 2n pointeurs.Ω(n)
la source
Vous pouvez trouver cette référence utile: Brown et Tarjan, A Fast Merging Algorithm , dans lequel les auteurs montrent comment fusionner des arbres binaires équilibrés (AVL) dans qui est optimal (pour les algorithmes basés sur la comparaison). metnsont les longueurs des listes triées représentées par les arbres de recherche binaires, et on suppose quem≥n.O(nlogmn) m n m≥n
Vous pouvez également voir une discussion sur les différentes techniques de fusion d'ensembles ordonnés dans la section 11.5 de cet article sur les arbres de recherche des doigts
la source
Vous pouvez fusionner des arbres dans le pire des casO(1) tout en prenant en charge: insérer, supprimer et rechercher dans .O(log n)
Brodal, Gerth Stølting, Christos Makris et Kostas Tsichlas. «Listes triées caténables à temps constant purement fonctionnelles» . Dans les actes de la 14e conférence du Symposium européen annuel - Volume 14, 172–183. ESA'06. Londres, Royaume-Uni, Royaume-Uni: Springer-Verlag, 2006. [ PDF ]
la source