Algorithm 合并n个AVL树

Algorithm 合并n个AVL树,algorithm,data-structures,merge,tree,avl-tree,Algorithm,Data Structures,Merge,Tree,Avl Tree,我有n个大小为n_1,n_2,…,n_n的AVL树,所以sumn_I=n。 我可以合并两个AVL在线性时间的大小更大的一个。 我能在多少时间内合并这n棵树? Thx的任何帮助如果您有k个不同的树,那么您需要总共进行k-1合并,将它们收集到一个树中。所以问题是每次合并需要多长时间 假设您采用的策略是,始终在任何时间点将两棵最小的树合并在一起。如果执行此操作时有m个树可用,则第二个最小树的大小将主导合并的运行时。这个大小最多为n-1/k-1,当最小的树只有一个元素,而所有其他树中都有所有元素时,就会

我有n个大小为n_1,n_2,…,n_n的AVL树,所以sumn_I=n。 我可以合并两个AVL在线性时间的大小更大的一个。 我能在多少时间内合并这n棵树?
Thx的任何帮助

如果您有k个不同的树,那么您需要总共进行k-1合并,将它们收集到一个树中。所以问题是每次合并需要多长时间

假设您采用的策略是,始终在任何时间点将两棵最小的树合并在一起。如果执行此操作时有m个树可用,则第二个最小树的大小将主导合并的运行时。这个大小最多为n-1/k-1,当最小的树只有一个元素,而所有其他树中都有所有元素时,就会出现这种情况。这意味着,如果您进行k次合并,成本将为

N - 1   N - 1   N - 1         N - 1
----- + ----- + ----- + ... + -----
K - 1   K - 2   K - 3           1
但这是n-1Hk-1,其中Hk-1是k-1。整个表达式都在log k上,因此合并时完成的全部工作都在log k上

然而,最重要的是,你必须有一些简单的方法在每个点找到两棵最小的树。这可以通过按大小降序存储树的优先级队列来完成。您将有k-1轮从树中进行两次出列,然后是一次排队,因此所有优先级队列操作的总时间为Ok log k。这也在log k上,因此算法的总运行时间在log k上

我很确定你做得再好不过了,因为你可以从它们自己的AVL树k=n中的n个节点开始。如果可以合并任何比Ωn logn更快的树,那么可以通过构建AVL树(通过合并所有较小的树形成)来仅使用比较对比Ωn logn更快的树进行排序,然后及时执行顺序遍历以排序比Ωn logn更好的树,这是非常重要的


希望这有帮助

不,我正在研究一种算法来对数组进行平均线性排序time@Mugen-您知道,对于基于比较的排序,没有可能按平均时间进行排序吗?除非您对分布或存储的元素类型有所了解,否则您最多只能登录到log n。我知道我无法比nlogn更好地进行合并,但我认为可能给定的AVL可以帮助我。。谢谢: