【发布时间】:2012-09-06 02:33:41
【问题描述】:
我正在阅读报纸,making B+-trees cache conscious in main memory。在第 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是如何产生的?
任何提示将不胜感激。此外,将我指向代码扩展知识的链接会有所帮助。
实际上,我不确定在论文上提出问题是否合适,因为在此处转录时可能遗漏了一些关键信息(问题可能需要重新格式化)。我只是希望有人碰巧读过这篇论文。
谢谢
【问题讨论】:
标签: data-structures b-tree search-tree