第8章 -1 (查找的基本概念)

合集下载

数据结构课件第八章查找优秀课件

数据结构课件第八章查找优秀课件

low
mid
high
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 2 3 4 5 6 7 8 9 10 11 5 13 19 21 37 56 64 75 80 88 92
查找第i个元素: n+1-i
查找失败:
n+1
iii 比较次数=5
顺序查找方法的ASL
n
对含 n个 有记录的 AS表 L , pici i1
设表中每个元 概素 率的 相 pi查 等 1n找
n
则AS L
i1
pici
1 n i ni1
1n(n1) n2
n1 2
7.2.2 折半查找
1. 折半查找的基本思想 折半查找要求查找表用顺序存储结构存放且各数 据元素按关键字有序(升序或降序)排列,也就是说 折半查找只适用于对有序顺序表进行查找。
查找——也叫检索,是根据给定的某个值,在表中确定一 个关键字等于给定值的记录或数据元素
关键字——是数据元素中某个数据项的值,它可以标识一 个数据元素
查找方法评价
查找速度
占用存储空间多少
算法本身复杂程度
平均查找长度ASL(Average Search Length):为确定记 录在表中的位置,需和给定值进行比较的关键字的个 数的期望值叫查找算法的~
7.2 静态查找
正如本章第一节所述:静态查找是指在静态查找 表上进行的查找操作,在查找表中查找满足条件的数 据元素的存储位置或各种属性。本节将讨论以线性结 构表示的静态查找表及相应的查找算法。
7.2.1 顺序查找
1. 顺序查找的基本思想

数据结构 第8章 查找

数据结构 第8章 查找

2
5
8
11
注:判定树的形态只与表记录个数n有关,与记录的内容无关。
2013-7-28
int BinSearch(JD r[],int n,KeyType k) { int low,high,mid,found; low=1; high=n; found=0; while ((low<=high) && (found==0)) { mid=(low+high)/2; if(k>r[mid].key) low=mid+1; else if(k<r[mid].key) high=mid-1; else found=1; } if(found==1) return(mid); else return(0); }
2013-7-28
– 插入算法
例 {10, 18, 3, 8, 12, 2, 7, 3}
10
10
10
10
10
18
3
18
3 8
18
3
18
8 12
10 3 2 18 8 12 2 7 3
10 18 8 12 2 7 3 3
10 18 8 12
中序遍历二叉排序树可得到一个关键字的有序序列
2013-7-28
A[3]
A[6]
A[9]
A[12]
A[14]
A[17]
A[20]
A[4]
A[7]
A[10]
A[15]
A[18]
A[21]
2013-7-28
int BinSearch(JD r[], int low, int high, KeyType k) { int mid; if (low>hith) return -1; else { mid=(low+high)/2; if (k==r[mid].key) return mid; else if (k>r[mid].key) return (BinSearch(r,mid+1,high,k)); else return (BinSearch(r,low,mid-1,k)); } }

第八章 配位化合物

第八章 配位化合物
说明:最小的磁矩称为玻尔磁子,其值为9.27×10-24
A·m2
(3)测定 磁矩可通过磁天平测定。 • 顺磁性:被磁场吸引
• 反磁性:被磁场排斥
• 铁磁性:被磁场强烈吸引 (如 Fe , Co , Ni)
..
..
..
..
N
S
(a)无磁场
N
S
(b)磁场打开
顺磁性的说明
(4)影响因素 未成对电子数越多,磁矩越高,配合物
的磁性越大。
(5)意义
• 根据未成对电子数求磁矩; • 根据磁矩求未成对电子数; • 判断杂化方式、空间构型、配合物类型。
未成对电子数 0 1 2 3 4 5
µ计 / B.M
0 1.73 2.83 3.87 4.90 5.92
例: 测定FeF63-的µ为5.90 B.M,可判断: Fe3+有5个未成对电子;
Ag+
4d
[Ag(NH3)2]+
4d
5s
5p
NH3 NH3
5s
5p
sp杂化
2. 配位数为4的配合物的杂化方式及空间构型
(1)[NiCl4]2-:Ni 3d84s2
sp3杂化
Ni2+
Ni2+ 3d8 外轨型
四面体
3d
[NiCl4]2-
3d
4s
4p
Cl-
Cl- Cl- Cl-
4s
4p
sp3杂化
[NiCl4]2-
NH2-CH2-CH2-H2N
说明:
少数配体虽然有两个配位原子,由于两 个配位原子靠得太近,只能选择其中一 个与中心原子成键,故仍属单齿配体。
硝基NO(2 N是配位原子) 亚硝酸根ONO- (O是配位原子) 硫氰根SCN (S是配位原子) 异硫氰根NCS (N是配位原子)

