计算机软件及应用查找
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Data Structure
2020/6/20
Page 14
待查序列为5,13,19,21,37,56,64,75,80,88,92,查找21。
找21
ST.elem 1 2 3 4 5 6 7 8 9 10 11 5 13 19 21 37 56 64 75 80 88 92
low
mid
high
1次比较
找方法在等概率情况下查找成功时的平均查找长度。
Data Structure
2020/6/20
Page 1
重点和难点
❖ 重点:理解查找表的结构特点及其各种表示方法的特 点和适用场合。
知识点
❖ 顺序表、有序表、索引顺序表 ❖ 二叉查找树、二叉平衡树 ❖ 哈希表
Data Structure
2020/6/20
设表中每个元素的查找
概率相等 pi
1 n
则ASL
n i 1
pi ci
1 n
n
i
i 1
1 n
n(n 1) 2
n 1 2
查找不成功的平均查找长度为n+1。
Data Structure
2020/6/20
Page 12
顺序查找的缺点:
平均查找长度较大,特别是当待查找集合中元素较多 时,查找效率较低。
❖ 反之,若直至第一个记录,其关键字和给定值比较都不相等,则 表明表中没有所查记录,查找不成功。
Data Structure
2020/6/20
Page 9
顺序表的类型描述: typedef struct{
ElemType *elem; // 数据元素存储空间基址,建表 // 时按实际长度分配,0号单元留空
5 13 19 21 37 56 64 75 80 88 92 low high mid
Data Structure
2020/6/20
Page 15
找21
ST.elem 1 2 3 4 5 6 7 8 9 10 11 5 13 19 21 37 56 64 75 80 88 92
low
mid
high
2次
Data Structure
2020/6/20
Page 16
找21 ST.elem 1 2 3 4 5 6 7 8 9 10 11
Page 10
顺序查找的算法
int search_seq (SSTable ST,KeyType key) { //在顺序表ST中顺序查找关键字等于key的数据元素。 //若找到,则函数值为该元素在表中的位置;否则,为0,
ST.elem[0].key=key;
源自文库
// ST.elem[0]为监视哨
for(i= ST.length; !EQ(ST.elem[i].key,key ); --i); //从后往前找
查找过程
❖ 初始时,以整个查找表作为查找范围。 ❖ 用查找条件中给定值k与查找范围的中间位置的关键字比较; ❖ 若相等,则查找成功;否则,根据比较结果缩小查找范围;
➢ 若k<中间位置的关键字,将查找范围缩小到左子表; ➢ 若k>中间位置的关键字,将查找范围缩小到右子表; ❖ 如此反复,直到查找成功或查找范围缩小为空(即查找失败)结 束。
顺序查找的优点:
算法简单而且使用面广。
➢对表中记录的存储没有任何要求,顺序存储和链接 存储均可; ➢对表中记录的有序性也没有要求,无论记录是否按 关键码有序均可。
Data Structure
2020/6/20
Page 13
8.2.2 有序表的查找 ——折半查找
适用情况
❖ 查找表用顺序存储结构存放,且各数据元素按关键字有序(升或 降)排列。
return(i); //找不到时,i为0 } //search_seq
&& i>=0
监视哨会给系统带来什么好处? 为什么从最后一个记录开始?从第一个记录开始,不可以吗?
Data Structure
2020/6/20
Page 11
顺序表性能分析
在顺序表中进行(顺序)查找查找成功的平均查找长度为:
int length; // 表中元素个数 } SSTable;
找64
ST.elem 0 1 2 3 4 5 6 7 8 9 10 11 64 5 13 19 21 37 56 64 75 80 88 92
监视哨
i i i i i ST.length 比较次数=5
Data Structure
2020/6/20
学习目标
❖ 理解“查找表”的结构特点以及各种表示方法的适用性; ❖ 熟练掌握以顺序表或有序表表示静态查找表时的查找方法; ❖ 熟练掌握二叉查找树的构造和查找方法; ❖ 理解二叉平衡树的构造过程; ❖ 熟练掌握哈希表的构造方法,深刻理解哈希表与其它结构的表的
实质性的差别; ❖ 掌握描述查找过程的判定树的构造方法,以及按定义计算各种查
一次,一旦 visit() 失败,则操作失败。
} ADT StaticSearchTable
Data Structure
2020/6/20
Page 8
8.2.1 顺序表的查找
适用情况
❖ 查找表用顺序存储结构存放。
查找过程
❖ 从表中最后一个记录开始,逐个进行记录的关键字和给定值的比 较;
❖ 若某个记录的关键字和给定值比较相等,则查找成功,找到所查 记录;
Page 2
8.2 静态查找表
抽象数据类型静态查找表的定义
ADT StaticSearchTable { 数据对象:D是具有相同特性的数据元素的集合。每个数据元素含有类
型相同的关键字,可唯一标识数据元素。 数据关系:D中所有数据元素同属一个集合。 基本操作:
CreateTable(&ST, n); 操作结果:构造一个含 n 个数据元素的静态查找表 ST。 DestroyTable(&ST); 初始条件:静态查找表 ST 存在; 操作结果:销毁查找表 ST。
Data Structure
2020/6/20
Page 7
Search(ST, kval); 初始条件:静态查找表 ST 存在,kval 为和查找表中元素的关键字
类型相同的给定值; 操作结果:若ST中存在其关键字等于 kval 的数据元素,则函数值
为该元素的值或在表中的位置,否则为“空”。
Traverse(ST, visit()); 初始条件:静态查找表 ST 存在,visit 是对元素操作的应用函数; 操作结果:按某种次序对ST的每个元素调用函数 visit() 一次且仅