Skip to content

2017年 408 数据结构 第 9 题

数据结构2017年选择题2分

题目

下列应用中,适合使用 B+ 树的是( )。

错因

A

只记住"B+ 树是一种高效查找结构",看到"词法分析"也涉及"查找关键字"就误选。但词法分析的关键字集很小且固定(一般几十个),且都在内存里,用 哈希表或自动机(如 trie / DFA)即可,用不上 B+ 树这种磁盘多路平衡树——B+ 树的优势在于"减少磁盘 I/O 次数",对内存里的小数据集是过度设计。

C

路由表查找的核心是 最长前缀匹配(longest prefix match),主流方案是 trie / 压缩 trie / TCAM 硬件。B+ 树支持"等值查找"和"范围查找",不支持最长前缀匹配语义,应用场景不对口。

D

磁盘空闲块管理需要"快速找到空闲块、合并相邻空闲块",主流方案是位示图 / 空闲链表 / 成组链接——这些数据结构操作的粒度很细(按 bit 或按链节点),用 B+ 树会引入额外索引开销,得不偿失。

总解析

核心:B+ 树的设计目标是"减少磁盘 I/O"——节点容量大(一个节点对应一个磁盘块),高度低(几亿条记录通常 3-4 层),叶子节点用链表串联便于范围扫描。

四个候选场景的本质需求逐项对照:

场景核心需求主流数据结构是否 B+ 树
词法分析内存里小关键字集查找哈希表 / DFA / Trie
数据库索引海量数据按键查找 + 范围扫描,主存储在磁盘B+ 树
路由表最长前缀匹配Trie / TCAM
磁盘空闲块快速分配 / 合并位示图 / 成组链接

为什么数据库索引偏爱 B+ 树(而非 BST、AVL 或 B 树):

  • 数据量大、不能全装内存 → 需要磁盘友好的存储结构
  • 节点宽(fan-out 高)→ 树高低 → 一次查找只需 3-4 次磁盘 I/O
  • 数据全部存放在叶子节点 + 叶子按键链接 → 范围查询(BETWEENORDER BY)只需一次 I/O 定位起点,再顺链遍历,比 B 树更快
  • 内部节点只存键不存数据 → 同等内存可缓存更多索引项,进一步降低 I/O

最终答案是 B

数据结构与场景的匹配口诀:内存小数据集用哈希;最长前缀匹配用 trie;位级分配用位图;磁盘上的海量索引才用 B+ 树

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数