数据结构_查找原理与典型查找算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关键字比较的符号约定 EQ(a,b) LT(a,b) LQ(a,b)
查找的基本概念
6.查找的基本方法
顺序查找法
比较式查找法
基于线性表的查找法 (静态查找)
折半查找法 分块查找法 二叉排序树
基于树的查找法 (动态查找)
wenku.baidu.com平衡二叉树 B-树
B+树
计算式查找法 ——HASH查找法
9.1 静态查找表
静态查找表主要有三种结构:
(n 1)
i 1
2n i1
2n i1
3 (n 1) 4
9.1.1 顺序查找法
顺序查找法的特点:
优点:算法简单、适用面广(对顺序结构或链表结构均 适用)
缺点: ASL 太大,时间效率太低。
9.1.1 顺序查找法
思考题:
问:对单链表结构如何线性查找? 答:从头指针始 “顺藤摸瓜”。
问:对非线性(树结构)如何顺序查找? 答:借助各种二叉树遍历操作!
顺序表 有序顺序表 索引顺序表
针对静态查找表的查找算法主要有:
顺序查找(线性查找) 折半查找(二分查找) 分块查找(索引顺序查找)
9.1.1 顺序查找法
1.顺序表上的顺序查找的基本思想
从顺序表的一端开始,用给定数据元素的关键字逐个与 顺序表中各数据元素的关键字比较, 若在顺序表中查找到要查找的数据元素,则查找成功, 函数返回该数据元素在顺序表中的位置; 否则查找失败,函数返回0。
1 2 3 4 5 6 7 8 9 10 11 5 13 19 21 37 56 64 75 80 88 92
ST.elem[mid].key>21
5 13 19 21 37 56 64 75 80 88 92
ST.elem[mid].key<21
5 13 19 21 37 56 64 75 80 88 92
查找的基本概念
3.查找表的分类
静态查找表 动态查找表
4.衡量查找算法效率的标准
平均查找长度ASL (Average Search Length) 查找成功时的平均查找长度
n
ASL
pi ci
i 1
n
pi 1
i 1
查找的基本概念
5.本章数据元素类型与比较运算的符号约定
数据类型定义 typedef struct { KeyType key; …… }ElemType
5 13 19 21 37 56 64 75 80 88 92
ST.elem[mid].key>85
5 13 19 21 37 56 64 75 80 88 92
失败
9.1.2 有序表的查找
算法描述 int Search_Bin(SSTable ST,KeyType key){
low=1;high=ST.length; while (low<=high){
2.顺序表的机内存储结构
typedef struct{ ElemType *elem; int length;
}SSTable;
9.1.1 顺序查找法
顺序查找过程 x a1 a2 a3 …… an-2 an-1 an
int Search_Seq(SSTable ST,KeyType key){ ST.elem[0].key=key; for (i=ST.length;!EQ(ST.elem[i].key,key);- -i); return i;
CH9
查找的基本概念 9.1 静态查找表
9.1.1 顺序查找 9.1.2 有序表的查找 9.1.3 索引顺序表的查找
9.2 动态查找表
9.2.1 二叉排序树和平衡二叉树 9.2.2 B-和B+树
9.3 哈希表
查找的基本概念
1.查找表 2.查找
关键字 主关键字 次关键字
查找:根据某个给定的值,在表中确定一个其关键字等 于给定值 的记录或数据元素。 查找成功 查找失败
9.1.2 有序表的查找
有序顺序表上的查找算法
(1)顺序查找法 有序顺序表上顺序查找算法类同顺序表上的顺序查找 算法
(2)二分查找法(又称折半查找法) 前提条件: • 1)表中的记录按关键字有序(设递增有序) • 2)查找表采用顺序存储结构 查找过程
折半查找过程示例
1) 查找关键字等于21的记录
mid=(low+high)/2; if EQ(key,ST.elem[mid].key) return mid; else if LT(key,ST.elem[mid].key) high=mid-1;
else low=mid+1; } return 0; }
9.1.2 有序表的查找
思考题:
1.若表中的记录按关键字递减有序,如何完成折半查找? 2.能否使用单链表结构进行折半查找?
无法实现!因全部元素的定位只能从头指针head开 始,是一种非随机存取结构。
3.对非线性(树)结构如何进行折半查找? 可借助二叉排序树来查找(属动态查找表形式)。
9.1.2 有序表的查找
折半查找过程可以描述为一棵二叉树
折半查找的判定树 如:(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)
}
9.1.1 顺序查找法
3.顺序查找操作的性能分析 (设n=ST.length)
(1)查找成功时的平均查找长度
xi查找成功的比较次数为n-i+1(1≤i≤n)
等概率情况下查找成功的平均查找长度:
ASLsucc n pi ci n 1 (n i 1) n 1
i1
i1 n
2
9.1.1 顺序查找法
ST.elem[mid].key=21(查找成功)
2) 查找关键字等于85的记录
1 2 3 4 5 6 7 8 9 10 11 5 13 19 21 37 56 64 75 80 88 92
ST.elem[mid].key<85
5 13 19 21 37 56 64 75 80 88 92
ST.elem[mid].key<85
(2)任意关键字查找不成功的比较次数为n+1 (3)当查找不成功的情形不能忽视时,需要计算查找
不成功的平均查找长度,则 :
平均查找长度=查找成功的平均查找长度+查找成功 的平均查找长度
假设查找成功和查找不成功的可能性相同,对每个查 找概率也相等
n
1n
1n
ASL pi ci
(n i 1)
相关文档
最新文档