文章目录
- 第六章:查找 (Searching)
-
- 核心内容总结
-
- 1. 查找的基本概念
- 2. 顺序查找 (Sequential Search) 和折半查找 (Binary Search)
- 3. 分块查找 (索引顺序查找)
- 4. B树 (B-Tree) 和 B+树 (B+Tree)
- 5. 散列表 (Hash Table) - 哈希表
- 6. 查找算法的比较与选择
- 考研备考重点与难点
- 备考建议
考研408《数据结构》第七章“查找”的详细总结,聚焦核心概念、算法原理、性能分析及考研重点难点。查找是数据处理中最常用的操作之一,本章系统介绍了各种查找技术。
第六章:查找 (Searching)
查找是在数据集合中定位满足特定条件的元素的过程。本章主要研究静态查找表(查找过程中集合基本不变)和动态查找表(查找过程中集合可能插入/删除元素)的查找技术。
核心内容总结
1. 查找的基本概念
- 查找表 (Search Table): 由同一类型的数据元素(或记录)构成的集合。
- 关键字 (Key): 数据元素中某个数据项的值,用于标识数据元素。主关键字 (Primary Key) 能唯一标识一个元素;次关键字 (Secondary Key) 可能对应多个元素。
- 查找 (Searching): 根据给定的某个值(Key),在查找表中确定一个其关键字等于给定值的元素(记录)。
- 查找成功: 表中存在满足条件的元素,返回其位置或信息。
- 查找失败: 表中不存在满足条件的元素,返回特定标识(如
NULL
或0
)。 - 平均查找长度 (Average Search Length, ASL): 衡量查找算法效率的主要指标。定义为查找成功时,需要比较关键字的平均次数。
ASL_success = Σ(Pᵢ * Cᵢ)
,其中:Pᵢ
是查找第i
个元素的概率(通常假设等概率,Pᵢ = 1/n
)。Cᵢ
是找到第i
个元素所需的关键字比较次数。n
是表中元素个数。
ASL_failure
:查找失败时,需要比较关键字的平均次数(需明确定义失败比较过程)。
2. 顺序查找 (Sequential Search) 和折半查找 (Binary Search)
- 顺序查找 (线性查找):
- 适用: 无序表或有序表(对表无要求)。
- 思想: 从表的一端开始,逐个比较记录的关键字,直到找到目标或遍历完整个表。
- 实现:
int Seq_Search(SSTable ST, KeyType key) { for (int i = 0; i < ST.length; i++) { if (ST.elem[i].key == key) return i; // 查找成功 } return -1; // 查找失败 } // 哨兵优化 (从后向前,0号位置作为哨兵存放key) int Seq_Search_Sentinel(SSTable ST, KeyType key) { ST.elem[0].key = key; // 哨兵 int i = ST.length; while (ST.elem[i].key != key) i--; return i; // i=0 表示查找失败 }
- 性能分析: