我正在阅读论文,使 B+-trees 缓存在主内存中具有意识。在第 3.1.2 节中,作者描述了几种在 CSB+ 树节点中搜索的方法。
基本方法是使用传统的 while 循环简单地进行二进制搜索。
统一的方法是通过代码扩展,将 while 循环展开为if-then-else
语句,假设所有键都已使用。
作者给出了以下示例,该示例展示了对具有多达 9 个键的节点的搜索展开。节点中的数字表示if
测试中使用的键的位置
4
/ \
2 6
/ \ / \
1 3 5 8
/ \
7 9
然后是令人困惑的部分:
如果实际只存在 5 个键,我们可以用恰好3次比较遍历这棵树。另一方面,将最深的子树放在左侧而不是右侧的展开将需要在某些分支上进行4 次比较。
那么为什么需要在以下树中进行更多比较:
6
/ \
4 8
/ \ / \
2 5 7 9
/ \
1 3
此外,
如果我们知道我们只有五个有效键,我们可以硬编码一棵平均使用2.67次比较而不是 3 次比较的树。
2.67是怎么来的?
任何提示将不胜感激。此外,将我指向代码扩展知识的链接会很有帮助。
实际上,我不确定在论文上提出问题是否合适,因为在此处转录时可能遗漏了一些关键信息(问题可能需要重新格式化)。我只是希望有人碰巧读过这篇论文。
谢谢