第8章_查找

第8章_查找

{
int low,mid,high;
low=0;
/*确定起始区间低下界位置*/
high=n-1;
/*确定起始区间高下界位置*/
while(low<=high)
{
mid=(low+high)/2;
/*求区间范围的中间位置*/
if(a[mid].key==k) return mid;
/*比较中间位置上的关键字与给定值*/ /*查找成功,返回查找到的记录的下标*/
精选2021版课件
6
8.2.2 折半查找
一、折半查找 又称为二分查找。使用该查找算法的前提条件是:查找表
中记录顺序存储且相应的关键字值有序。
例8-1 设顺序表中有8个记录,它们的关键字依次为{8,11,18,28, 45,55,63,80},用折半查找的方法在该顺序表中查找关键字为55 和20的记录。查找关键字为55的记录的过程见图:
8.2.3 分块查找
一、分块查找
分块查找(又称为索引顺序查找),是顺序查找的一种改进方法。
在分块查找时,把表内的记录按某种属性分成n(n>1)个块(子表),且 块间有序,块内无序。然后建立一个相应的“索引表”,索引表由若 干个索引记录组成,每个索引记录对应一个块。索引记录包含两个数 据项,即对应块内最大关键字值和块中第一个记录位置的地址指针。
个关键字能确定多个记录,称该关键字为次关键字。 查找(Searching):给定一个确定的值,在查找表中确定
一个记录,其相应的关键字等于给定值的操作。
精选2021版课件
2
根据对查找表进行的不同操作,把查找表分为静态 查找表和动态查找表两种。
• 静态查找表是指只查询给定的记录是否存在于查找 表中或检索某个特定记录的有关属性。

第八章 查找

第八章 查找
例 关键字为 :0442205864,哈希地址位数为4 5864 4220 04 10088 H(key)=0088 5864 0224 04 6092 H(key)=6092
8.2.3 分块查找
查找过程:将表分成几块,块内无序,块间有序; 先确定待查记录所在块,再在块内顺序查找. 适用条件:分块有序表. 算法实现 用数组存放待查记录,每个数据元素至少含有关 键字域. 建立索引表,每个索引表结点含有块最大关键 字域和指向块第一个结点的指针.
分块查找方法图示
索引表 22 1 48 7 86 13 查38
直接定址法
构造:取关键字或关键字的某个线性函 数作哈希地址,即H(key)=key 或 H(key)=akey+b 特点 直接定址法所得地址集合与关键字集合 大小相等,不会发生冲突. 实际中能用这种哈希函数的情况很少.
数字分析法
构造:对关键字进行分析,取关键字的若干位或其组 合作为哈希地址. 适于关键字位数比哈希地址位数大,且可能出现的关 键字事先知道的情况.
关键码 THE A TO OF IN THAT AND IS 二进制形式 101000100000101 0001 1010001111 0111100110 0100101110 1010001000000011010 0 000010111000100 0100110011 抽取结果(散列函数值) (101)2=5 (001)2=1 (111)2=7 (110)2=6 (010)2=2 (100)2=4 (000)2=0 (011)2=3
对含有 n 个记录的表, 其中: p i 为查找表中第 c i 为找到表中第 ASL =

n
i =1
pici
i 个元素的概率,

8.1.18.1查找的基本概念

8.1.18.1查找的基本概念

其中:
n
ASL =i=1Pi×Ci
统计意义上的 数学期望值
n是文件记录个数;
Pi是查找第i个记录的查找概率(通常取等概率,即Pi =1/n); Ci是找到第i个记录时所经历的比较次数。
[物理意义:] 假设每一元素被查找的概率相同,则查找 每一元素所需的比较次数之总和再取平均,即为ASL。
显然,ASL值越小,时间效率越高。它用来衡量查找的效率。
有索引表
(3) 查找方法
查找方法取决于表中数据的排列方式;
针对静态查找表和动态查找表的查找方法也有所不同。
(4)评估查找方法的优劣
说明:查找的过程就是将给定的关键字K值与文件中各记录的 关键字项进行比较的过程。所以用比较次数的平均值来评估算 法的优劣。称为平均查找长度(ASL:average search length)。
8.1 基本概念
查找表:由同一类型的数据元素(或记录)构成的集合。
查 找: (在查找表中)查询(Searching)特定元素是否在表中。
若表中存在特定元素,称查找成功,应输出该记录
或者其位置;否则,称查找不成功(也应输出失败
标志或失败位置)
如“学号”ຫໍສະໝຸດ 关键字: 记录中某个数据项的值,可用来识别一个记录。
课程作业:
1、考虑如何组织数据,查找效率高;如何组织数据,方 便插入与删除操作。
5
主关键字:可以唯一标识一个记录的关键字
次关键字:识别若干记录的关键字
如“女”
分 类: 静态查找:只查找,不改变集合内的数据元素。 动态查找:既查找,又改变(增减)集合内的数据元素。
静态查找只有find()操作。 动态查找包含find()、insert()、delete()等操作。

第8章 查找

第8章 查找

72
85
88
90
11
[ 35 ↑ ↑ low mid [ 35 ↑ low
64
72
85
88
90
98
5
11
23 ] ↑ high
64
72
85
88
90
98
(b) 查找K=30的过程(三次关键字比较后查找失败)
6 3 9
1
4
7
10
•不成功:从根到叶子或度1结点
2
5
8
11
二、算法实现
(略)
三、性能分析
•最坏:不超过树高, log2(n + 1) •平均:ASL≈(n+1)/n*log2(n+1)-1 ≈log2(n+1)-1=O(log2n) 。
第8章 查找
8.1 8.2 8.3 8.4 基本概念 静态查找表 树表的查找 散列表
查找就是在数据集合中寻找满足某种条件的数据对象。
知识点结构
查找的基本概念 查找结构 查找算法的时间性能
静态表的查找技术 顺序查找 二分查找
树表的查找技术 二叉排序树
散列表的查找技术 散列的基本思想
插值查找
斐波那契查找
6 3 9
1
4
7
10
2
5
8
11

10个结点的有序表,用二分查找,成功和不成功的ASL=?
首先,建立判定树:mid=(low+high)/2
5 2 1 3 4 6 7 8 9 10
查找成功时:ASL=(1×1+2×2+3×4+4×3)/10 不成功时:ASL=(3×5+4×6)/11

数据结构 查找

数据结构 查找

生成二叉排序树过程。
10 3 2 7 8 18 12
注:二叉排序树与关键字排列顺序有关,排列顺 序不一样,得到的二叉排序树也不一样。
二叉排序树的建立的算法
反复调用二叉排序树的插入算法即可 Bitree Creat (int n) { //建立含有n个结点的二叉排序树
Bitree T= NULL;
for ( int i=1; i<=n; i++) {
else if LT(key,p->key) p->lchild=s;
else p->rchild=s
return TRUE; }
//被插结点*s为右孩子
else return FALSE;
}// Insert BST
//树中已有关键字相同的结点,不再插入
4)二叉排序树的建立
例:关键字序列{ 10、18、3、8、12、2、7、3 }
5)二叉排序树上的删除
对于二叉排序树,删去树上一个结点相当于删去有序 序列中的一个记录,在删除某个结点之后依旧要保持二叉 排序树的特性。
如何在二叉排序树上删去一个结点呢?
设在二叉排序树上被删结点为*p(指向结点的指针为 p),其双亲结点为*f,设*p是*f的左孩子。 f F p P c PR C q Q s CL S QL SL
low
( 08,
( 08,
mid
14,
14,
high
55, 68, 79,
79,
23,
23,
37,
37,
46,
46,
91 )
low
55,
mid
68,
high
91 )
low mid

西北大学:数据结构第8章 查 找

西北大学:数据结构第8章 查 找
返回主目录
基于线性表的查找法
比较式查找法 查找的基本方法:
基于树的查找法
计算式查找法-HASH(哈希)查找法
返回主目录
8.2 基于线性表的查找法
具有顺序查找法、折半查找法和分块查找法三种
8.2.1 顺序查找法 顺序查找法的特点是:用所给关键字与线性表中 各元素的关键字逐个比较,直到成功或失败。 顺序结构 存储结构: 链式结构
返回主目录
LB= 1 ∑j= b j=1
b
b+1 2
Lw= 1 ∑j= s i=1
b+s +1 2
s
s+1 2
ASLbs=LB+LW = 将b=n/s代入,得 ASLbs=
1 ( n +s) +1 2 s
返回主目录
8.3 基于树的查找法
基于树的查找法(树表查找法),是将待查表组 织成特定树的形式并在树结构上实现查找的方法 。
return(i);
}
其中l.r[0]为监视哨,可以起到防止越界的作用。
返回主目录
不设置监视哨的顺序查找算法
int SeqSearch(RecordList l, KeyType k) /*不用监视哨法,在顺序表中查找关键字等于k的元素*/ {
l.r[0].key=k; i=l.length;
while (i>=1&&l.r[i].key!=k) i--; if (i>=1) return(i)else return (0); } 循环条件i>=1判断查找是否越界。
返回主目录
生成二叉排序树的算法:
void CreateBST(BSTree *bst)
/*从键盘输入元素的值,创建相应的二叉排序树*/

