我正在编写一个dbm样式的数据库管理器,其中包含不可变的B + Trees作为存储介质(请参阅http://sf.net/projects/aodbm/)。是否存在用于合并两个B +树的快速算法(树可能共享节点)?
答案 0 :(得分:1)
这是欧米茄(n)问题。
证据:假设它具有更好的复杂度O(d)和d < ñ。您可以将B +树排列为数组,然后合并这两棵树将合并两个数组。如果是这样,你可以在O(d)中进行合并(A1,A2),并且使用mergesort可以是O(dlog(n)) - 矛盾。
一个O(n)解决方案(实际上它当然是theta(n)):
1.flat T1和T2分为排序数组A1,A2。
2.使用A&lt; - 合并(A1,A2)
3。用| T1 | + | T2 |构建一个空的“几乎完整”的树T. “地方”。
4。用A填写T(按顺序搜索)
5。结果是T.
复杂性:
步骤1是O(n)(按顺序搜索)
第2步是O(n)合并的复杂性(因为A1,A2都是有序的)
步骤3 + 4也简单地为O(n)