Data structures B(+;)树内部结构

Data structures B(+;)树内部结构,data-structures,Data Structures,我对b-树的总体高级工作有一个粗略的了解,但人们似乎总是忽略每个节点的内部工作 我目前的理解是,每个节点由一个键数组和一个指针数组(指向另一个节点或相关数据)组成。但是如何高效地在排序数组上执行插入呢。每次插入/删除键时,将元素上下移动不是O(n)(n表示数组的大小,而不是整个树中的元素)吗?熟悉的“插入排序数组需要O(n)”来自n表示数组大小的情况 在B(+/*/您可以命名)树中,节点是大小不变的数组,即分支因子。(节点也可以部分填充,但这不会改变此处的任何内容) 如果你的数组只有O(1)长,

我对b-树的总体高级工作有一个粗略的了解,但人们似乎总是忽略每个节点的内部工作

我目前的理解是,每个节点由一个键数组和一个指针数组(指向另一个节点或相关数据)组成。但是如何高效地在排序数组上执行插入呢。每次插入/删除键时,将元素上下移动不是O(n)(n表示数组的大小,而不是整个树中的元素)吗?

熟悉的“插入排序数组需要O(n)”来自
n
表示数组大小的情况

在B(+/*/您可以命名)树中,节点是大小不变的数组,即分支因子。(节点也可以部分填充,但这不会改变此处的任何内容)


如果你的数组只有O(1)长,很难从稀薄的空气中得到一个因子
n
,因此插入它(以及各种其他操作)就是O(1)。

我知道n指的是数组的大小,但我的观点是,在b+树中,n(每个节点中的数组大小)应该(合理地)大,不是吗,因为要将节点大小与存储的块大小相匹配?这使得它不那么琐碎,不是吗?@过锁好吧,我的观点是
n
不是这里数组的大小。节点中的数组永远不能大于某个常数,因为当您超过它时,您会分割节点。@另一种过锁方式是插入等仍然是O(n),但是您(令人困惑地)将
n
定义为常数。所以它在某些方面看起来是线性的,但在常数中线性又只是一个常数。是的,渐近地,它是常数,但这意味着原始实现的性能下降与分支因子(-1)的平方成正比。我想知道,如果我已经知道我想要一个非常高的分支因子,是否有一些方法可以围绕这个进行设计。@过锁地从磁盘加载整个页面。内存中的内部树使其速度更快。B-树主要用于提高IO的效率。在渐进情况下,使用内存中的树肯定比使用插入排序快。你说得对。例如,SQL Server在将行插入页面时执行插入排序。但它不必移动行数据。相反,它将每行2字节的小指针移动到实际的行数据。@usr是否有指向此实现的更多详细信息的链接?