扭曲堆与左派堆的最坏情况运行时间

时间:2010-11-14 00:23:54

标签: data-structures language-agnostic big-o skew leftist-tree

我正在学习一些技术面试,并且刚刚从一两年前开始讲述有关数据结构的演讲幻灯片。

我不清楚为什么左派堆的最坏情况合并运行时为O(log n),而对于倾斜堆,它是O(n),当倾斜堆基本上以与a相同的方式合并时左派堆。

左派堆通过选择具有较小根的树并且以递归方式将其右子树与较大的树合并来合并A和B.然后它检查空路径长度,如果它违反左侧结构属性,则交换它的两个子树。

一个倾斜堆做同样的事情,但是每次递归地合并A和B时,盲目地交换它的两个子树。

为什么倾斜堆合并的最坏情况会变成O(n)?是因为我们不能保证高度限制,因为它递归合并(因为它每次都交换边)?这是否与Floyd算法有关,树中所有节点的高度之和在O(n)中增长?

1 个答案:

答案 0 :(得分:1)

左派堆的长度最多为log(N + 1)。虽然倾斜堆的正确路径可以任意长(它可以是N)。由于合并的性能取决于正确路径的长度,因此最坏情况的合并时间是这样的。但是,我不知道倾斜堆是如何找到的。你能告诉我一些特殊情况,即倾斜堆的正确路径和N一样长吗?