算法与数据结构-查找PPT课件
合集下载
大学数据结构课件--第9章 查找
——这种既查找又插入的过程称为动态查找。
二叉排序树既有类似于折半查找的特性,又采用了链表存储,它是动态 查找表的一种适宜表示。
注:若数据元素的输入顺序不同,则得到的二叉排序树形态 也不同!
17
二、二叉树的插入和删除操作
1、二叉排序树的插入和查找操作
例:输入待查找的关键字序列=(45,24,53,12,90)
折半查找举例:
已知如下11个元素的有序表:
(05 13 19 21 37 56 64 75 80 88 92), 请查找关键字为21和85的数据元素。
Low指向待查元 素所在区间的下 界
mid指向待查元素所在 high指向待查元素所
区间的中间位置
在区间的上界
8
9.1.2 折半查找(又称二分查找或对分查找)
balance。这样,可以得到AVL树的其它性质:
❖ 任一结点的平衡因子只能取:-1、0 或 1;如果树中任 意一个结点的平衡因子的绝对值大于1,则这棵二叉树 就失去平衡,不再是AVL树;
24
三、平衡二叉树
例:判断下列二叉树是否AVL树?
-1
1
-1
0
0
1
0
(a) 平衡树
2
-1
0
0
1
0
(b) 不是平衡树
(1)p为叶子结点,只需修改p双亲f的指针f->lchild=NULL或 f->rchild=NULL
(2)P只有左子树或右子树 ❖ P只有左子树,用P的左孩子代替P ❖ P只有右子树,用P的右孩子代替P
(3)P左、右子树均非空 (P左子树的根C的右子树分支找到S,S的右子树为空) ❖ P的左子树成为双亲f的左子树,P的右子树成为S的右子树 ❖ S的左子树成为S的双亲Q的右子树,用S取代p; 若C无右子树,用C取代p
二叉排序树既有类似于折半查找的特性,又采用了链表存储,它是动态 查找表的一种适宜表示。
注:若数据元素的输入顺序不同,则得到的二叉排序树形态 也不同!
17
二、二叉树的插入和删除操作
1、二叉排序树的插入和查找操作
例:输入待查找的关键字序列=(45,24,53,12,90)
折半查找举例:
已知如下11个元素的有序表:
(05 13 19 21 37 56 64 75 80 88 92), 请查找关键字为21和85的数据元素。
Low指向待查元 素所在区间的下 界
mid指向待查元素所在 high指向待查元素所
区间的中间位置
在区间的上界
8
9.1.2 折半查找(又称二分查找或对分查找)
balance。这样,可以得到AVL树的其它性质:
❖ 任一结点的平衡因子只能取:-1、0 或 1;如果树中任 意一个结点的平衡因子的绝对值大于1,则这棵二叉树 就失去平衡,不再是AVL树;
24
三、平衡二叉树
例:判断下列二叉树是否AVL树?
-1
1
-1
0
0
1
0
(a) 平衡树
2
-1
0
0
1
0
(b) 不是平衡树
(1)p为叶子结点,只需修改p双亲f的指针f->lchild=NULL或 f->rchild=NULL
(2)P只有左子树或右子树 ❖ P只有左子树,用P的左孩子代替P ❖ P只有右子树,用P的右孩子代替P
(3)P左、右子树均非空 (P左子树的根C的右子树分支找到S,S的右子树为空) ❖ P的左子树成为双亲f的左子树,P的右子树成为S的右子树 ❖ S的左子树成为S的双亲Q的右子树,用S取代p; 若C无右子树,用C取代p
数据结构讲义——查找表
2018/1/2 数据结构及其算法 第8章 查找表 4
• 静态查找表(static search table):查找表 一旦建立,就不会修改,只做查找操作 • 动态查找表(dynamic search table):除了查 找操作,还支持对记录的插入、删除或修改 • 性能分析: • 1. 查找操作的时间性能:平均查找长度 (average search length, ASL)定义为不同 输入条件下、查找操作中关键字比较次数的平均值
75
80
88
92
low
mid low
mid
low
high
high mid
2018/1/2 数据结构及其算法 第8章 查找表 9
• 搜索范围每次减半,称为二分查找或折半查找 (binary search) • 算法8.2
int Search_Bin(StaticSearchTable ST, KeyType key) { int low=1, high=ST.length; while (low <= high) { mid = (low + high) / 2; if (key == ST.data[mid].key) return mid; else if (key < ST.data[mid].key) high = mid - 1; else low = mid + 1; } return 0; }
11
• 扩展的判定树(加入查找失败的“结点”) • 查找失败时的比较次数不超过树的深度
56 19 5 13 21 37 64 75 80 88 92 查找85的比较过程: 56->80->88->失败 “等概率”查找失败ASL: (4*3+8*4)/12=3.67
• 静态查找表(static search table):查找表 一旦建立,就不会修改,只做查找操作 • 动态查找表(dynamic search table):除了查 找操作,还支持对记录的插入、删除或修改 • 性能分析: • 1. 查找操作的时间性能:平均查找长度 (average search length, ASL)定义为不同 输入条件下、查找操作中关键字比较次数的平均值
75
80
88
92
low
mid low
mid
low
high
high mid
2018/1/2 数据结构及其算法 第8章 查找表 9
• 搜索范围每次减半,称为二分查找或折半查找 (binary search) • 算法8.2
int Search_Bin(StaticSearchTable ST, KeyType key) { int low=1, high=ST.length; while (low <= high) { mid = (low + high) / 2; if (key == ST.data[mid].key) return mid; else if (key < ST.data[mid].key) high = mid - 1; else low = mid + 1; } return 0; }
11
• 扩展的判定树(加入查找失败的“结点”) • 查找失败时的比较次数不超过树的深度
56 19 5 13 21 37 64 75 80 88 92 查找85的比较过程: 56->80->88->失败 “等概率”查找失败ASL: (4*3+8*4)/12=3.67
全国计算机等级考试二级_公共基础知识精品PPT课件
4.数据的运算:检索、排序、插入、删除、修改等。
14
三、线性表 线性表是最简单的、最常用的一种线性结构。 1.线性表的定义:线性表是n个元素的有限序列,它们
之间的关系可以排成一个线性序列:a1,a2,…… ,ai,…… ,an ,其中n称作表的长度,当n=0 时,称作空表。 线性表(非空线性表)必须同时满足以下3个条件: (1)有且只有一个根结点a1,它无前件。 (2)有且只有一个终端结点an,它无后件。 (3)除根结点与终端结点外,其他所有结点有且只 有一个前件,也有且只有一个后件。
线性表的定义、线性表的顺序存储结构及其插入与删除运算。
栈和队列的定义、栈和队列的顺序存储结构及其基本运算。
线性单链表、双向链表与循环链表的结构及其基本运算。
树的基本概念,二叉树的定义及其存储结构,二叉树的前序、 中序和后序遍历。
顺序查找与二分法查找算法、基本排序算法(交换类排序、选 择类排序与插入类)。
8
A.二元关系表示方法:一个数据结构可以表示为B=( D、R),其中R用二元组来表示(a、b)。 a表示前 件, b表示后件。 例如,一年四季的数据结构可以表示成: B=(D、R) D={春,夏,秋,冬} R={(春,夏),(夏,秋),(秋,冬)}
B.在图形表示方法中,用中间标有元素值的方框来表示 数据元素,称为数据结点,简称为结点;用一条有 向线段从前件结点指向后件结点(注意:有时可以 省略箭头)来表示元素之间的前后关系。
16
例:正确表示线性表(A1,A2,A3,A4)的顺序结 构是( )
二级公共基础知识
二级公共基础知识
第一章 算法与数据结构 第二章 程序设计基础 第三章 软件工程基础 第四章 数据库设计基础
2
本章要求
14
三、线性表 线性表是最简单的、最常用的一种线性结构。 1.线性表的定义:线性表是n个元素的有限序列,它们
之间的关系可以排成一个线性序列:a1,a2,…… ,ai,…… ,an ,其中n称作表的长度,当n=0 时,称作空表。 线性表(非空线性表)必须同时满足以下3个条件: (1)有且只有一个根结点a1,它无前件。 (2)有且只有一个终端结点an,它无后件。 (3)除根结点与终端结点外,其他所有结点有且只 有一个前件,也有且只有一个后件。
线性表的定义、线性表的顺序存储结构及其插入与删除运算。
栈和队列的定义、栈和队列的顺序存储结构及其基本运算。
线性单链表、双向链表与循环链表的结构及其基本运算。
树的基本概念,二叉树的定义及其存储结构,二叉树的前序、 中序和后序遍历。
顺序查找与二分法查找算法、基本排序算法(交换类排序、选 择类排序与插入类)。
8
A.二元关系表示方法:一个数据结构可以表示为B=( D、R),其中R用二元组来表示(a、b)。 a表示前 件, b表示后件。 例如,一年四季的数据结构可以表示成: B=(D、R) D={春,夏,秋,冬} R={(春,夏),(夏,秋),(秋,冬)}
B.在图形表示方法中,用中间标有元素值的方框来表示 数据元素,称为数据结点,简称为结点;用一条有 向线段从前件结点指向后件结点(注意:有时可以 省略箭头)来表示元素之间的前后关系。
16
例:正确表示线性表(A1,A2,A3,A4)的顺序结 构是( )
二级公共基础知识
二级公共基础知识
第一章 算法与数据结构 第二章 程序设计基础 第三章 软件工程基础 第四章 数据库设计基础
2
本章要求
数据结构ppt课件完整版
针对有序数据集合,每次通过中间元素将 待查找区间缩小为之前的一半,直到找到 元素或区间为空。
哈希查找
树形查找
通过哈希函数将数据映射到哈希表中,实 现快速查找。
如二叉搜索树、平衡树等,通过树形结构实 现高效查找。
排序算法分类及实现原理
插入排序
将待排序元素逐个插入到已排序序列中,直到所有元素均插入完毕。
由n(n>=0)个具有相同类型 的数据元素(结点)a1,a2,
...,an组成的有序序列。
同一性
每个元素必须是同一类型的数 据。
有序性
元素之间具有一对一的前驱和 后继关系,即除首尾元素外, 每个元素都有一个前驱和一个 后继。
可变性
线性表的长度可变,即可以插 入或删除元素。
顺序存储结构与链式存储结构比较
定义
用一段连续的存储单元依次存储线性 表的数据元素。
优点
可以随机存取表中任一元素,且存取 时间复杂度为O(1)。
顺序存储结构与链式存储结构比较
• 缺点:插入和删除操作需要移动大量元素,时间 复杂度高;需要预先分配存储空间,容易造成空 间浪费。
顺序存储结构与链式存储结构比较
定义
用一组任意的存储单元存储线性 表的数据元素(这组存储单元可 以是连续的,也可以是不连续的
查找操作
查找指定元素的位置。
遍历操作
访问线性表中的每个元素。
销毁操作
释放线性表占用的存储空间。
03
栈和队列
栈定义及特点
栈(Stack)是一种特殊的线性数据结构,其数据的存 取遵循后进先出(LIFO, Last In First Out)的原则。 栈的特点
具有记忆功能,能保存数据的状态。
栈的基本操作包括入栈(push)、出栈(pop)、查 看栈顶元素(top)等。 只能在栈顶进行数据的插入和删除操作。
查找-数据结构
平均查找长度:为确定记录在查找表中 的位置,需和给定值进行比较的关键字 个数的期望值称为查找算法在查找成功 时的平均查找长度,简称ASL。
对于含有n个记录的表,查找成功时的平 均查找长度为: n ASL PiCi i 1
其找到中表:中Pi为其查关找键表字中与第给i定个值记相录等的的概第率,i个C记i为 录时和给定值已进行过比较的关键字个数。
(1)若*p 为叶子结点,直接删除即可。
45
45
12
3
37
53
f
100
24
p
61
60
90
12
53
3
删除24
f->lchild = null; delete p;
37
100
61
60
90
78
78
(2)若*p结点只有左子树PL或只有右子树PR,此 时只要令PL或PR直接成为*f的左子树即可
f
F
f
F
p
P
p
二叉排序树的插入
基本思想:
若二叉排序树为空,则待插结点作为根结点插入 到空树中;
若待插结点的关键字值和根结点的关键字值相等, 则说明树中已有此结点,无需插入;
若待插结点的关键字值小于根结点的关键字值, 则将待插结点插入到根的左子树中;
若待插结点的关键字值大于根结点的关键字值, 则将待插结点插入到根的右子树中;
mid low
mid low
mid low
mid low
mid
mid
mid
mid
6
3
9
1
47
10
2
58
11
由此可见,二分查找过程恰好是走了一条从判 定树的根到被查结点的路径,比较的关键字个 数恰为该结点在判定树中的层数。
数据结构之查找课件PPT课件
索引表的定义
struct indexterm {
keytype key; int low, high; }; typedef struct indexterm index[MAXITEM]; 这里的keytype可以是任何相应的数据类型, 如int、float、或char等,在算法中,我们规 定keytype缺省是int类型。
int blksearch (sqlist r, index idx, int k, bn)
{
/*bn为块的个数*/
int i, j, mid, low=1, high=bn, find=0;
while (low<=high && !find)
{
➢ 顺序查找的优点是算法简单、适应面广,且 不要求表中数据有序。缺点是平均查找长度 较大,特别是当n较大时,查找效率较低, 不宜采用。
2.折半查找
➢ 折半查找又称二分查找(Birary search)。 ➢ 假设记录在查找表R[1…n]中按关键字排列有
序。首先用k与查找表中间元素的关键字比 较,。。。。。。
➢ 在实际应用问题中,每个记录一般包含 有多个数据域,查找是根据其中某一个 指定的域进行的,这个作为查找依据的 域称为关键字(key)。
➢ 顺序查找的线性表定义如下:
Typedef struct rectype {
keytype key; itemtype item1 …… }rectype;
➢ 比较结果有三种可能:
⑴ 如果r[m].key>k,说明如果存在欲查找的元素, 该元素一定在数组的前半部分,查找范围缩小了 一半,修改查找范围的的上界high=m-1,继续对 数组的前半部分进行二分查找;
数据结构与算法(共11张PPT)
(b)入队3个元素(c)出队3个元素
(b) d, e, b, g入队
利用一组连续的存储单元(一维数组)依次存放从队 在循环队列中进行出队、入队操作时,队首、队尾指
队列示意图
在非空队列里,队首指针始终指向队头元素,而队
(b) d, e, b, g入队
8
Q.rear
a5
a4
Q.front
(d)入队2个元素
a1, a2, … , an
的指修针改 和是队依列先中进元先素出的Q的变.re原化a则情r 进况行。的,如图所示。
a3
Q.front
a2
a1
首到队尾的各个元素,称为顺序队列。
(c)
d, e出队Q.front
Q.front
◆出队:首先删去front所指的元素,然后将队首指针front+1,并
◆rear所指的单元始终为空(a。)空队列
i
i, j, k入队
(e)
1
2
3
k
r
01
j5
2
front
43
i
b, g出队
(f )
r, p,
p rear
s, t入队
循环队列操作及指针变化情况
入队时尾指针向前追赶头指针,出队时头指针向前追赶尾指针 ,故队空和队满时头尾指针均相等。因此,无法通过front=rear来 判断队列“空”还是“满”。解决此问题的方法是:约定入队前,
数据结构与算法
1算法基础 2数据结构
3栈
4队列
5链表 6树和二叉树
7查找
4队列
✓队列的基本概念 ✓队列运算
✓循环队列及其运算
4队列
1.队列的基本概念
《算法与数据结构》PPT课件
• 例如,一年四个季节的顺序关系时,则“春” 是“夏”的前件(即直接前驱,下同),而 “夏”是“春”的后件(即直接后继,下同)。
精选ppt
11
1.数据的逻辑结构
• 所谓数据的逻辑结构,是指描述数据元素之间 逻辑关系的数据结构。数据的逻辑结构由某一 数据对象及该对象中所有数据成员之间的关系 (前后件关系)组成。即一个数据结构可以表 示成:
精选ppt
15
5.1.4 线性结构与非线性结构
• 空的数据结构:如果在一个数据结构中一个数 据元素都没有,则称该数据结构为空的数据结 构。
• 在一个空的数据结构中插入一个新的元素后就 变为非空的数据结构。
• 根据数据元素之间关系的不同特性,一般将数 据结构分为两大类型:线性结构与非线性结构。
精选ppt
B = (D, R) D ={春,夏,秋,冬} R ={(春,夏),(夏,秋),(秋, 冬)}
精选ppt
14
2.数据的物理结构
• 数据的物理结构:数据的逻辑结构在计算机中 的存储方式称为数据的物理结构。它包括数据 元素的存储方式和关系的存储方式。
• 一种数据的逻辑结构根据需要可以表示成多种 存储结构,常用的存储结构有顺序、链接、索 引等存储结构。采用不同的存储结构,其数据 处理的效率是不同的 。
精选ppt
7
5.1.3 数据结构
• 数据处理,是指对数据集合中的各元素以各种 方式进行操作,包括插入、删除、查找、更改 等,也包括对数据元素进行分析。
• 数据的组织方式不同,通常对它进行处理时的 效率也不同。如:对两个存放相同元素的表进 行查找时,一个表中的所有数据元素是没有规 律的,而另外一个表中的元素是经过排序的, 则对于前者用顺序查询法进行查找,后者采用 折半查询法进行查询,可见后者效率较高。
精选ppt
11
1.数据的逻辑结构
• 所谓数据的逻辑结构,是指描述数据元素之间 逻辑关系的数据结构。数据的逻辑结构由某一 数据对象及该对象中所有数据成员之间的关系 (前后件关系)组成。即一个数据结构可以表 示成:
精选ppt
15
5.1.4 线性结构与非线性结构
• 空的数据结构:如果在一个数据结构中一个数 据元素都没有,则称该数据结构为空的数据结 构。
• 在一个空的数据结构中插入一个新的元素后就 变为非空的数据结构。
• 根据数据元素之间关系的不同特性,一般将数 据结构分为两大类型:线性结构与非线性结构。
精选ppt
B = (D, R) D ={春,夏,秋,冬} R ={(春,夏),(夏,秋),(秋, 冬)}
精选ppt
14
2.数据的物理结构
• 数据的物理结构:数据的逻辑结构在计算机中 的存储方式称为数据的物理结构。它包括数据 元素的存储方式和关系的存储方式。
• 一种数据的逻辑结构根据需要可以表示成多种 存储结构,常用的存储结构有顺序、链接、索 引等存储结构。采用不同的存储结构,其数据 处理的效率是不同的 。
精选ppt
7
5.1.3 数据结构
• 数据处理,是指对数据集合中的各元素以各种 方式进行操作,包括插入、删除、查找、更改 等,也包括对数据元素进行分析。
• 数据的组织方式不同,通常对它进行处理时的 效率也不同。如:对两个存放相同元素的表进 行查找时,一个表中的所有数据元素是没有规 律的,而另外一个表中的元素是经过排序的, 则对于前者用顺序查询法进行查找,后者采用 折半查询法进行查询,可见后者效率较高。
数据结构-第9章 查找
静态查找表 对查找表的查找仅是以查询为 目的,不改动查找表中的数据。 动态查找表 在查找的过程中同时插入不存 在的记录,或删除某个已存在的记录。
查找成功 查找表中存在满足查找条件的记 录。 查找不成功 查找表中不存在满足查找条件 的记录。
内查找 整个查找过程都在内存中进行。 外查找 在查找过程中需要访问外存。 平均查找长度ASL——查找方法时效的度量 为确定记录在查找表中的位置,需和给定值 进行比较的关键字个数的期望值。 n 查找成功时的ASL计算方法: ASL pici
3. 在二叉排序树上的操作
1)查找
[例] Key=28 f 24 12 T
45
53 28 90
Key=32 T 45 24 53 12 f 28 90 32
[算法描述]
2) 插入
[算法描述]
3) 生成
查找算法
返回
BiTree SearchBST(BiTree T,KeyType key){
//在根指针T所指二叉树中递归地查找某关键字等于 //key的数据元素,若查找成功,则返回指向该数据元 //素结点的指针,否则返回空指针
图9.1 用折半查找法查找12、50的过程 其中mid=(low+high)/2,当high<low时,表 示不存在这样的子表空间,查找失败。
成功! 位 置 1 2 3 4 5 6 7 8 9 10 11
值
6 12 15 18 22 25 28 35 45 58 60
low hign mid mid hign mid low mid (a) 用折半查找法查找12的过程
[性能分析] • 空间:一个辅助空间。 • 时间: 查找成功时的平均查找长度 设表中各记录查找概率相等 n ASLs(n)= PiCi =(1+2+ ... +n)/n =(n+1)/2 i 1 [算法特点] • 算法简单,对表结构无任何要求 • n很大时查找效率较低 • 改进措施:非等概率查找时,可将查找概率高 的记录尽量排在表后部。
数据查找——二分查找课件高中信息技术浙教版(2019)选修1数据与数据结构(19张PPT)
没找到时,若中点数据偏大: key应在中点左侧
没找到时,若中点数据偏小: key应在中点右侧
if f==True: print("查找成功!第"+str(b+1)+"个数据")
else: print("没有找到!")
二分查找的程序实现
①存储待查找数据key等 ②i和j定义子数组的边界 ③确定本次查找的数据下标 ④若找到则停止循环,记录位置
key 12
0 1 2 3 4 5 6 7 8 9 10
d 6 12 15 18 22 25 28 35 46 58 60
i
j
m=(i+j)/2
key<m,所以只能在左边于有序表
key 12
0 1 2 3 4 5 6 7 8 9 10
d 6 12 15 18 22 25 28 35 46 58 60
ij
m
第4遍比较: 6 12 15 18 22 25 28 35 46 58 60
j i m
key=12;f=False d=[6,12,15,18,22,25,28,35,46,58,60]
i=0;j=len(d)-1 当存在待查找的子数组时,继续查找
本次查找的数据下标为i,j的中点
判断中点数据是否为key值: 找到记录下标;做找到标记 break
感谢大家聆听
j=m-1 else:
i=m+1 if f==True:
print("查找成功!第"+str(b+1)+"个数据") else:
print("没有找到!")
二分查找的程序实现
没找到时,若中点数据偏小: key应在中点右侧
if f==True: print("查找成功!第"+str(b+1)+"个数据")
else: print("没有找到!")
二分查找的程序实现
①存储待查找数据key等 ②i和j定义子数组的边界 ③确定本次查找的数据下标 ④若找到则停止循环,记录位置
key 12
0 1 2 3 4 5 6 7 8 9 10
d 6 12 15 18 22 25 28 35 46 58 60
i
j
m=(i+j)/2
key<m,所以只能在左边于有序表
key 12
0 1 2 3 4 5 6 7 8 9 10
d 6 12 15 18 22 25 28 35 46 58 60
ij
m
第4遍比较: 6 12 15 18 22 25 28 35 46 58 60
j i m
key=12;f=False d=[6,12,15,18,22,25,28,35,46,58,60]
i=0;j=len(d)-1 当存在待查找的子数组时,继续查找
本次查找的数据下标为i,j的中点
判断中点数据是否为key值: 找到记录下标;做找到标记 break
感谢大家聆听
j=m-1 else:
i=m+1 if f==True:
print("查找成功!第"+str(b+1)+"个数据") else:
print("没有找到!")
二分查找的程序实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
.
BUPT
[性能分析]
3 1
判定树(描述查找过程的二叉树)
6
1
< =>
2
9
4
7
10内结点
-1 2 3-4 5 6-7 8 9-10 11 h
1-2 2-3 4-5 5-6 7-8 8-9 10-11
h=log2n+1 {同完全二叉树,二叉树性质4}
成功查找时的平均查找长度(等概率):
ASLs= 1hj•2 j 1n 1 lo 2 (n g 1 ) 1 lo 2 (n g 1 ) 1
n-1 n an-1
r[n].key=K
[算法描述] int seqsearch (int *a, const int n, const int K ) {
int i = 0; a[n] = K; while (a[i] != K) i++; return i; }
3
.
BUPT
[程序设计技巧] 设置监视哨,提高算法效率。 [性能分析] ❖ 空间:一个辅助空间。 ❖ 时间:
1)选取记录ri作为根结点: h
i1
计算所有pi (lih) pi wj wj
ji1
jl
找出最小pi的对应的i; 若相邻关键字的权值大,则确定为权值大的关
nj 1
n
例:ASLS=(1*1+2*2+3*4+4*4)/11=3 不成功查找时的查找长度:h-1或h次
7
11-
外结点
.
BUPT
1. 具有12个关键字的有序表,在等概率情况下,折半查找的 平均查找长度( A)
A. 3.1
B. 4
C. 2.5
D. 5
2. 折半查找的时间复杂度为( D) A. O(n2) B. O(n) C. O(nlogn) D. O(logn)
3. 用二分(对半)查找表的元素的速度比用顺序法( D) A. 必然快 B. 必然慢 C. 相等 D. 不能确定
4.在顺序表(8,11,15,19,25,26,30,33,42,48,50)中,用二分 (折半)法查找关键码值20,需做的关键字比较次数为
__4__.
在有序表A[1..12]中,采用二分查找算法查等于A[12] 的元素,所比较的元2_。
最优查找体现的原则: 1)最先访问的结点应是访问概率最大的结点; 2)每次访问应使结点两边尚未访问的结点的被访概率 之和尽可能相等。
10
.
BUPT
[次优查找树的构造方法] ▪ PH值近似为最小 ▪ 比静态最优查找树易于构造,时间开销少
已知按关键字有(升)序的记录序列:
( rl, rl+1, ..., ri-1, ri, ri+1, ..., rh-1, rh )
8
.
8.4 静态树表的查找
BUPT
[问题出发点]
讨论有序表中各记录查找概率不等时,查找成功时
的ASLs。
123
45
关键字 15 19 36 42 67
查找概率 0.1 0.2 0.1 0.4 0.2
折半查找
高概率为根
36+3折半
15 1 42 4
42 4
19 2
67 5
19 2 67 5
15 1 36 3
8.1 基本概念与术语
BUPT
查找表 同一类型的记录(数据元素)的集合。 查找 指定某个值,在查找表中确定是否存在一个记录,该
记录的关键字等于给定值。 关键字 记录(数据元素)中的某个数据项的值。
主关键字 该关键字可以唯一地标识一个记录。 次关键字 该关键字不能唯一标识一个记录。
静态查找表 对查找表的查找仅是以查询为目的,不改动查 找表中的数据。
low
K=21
l hm 1 11 6 1 53 4 54
mid
high
=(low+high)/2
K=85 l h m
1 11 6
7 11 9
10 11 10
10 9
5
.
BUPT
[算法描述]
int binsearch ( int K, int v[ ], int n ) {
int low, high, mid; low = 1; high = n; while ( low <= high ) {
4
.
8.3 二分查找
BUPT
满足 r[i].key r[i+1].key, 0 i <n-1
仍可用顺序查找,但在找不到时不需比较到表尾,只需比较到比给定值大的记 录就可终止。
[折半(二分)查找法]
1 2 3 4 5 6 7 8 9 10 11
05 13 19 21 37 56 64 75 80 88 92
比较次数的期望值。
n
查找成功时的ASL计算方法:ASL pici
i 1
n:记录的个数
pi:查找第i个记录的概率, ( 不特别声明时认为等概率 pi =1/n )
ci:找到第i个记录所需的比较次数 约定:无特殊说明,一般默认关键字的类型为整型
2
.
8.2 顺序表的查找
BUPT
r[0..n]
01 a0 a1
1) 查找成功时的平均查找长度 设表中各记录查找概率相等
ASLs(n)=(1+2+ ... +n)/n =(n+1)/2 2)查找不成功时的平均查找长度 ASLf =n+1 [算法特点] ❖ 算法简单,对表结构无任何要求 ❖ n很大=>查找效率较低 ❖ 改进措施:非等概率查找时,可将查找概率高的记录尽量 排在表前部。
mid = ( low + high ) / 2; if ( K < v[mid] )
high = mid - 1; else if ( K > v[mid] )
low = mid + 1; else /* 找到了匹配的值*/
return mid; } return -1; /* 没有查到*/ }
6
动态查找表 在查找的过程中同时插入不存在的记录,或删 除某个已存在的记录。
查找成功 查找表中存在满足查找条件的记录。 查找不成功 查找表中不存在满足查找条件的记录。
1
.
BUPT
内查找 整个查找过程都在内存中进行。 外查找 在查找过程中需要访问外存。
平均查找长度ASL——查找方法时效的度量
为确定记录在查找表中的位置,需将关键字和给定值
ASLs=2.3
ASLs=1.8
9
.
BUPT
[静态最优查找树] 定义:查找性能最佳的判定树。 性质:带权内路径长n度之和PH为最小值。
PH= w ih i 与ASLs成正比 i1
其中n:二叉树上结点的个数(有序表长度) hi:第i个结点在二叉树上的层次数 wi=cpi:c为某个常量; pi:第i个结点的查找概率