查找的基本概念

查找的基本概念
章节
第八章查找
8.4哈希表
讲授主要内容
重点
难点
重点:
1.哈希表的定义
2.哈希函数的构造方法
3.处理冲突的方法
4.哈希表的查找及分析
难点:
1.哈希函数的构造方法
2.处理冲突的方法
3.哈希表的查找及分析
要求掌握知识点和分析方法
熟练掌握哈希表的定义
掌握常用哈希函数的构造方法
掌握处理冲突的方法
理解哈希表的查找及其性能分析
2.给出平衡二叉树和平衡因子的概念,理解平衡的含义
3.给出构造平衡二叉树的基本思想,介绍平衡调整的四种情况
4.介绍B-树的定义,以4阶B-树为例分析其查找过程
5.简单介绍B-树的插入、删除情况
6.对树表的查找做综合练习
作业布置
习题8
三. (教师指定) 四.(教师指定)
教学后记
教 案(理论课)
第 30 次课 2 学时
熟练掌握二分查找
掌握折半查找判定树
理解分块查找
教学设计
1.结合实例分析查找的操作,给出查找的相关基本概念:查找、关键字、静态查找、动态查找、ASL。
2.利用算法动态演示,讲解顺序查找:分析“监视哨”的设置及作用;给出算法;分析算法的优缺点及特性
3.从“顺序查找”引入“二分查找”。利用算法动态演示,讲解二分查找:分析二分查找的基本思想,举例分析查找成功和查找不成功的案例;给出算法;分析算法的优缺点及特性;强调二分查找的前提(有序的顺序表)
第 28 次课 2 学时
章节
第八章查找
8.3.1二叉排序树
讲授主要内容
二叉排序树的定义;二叉排序树的查找;二叉排序树的插入和生成;二叉排序树的删除

