我正在为即将到来的一些技术面试而学习,并且正在阅读一两年前有关数据结构的演讲幻灯片。
我不清楚为什么左倾堆的最坏情况合并运行时间是 O(log n) 而对于倾斜堆它是 O(n),当倾斜堆基本上以与左倾堆相同的方式合并时。
左派堆通过选择具有较小根的树并递归地将其右子树与较大的树合并来合并 A 和 B。然后它检查空路径长度,如果它违反左派结构属性,则交换它的两个子树。
倾斜堆做同样的事情,但每次递归合并 A 和 B 时都会盲目地交换它的两个子树。
为什么倾斜堆合并的最坏情况会变成 O(n)?是因为我们不能保证递归合并时的高度限制(因为它每次都在交换边)?这是否与弗洛伊德算法有关,即树中所有节点的高度之和以 O(n) 增长?