Algorithm 2-3棵树中的工作面试问题(B树)

Algorithm 2-3棵树中的工作面试问题(B树),algorithm,tree,time-complexity,b-tree,2-3-tree,Algorithm,Tree,Time Complexity,B Tree,2 3 Tree,这是求职面试问题的一部分,在第二部分变得更难了 给定两棵2-3棵树T1和T2,使得对于已知的每棵树h(h表示高度)和m,m对于每棵树也是已知的(m表示最小值,m表示最大值),加上T1中的每个节点T2。 我被要求在O(|h1-h2 |+1) 这一个非常简单,我必须指出,这个算法可能会导致一个树的h比前两个大 现在,我得到了k2-3棵树(T1,T2,T3…Tk),它们具有相同的精确条件,并且知道h_1你的解决方案是正确的,但如果你有两棵以上相同高度的树,就不会是正确的。例如,如果您有高度相同的k树,

这是求职面试问题的一部分,在第二部分变得更难了

给定两棵2-3棵树T1和T2,使得对于已知的每棵树
h
(h表示高度)和
m
m
对于每棵树也是已知的(m表示最小值,m表示最大值),加上
T1
中的每个节点
T2
。 我被要求在
O(|h1-h2 |+1)

这一个非常简单,我必须指出,这个算法可能会导致一个树的h比前两个大


现在,我得到了
k
2-3棵树(T1,T2,T3…Tk),它们具有相同的精确条件,并且知道
h_1你的解决方案是正确的,但如果你有两棵以上相同高度的树,就不会是正确的。例如,如果您有高度相同的
k
树,那么前两棵树确实会在
O(h_1-h_1)=O(1)
时间中合并,但生成的高度可以变成
h_1+1
。虽然它可能会变成,也可能不是这样,但让我证明一切都可能出错


我们在高度树
n
中可以拥有的最大键数是
3^(n+1)-1
。这是因为每个顶点最多有3个子树,因此第i级有
3^i
顶点,添加n级将导致
(3^(n+1)-1)/2
顶点。因为在这种情况下每个顶点有2个关键点,所以关键点的总数为3^(n+1)-1

因此,如果我们合并4棵这样的最大树,我们肯定会得到一棵高度增加2的树,16棵合并后的树高度增加3,依此类推。因此,虽然前3次合并是在固定时间内完成的,但接下来的12次合并要慢两倍,接下来的48次合并要慢3倍,依此类推。您将对每个
i
从1开始到
log(k)
执行
Ω(i)
操作
Ω(3^(i+1)-3^i)

因为
Ω(3^log(k))=Ω(k)
这个和肯定是
Ω(k log k)
,因此不适合给定的渐近界


如果没有三棵树共享相同的高度,则不会出现此问题,因为无论何时合并两棵树,结果高度都是
max(h_i,h_(i+1))+1=h_(i+1)+1
,并且
h_(i+3)>=h_(i+1)+1
,因此合并部分的高度永远不会超过下一棵树,这就是+k部分在渐近界中的来源。

“但是得到的高度可以变成h_1+1”你能详细说明一下如果发生这种情况会出现什么问题吗?@MrCalc我最初的计算是关闭的,在更精确地描述问题时发现的,在编辑中修复了。问题仍然存在,尽管没有那么严重。明白了,最后一件事Q1)“因此,如果我们合并5棵这样最大的树,我们肯定会得到一棵高度增加了2的树”为什么选择其中5棵,为什么选择5棵,然后选择17棵?足够合并2个完整的键以获得一个更高的级别Q2)|在高度为n的树中,我们可以拥有的最大键数是3*4^n“我不同意这一点,4^n也是从哪里来的?谢谢你指出钥匙的数量,我第一次计算的方法是错误的,但其他说法都是正确的。如果合并4棵树,每棵树的大小为4^(n+1)-1,那么如果第五棵树的顶点超过3个,则将得到4^(n+2)-4个元素,因此我假设h_k>=2,添加它将导致超过4^(n+2)-1,并且它不适合高度为n+1的树。然后,有5棵这样大的树会导致另一个高度增加,依此类推。”。这是因为每个顶点最多有4个子树“在2-3中,最大值是3,而不是4