Data structures 斜堆与左堆的最坏运行时

Data structures 斜堆与左堆的最坏运行时,data-structures,language-agnostic,big-o,skew,leftist-tree,Data Structures,Language Agnostic,Big O,Skew,Leftist Tree,我正在准备接下来的一些技术采访,我正在看一两年前关于数据结构的讲座幻灯片 我不清楚为什么最糟糕的合并运行时对于左派堆是O(logn),而对于倾斜堆是O(n),当倾斜堆基本上以与左派堆相同的方式合并时 左边的堆通过选取根较小的树并递归地将其右子树与较大的树合并,从而合并A和B。然后检查空路径长度,如果它违反了leftist结构属性,则交换它的两个子树 倾斜堆做同样的事情,但每次递归合并A和B时都会盲目地交换它的两个子树 为什么倾斜堆合并的最坏情况会变成O(n)?是因为我们不能保证递归合并时的高度限

我正在准备接下来的一些技术采访,我正在看一两年前关于数据结构的讲座幻灯片

我不清楚为什么最糟糕的合并运行时对于左派堆是O(logn),而对于倾斜堆是O(n),当倾斜堆基本上以与左派堆相同的方式合并时

左边的堆通过选取根较小的树并递归地将其右子树与较大的树合并,从而合并A和B。然后检查空路径长度,如果它违反了leftist结构属性,则交换它的两个子树

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


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

左侧堆的路径长度最多为log(n+1)。而歪斜堆的正确路径可以任意长(可以是N)。因为合并的性能取决于正确路径的长度,所以最坏情况下的合并时间如下。然而,我不知道skew heap是如何找到的。你能给我一个特殊的例子,歪斜堆的右路径与N一样长吗?

左边的堆的右路径长度最多为log(N+1)。而歪斜堆的正确路径可以任意长(可以是N)。因为合并的性能取决于正确路径的长度,所以最坏情况下的合并时间如下。然而,我不知道skew heap是如何找到的。你能给我一些特例吗,歪堆的正确路径与N一样长?

我对这些结构的记忆还不够清楚,无法回答,但我可以告诉你,我参加过几次技术采访,从我所看到的情况来看,我会惊讶地发现这一点。你的问题的细节本身就表明你对面试有很好的理解,你花在准备面试上的时间可能会花在其他地方。当然,这取决于你工作的性质,但从我所看到的情况来看,强调线程/进程/并发性是可能的。我对这些结构的记忆还不够清楚,无法回答,但我可以告诉你,我参加过一些技术面试,从我所看到的情况来看,我会很惊讶这一点。你的问题的细节本身就表明你对面试有很好的理解,你花在准备面试上的时间可能会花在其他地方。当然,这取决于您工作的性质,但从我所看到的情况来看,可能会强调线程/进程/并发性。