【发布时间】:2011-05-09 16:43:22
【问题描述】:
我正在为即将到来的一些技术面试而学习,并且正在阅读一两年前有关数据结构的演讲幻灯片。
我不清楚为什么左倾堆的最坏情况合并运行时间是 O(log n),而对于倾斜堆,它是 O(n),当倾斜堆本质上以与 a 相同的方式合并时左派堆。
左堆通过选择具有较小根的树并递归地将其右子树与较大的树合并来合并 A 和 B。然后它检查空路径长度,如果它违反左派结构属性,则交换它的两个子树。
倾斜堆做同样的事情,但每次递归合并 A 和 B 时都会盲目地交换它的两个子树。
为什么倾斜堆合并的最坏情况会变成 O(n)?是因为我们不能保证递归合并时的高度限制(因为它每次都在交换边)?这是否与弗洛伊德算法有关,即树中所有节点的高度之和以 O(n) 增长?
【问题讨论】:
-
我对这些结构的记忆不太清楚,无法回答,但我可以告诉你,我参加过几次技术面试,从我所见的情况来看,我会惊讶于它的出现向上。仅您问题的详细性质就可以很好地理解,而且您花时间准备这些面试可能会更好地花在其他地方。当然,这取决于您的工作性质,但据我所见,可能会强调线程/进程/并发。
标签: data-structures language-agnostic big-o skew leftist-tree