数据结构(三十七)查找的基本概念

数据结构(三十七)查找的基本概念

数据结构(三⼗七)查找的基本概念 ⼀、查找的基本概念 1.查找(Searching):就是在由⼀组记录组成的集合中寻找关键字值等于给定值的某个记录,或是寻找属性值符合特定条件的某些记录。

若表中存在这样⼀个记录,则称查找是成功的,此时查找的结果给出整个记录的信息,或指⽰该记录在查找表中的位置。

若表中不存在关键字等于给定值的记录,则称查找不成功,此时查找的结果可以给出⼀个“空”记录或者“空”指针。

2.查找表(Search Table):是⼀种以同⼀类型的记录构成的集合为逻辑结构,以查找为核⼼运算的数据结构。

3.关键字(Key):是数据元素中某个数据项的值,⼜称为键值,⽤它可以标识⼀个数据元素,也可以标识⼀个记录的某个数据项(字段)。

4.主关键字(Primaty Key):可以惟⼀地标识⼀个记录的关键字。

对于那些可以标识多个数据元素(或记录)的关键字,称为次关键字(Secondary Key)。

⼆、查找表的分类 1.静态查找表(Static Search Table):只作查找操作的查找表。

主要操作有:查询某个“特定的”数据元素是否在查找表中检索某个“特定的”数据元素和各种属性。

