Comment fusionner deux arborescence splay avec le coût amorti de log (n)?fusionner deux arborescence splay
Répondre
Je suppose que les arbres de jeu que vous voulez fusionner contiennent n
objets chacun. (c'est-à-dire au total, nous avons 2n
objets). Ensuite, je pense qu'il n'est pas possible de les fusionner avec log(n)
coût amorti, sauf si vous imposer d'autres hypothèses. Si vous n'avez aucune information sur les objets contenus dans les arbres, vous devrez au moins regarder chaque élément de l'un des deux arbres, ce qui aura coûté O(n)
. Cependant, si vous pouvez faire certaines hypothèses sur les objets, vous pouvez le faire dans O(log(n))
. Vous pouvez extraire certains sous-arbres de sorte que vous puissiez insérer la sous-arborescence entière dans l'autre arborescence de splay. Cependant, je ne connais pas un algorithme exact comment acchieve O(log(n))
. Par exemple, si nous savons que l'objet le plus grand dans Tree1
est plus petit que le plus petit objet dans Tree2
, alors nous pourrions simplement afficher le nœud le plus à gauche de Tree2
et ensuite nous suspendons la racine de Tree1
sous la nouvelle racine de Tree2
.
Ça m'a beaucoup aidé. et d'ailleurs il est impossible de fusionner 2 arborescence splay sans condition dans O (Log (n)) –
S'il y a des doublons dans les arbres, les doublons doivent-ils être fusionnés ou non? Par exemple, si les arbres sont [1,2,3,4] et [1,2,5], le résultat devrait être [1,1,2,2,3,4,5] ou [1,2,3 , 4,5]? –
@niki: ce n'est pas si important. Supposons que les éléments en double ne sont pas autorisés. –