Fusion de deux arbres de recherche binaire


17

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 net de mla taille de chaque arbre respectivement.

Cependant, on m'a dit que cela pourrait être fait à O(h), où hest 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).


Je ne sais pas erick j'ai la même question aussi.

Pour être juste, c'était une question donnée dans un devoir d'algorithmes. Il s'avère que O (h) est trop strict lors de l'exécution, car la question a oublié de donner des informations plus nécessaires: que toutes les clés d'une arborescence étaient plus petites que toutes les clés de l'arborescence de droite.
efritz

Suis-je en train de manquer quelque chose, la fusion d'arbres binaires ne se ferait-elle pas facilement O(log n)avec une simple fonction de déplacement de nœud?
AU

@AT Oui, mais nous ne savions pas que les clés d'un BST s'excluaient mutuellement.
efritz

1
Ceci est un arbre rouge-noir, pas un BST. Un rouge noir (ainsi que les arbres et tas AVL) sont des types d'arbres spéciaux qui gardent une propriété liée à la hauteur. Les BST à la vanille peuvent être une seule colonne vertébrale. Essayez d'insérer une série de nombres non décroissants ou non croissants dans un BST et vous verrez que la hauteur de ces arbres est réellement n. Seuls les arbres binaires complets ou complets ont une hauteur logarithmique par rapport à leur nombre total de nœuds.
efritz

Réponses:


24

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)n22n12n112n pointeurs.Ω(n)


Une remarque: si j'ai lu correctement la description dans cet article, ces arbres ne prennent pas en charge l'insertion et la suppression. La fusion suit simplement la procédure de fusion des arbres de recherche de doigt (décrite dans la réponse de Joe). L'ensemble restreint d'opérations permet une meilleure analyse que l' O ( n lg mO(lg2n)un. O(nlgmn)
jbapple

1
L'amélioration de l'analyse est due à l'amortissement et non à une restriction des opérations autorisées. Les insertions et les suppressions peuvent être prises en charge avec des séparations et des fusions (en fait des «jointures») dans la même limite de temps amortie . O(logn)
Jeffε

Juste par curiosité, le temps -il affecté si les arbres sont stockés dans des tableaux au lieu de listes chaînées (ce qui, je suppose, est ce que vous vouliez dire en disant "changer ... les pointeurs ")? Ω(n)
mtahmed

Par défaut, les "arbres de recherche binaires" sont des structures basées sur des pointeurs (pas des "listes liées"); chaque nœud pointe vers ses deux enfants et éventuellement son parent. Mais la borne inférieure ne dépend pas de la représentation précise. Il y a façons de fusionner deuxarbres de recherche binaires ànnœuds, de sorte que tout algorithme basé sur la comparaison nécessite au moinslog2 ( 2n(2nn)ncomparaisons pour choisir la bonne. log2(2nn)2nO(logn)
Jeffε

1
@ Jɛ ff E: Je suis d'accord que les séparations et les jointures sont prises en charge, mais je ne pense pas que la création ou la destruction d'arbres le soit. Ainsi, par exemple, si je veux supprimer "x" de l'alphabet, je n'obtiens pas seulement "a..wyz", mais aussi "x". La taille de l'univers (qui est , voir section 2.1) ne change pas. De plus, l'intro de la section 1 note que les ensembles doivent partitionner l'univers, ce que j'interprète (peut-être incorrectement) pour signifier que chaque élément de l'univers est dans un arbre. Donc, d'après ma lecture, cette construction ne fonctionne pas sur des univers illimités. C'est ainsi que je devrais écrire mon commentaire ci-dessus. n
jbapple

9

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 quemn.O(nlogmn)mnmn

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


2
Les deux lié au temps et la borne inférieure correspondante supposent quemn. O(nlogmn)mn
Jeffε

Je pensais que cela impliquait le délai, mais j'ai modifié la question pour la rendre explicite.
Joe

0

1
Leurs supports de structure de données rejoignent en O (1) le temps amorti et non fusion. Tous les éléments d'une arborescence doivent être plus petits que tous les éléments de l'autre.
Jeffε

TiTjTiTjTjTiw(Ti)=w(Tj)TjTi est attaché à un nœud sur la colonne vertébrale de T i . "TiTjTi
AT
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.