2.动态查找表(Dynamic Search Table):动态表的特点是表结构本⾝是在查找过程中动态⽣成的。

同时在查找过程中同时插⼊查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素。

主要操作有:查找时插⼊数据元素查找时删除数据元素 三、静态表和动态表的代表 静态表:顺序查找、⼆分查找、插值查找、斐波那契查找、线性索引查找 动态表:⼆叉排序树、平衡⼆叉树、B树、散列表。

查找的基本概念.ppt

查找的基本概念.ppt

2019年8月23
感谢你的观看
下面的算法描述了顺序查找过程。
顺序表的存储结构定义如下: typedef struct {

KeyType key;
/*关键字的数据类型*/

} DataType;
/*数据元素的类型*/
typedef struct {
DataType *data;/*顺序表data*/
}NodeType;
2019年8月23
感谢你的观看
【算法8.3】二叉排序树查找算法
int BST_Search (NodeType *T,KeyType key,NodeType **p,NodeType **q) {
if (T) {
*p=T;*q=NULL;
while(*p)
{ if(key>(*p)-
s->data.key=key; s->lc=NULL;s->rc=NULL; if(!p) t=s; else
{ if(key>p->data.key) p->rchild=s;
else
p->lchild=s; }
return 1;}
return 0;}
2019年8月23
感谢你的观看
例如,给定关键字序列{53,80,69,45,58, 30,88},则构造相对应的一棵二叉排序树的 过程如图8.5所示:
i1 n
2
8.2.2有序表的查找
二分法查找(Binary Search)又称为折半查 找,其基本思想是:首先取查找表中间位置上 的结点的关键字与给定值进行比较,若相等, 则查找成功;否则,如果给定值比中间位置上 的结点的关键字大,则把查找区间定为表的后 半段,反之把查找区间定为表的前半段;然后 在前半段或后半段采用同样的方法继续查找, 如此继续,直到找到关键字等于给定值的结点, 则查找成功;若出现查找区间的左右边界异常, 则查找失败。
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

③能唯一标识一个数据元素的关键字称为主关键字,而其 它关键字称为辅助关键字或从关键字。 ⑵查找就是根据给定的值,在一个表中查找出其关键字等于 给定值的数据元素: ①若表中有这样的元素,则称查找是成功的: 查找的信息为给定整个数据元素的输出或指出该元素在表 中的位置; ②若表中不存在这样的记录,则称查找是不成功的,或称查 找失败,并可给出相应的提示。 2.采用何种查找方法,首先取决于使用哪种数据结构来表示 “表”:即表中结点是按何种方式组织的。
6. 将找到给定值与关键字的比较次数的平均值来作为衡量
一个查找算法好坏的标准:
⑴对于一个含有n个元素的表,查找成功时的平均查找长
度可表示为ASL= pi ci
i 1 n
pi =1。 ①Pi为查找第i个元素的概率,且 i 1
n
②一般情形下我们认为查找每个元素的概率相等, ③Ci为查找第i个元素所用到的比较次数。
(d) 经过三次比较后的情形
[
125 ] low high
17
25
44
77
98
100
115
125 low mid
high
(e) 图 8-2
经过四次比较后的情形(high<low) 查找 K=120 的示意图 (查找不成功)
3.二分查找的性能分析: ⑴用二叉树来描述二分查找过程: 把当前查找区间的中点作为根结点,左子区间和右子区 间 分别作为根的左子树和右子树 ⑵左子区间和右子区间再按类似的方法,由此得到的二叉 树称为二分查找的判定树。 例如:图8-1给定的关键字序列: 8,17,25,44,68,77,98,100,115,125 68 ,的判定树见图8-3。
low
(a) 初始情形
high
8
17 25 44 68 [ 77 98 100 115 125 ] mid
(b)
low
high
经过一次比较后的情形
8
17
25
44
68
77
98
100
[
115
125
]
mid
(c) 经过二次比较后的情形
98 100 115 mid
②采用单链表,则只能从前往后扫描。 ③另外,顺序查找的表中元素可以是无序的。
2.顺序查找算法实现: const int n=maxn //n为表的最大长度 struct node {… elemtype key; //key为关键字 };
int seqsearch (node R[n+1],elemtype k) //在表R中查找关键字值为K的元素 { R[0].key=k; int i=n; //从表尾开始向前扫描 while(R[i].key!=k) i--; return i; }
⑴函数中查找的范围从R[n]到R[1],
⑵R[0]为监视哨,起两个作用: ①为了省去判定 while循环中下标越界的条件i≥1,从而
节省比较时间
②保存要找值的副本,若查找时,遇到它,表示查找不 成功。 ⑶若算法中不设立监视哨R[0],程序花费的时间将会增 加,这时的算法可写为下面形式。
int seqsearch(node R[n+1],elemtype k)
8.2 线性表的查找
8.2.1 顺序查找 1.顺序查找的基本思想:
⑴从表的一端开始,顺序扫描线性表,依次将扫描到的结点
关键字和待找的值K相比较:
①若相等,则查找成功, ②若整个表扫描完毕,仍末找到关键字等于K的元素, 则查找失败。 ⑵顺序查找既适用于顺序表,也适用于链表:
①顺序表查找可从前往后扫描,也可从后往前扫描
例如,设有一个学校部分教师档案表如表8-1所示,设
编号为主关键字,则该表可以用一个线性表 L=(a1,a2, a3,a4,a5,a6,a7,a8,a9,a10 )来表示,其中 ai (1≤i≤n) 表示第 i 位教师的信息(包含有编号,姓名,部门,职称), 而它的索引表可以按部门进行,也可以按职称进行, 按部门的索引表中有4个子表,分别为: 计算机系J=( a1,a2,a3,a4) 电工系 D=(a5,a6,a7) 管理系G=(a8,a9) 成教部C=(a10) 该4个子表示成一个索引表如表8-2所示。
按部门的索引表 index
J
start
0 4 7 9 1 3 2 4
length
讲师 D 副教授 G 助教 C 讲师 助教 副教授 教授 讲师 副教授
若按职称进行索引,则得到的索引表中也有 4个子表, 分别为:
Jiaosou=(a1,a8)
FuJiaosou=(a3,a7,a10)
Jiangshi=(a2,a5,a9) Zhujiao=(a4,a6) 这时的主表用顺序存贮不太方便,因相同职称的教师没 有连在一起,故用链式存储得到主表较方便。具体的存
p i ci
i 1
n
=
[
i 1
n
1 n
(n i 1)]
=
n 1 2
⑵时间复杂度为O(n)。 这就是说,查找成功的平均比 较次数约为表长的一半。 ⑶若k值不在表中,则必须进行n+1次比较之后才能确
定查找失败。
⑷另处:当n较大时,ASL值较大,查找的效率较低。
⑸顺序查找的特点:
①算法简单,对表结构无任何要求:
17 100
8
25
77
115
44
98
125
图 8-3 具有 10 个关键字序列的二分查找判定树
从图8-3 可知:
①查找根结点68,需一次查找 ②查找17和100,各需二次查找 ③查找8、25、77、115各需三次查找 ④查找44、98、125各需四次查找。
⑤结论:二叉树第K层结点的查找次数各为k次(根结点为
⑵每通过一次关键字的比较,区间的长度就缩小一半,区间的个数就增
加一倍,如此不断进行下去,直到找到关键字为K的元素;若当前的
查找区间为空(表示查找失败)。
从上述查找思想可知,每进行一次关键字比较,区间数 目增加一倍,故称为二分(区间一分为二),而区间长 度缩小一半,故也称为折半(查找的范围缩小一半)。 2.二分查找算法实现 int binsearch (node R[n+1], elemtype k) { int low=1, high=n; while (low<=high) { int mid=(low +high)/2; //取区间中点 if (R[mid].key= =k) return mid; //查找成功 else if (R[mid].key>k) high=mid-1; //在左子区间中查找 else low=mid+1; //在右子区间中查找 } return 0; //查找失败 }
表8-1 教师档案表
编号 J001 J002 J003 J004 D001 D002 D003 G001 G002 C001 姓名 赵一 钱二 张三 李四 王五 孙六 刘七 朱八 杨九 罗十 部门 计算机系 计算机系 计算机系 计算机系 电工系 电工系 电工系 管理系 管理系 成教部 职称 教授
表8-2
第1层),而第k层结点数最多为2k-1个。
假设:该二叉树的深度为h, 则二分查找的成功的平 均查找长度为(假设每个结点的查找概率相等): ASL= p c =1/n c ≤1/n(1+2﹡2+3﹡22+…+h﹡2h-1)
n
n
i 1
i i
i 1
i
①在最坏情形下,上面的不等号将会成立 ,并根据 二叉树的性质,最大的结点数n=2h-1,h=log2(n+1) ②可以得到平均查找长度: ASL=(n+1)/n log2(n+1)-1 ③ log2(n+1)-1 可以作为二分查找成功时的平均查找长度 它的时间复杂度为O(log2n) 。
②二分查找的基本思想是:首先将待查值K与有序表R[1]到R[n]的中点
mid上的关键字R[mid].key进行比较: a.若相等,则查找成功;
b.否则,若R[mid].key>k , 则在R[1]到R[mid-1]中继续查找,若有
R[mid].key<k , 则在R[mid+1]到R[n]中继续查找。
4.二分查找的优缺点: ⑴ 优点: 比较次数较顺序查找少,查找速度快, 执行效率高。 ⑵缺点: 表的存储结构只能是顺序存储,不能 是链式存储,且表中元素必须是有序的。
8.2.3 索引查找
1.索引查找的思想
⑴索引查找(分级查找): 它既是一种查找方法,又是一种存贮方法,称为索引存贮。 例如:在汉语字典中查找某个汉字时: ①若知道某个汉字读音,则可以先在音节表中查找到对应正文中的页码, 然后再在正文中所对应的页中查出待查的汉字 ②若知道该汉字的字形,但不知道读音,则可以先在部首表中根据字的部 首查找到对应检字表中的页码,再在检字表中根据字的笔画找到该汉字 所在的页码。 ③整个字典就是索引查找的对象,字典的正文是字典的主要部分,被称之 为主表,而检字表,部首表和音节表都是为了方便查找主表而建立的索 引,所以被称之为索引表。
3.为了提高查找速度,经常使用某些特殊 的数据结构来组织表。 4.研究各种查找算法时,首先必须弄清这 些算法所要求的数据结构,特别是存储 结构。 5.查找有内查找和外查找之分: ⑴ 若整个查找过程全部在内存进行,则称 这样的查找为内查找 ⑵ 若在查找过程中还需要访问外存,则称 之为外查找。我们仅介绍内查找。
④在索引查找中: 主表只有一个: 包含的是待查找的内容, 索引表可以有多个: 包含一级索引,二级索引……,所需
的级数可根据具体问题而定。
如:刚才的利用读音查找汉字为一级索引, 利用字形查找汉字为二级索引(部首表→检字表→汉字)。 我们仅讨论一级索引。
相关文档
最新文档