第8章查找
第8章 查找(1)
17/62
假设所有不成功查找的情况为m种,它们的查找概率相同,即qi=0.5/m, 则不成功情况下的平均查找长度为:
合起来: 可以推出:顺序查找的时间复杂度为O(n)。
18/62
顺序查找总结 顺序查找的优点是算法简单,且对查找表的存储结构无特殊要求,无论 是用顺序表还是用链表来存放元素,也无论是元素之间是否按关键字有 序,它都同样适用。 顺序查找的缺点是查找效率低,因此,当n较大时不宜采用顺序查找。
19/62
1.折半查找算法
查找表R[0..n-1]为递增有序顺序表
简单比较方法
#顺序查找算法1
#从表头往后找 #未找到返回-1 #找到后返回其序号i
12/62
设置一个哨兵
关键字比较
def SeqSearch2(R,k): n=len(R) R.append(k) i=0 while R[i]!=k: i+=1
if i==n: return -1 else: return i
#顺序查找算法2
#末尾添加一个哨兵
#从表头往后找 #未找到返回-1 #找到后返回其序号i
说明 由于查找算法主要考虑关键字之间的比较,两个算法的效率差不多
13/62
2. 顺序查找算法分析
1)仅考虑查找成功的情况
第1个元素即R[0]=k,1次关键字比较。 第2个元素即R[1]=k,2次关键字比较。 以此类推,第n个元素即R[n-1]=k,n次关键字比较 共有n种查找成功的情况,在等概率时,pi=1/n。
6/62
查找表T:含有n个记录。
成功情况下(概率相等)的平均查找长度ASL成功是指找到T中任一记录平均 需要的关键字比较次数。
数据结构习题及答案 (1)
第八章查找一、判断题1.用二分查找法对一个顺序表进行查找,这个顺序表可以是按各键值排好序的,也可以是没有按键值排好序的。
()2.哈希表的查找不用进行关键字的比较。
()3.哈希表的定义函数H(key)=key%p(p<=m)这种方法是直接定址法。
()4.装填因子α的值越大,就越不容易发生冲突。
( )5.选择hash函数的标准为:随机性好、均匀性好和尽量避免冲突。
( )参考答案:1、×2、×3、×4、×5、√二、填空题1.顺序查找法的平均查找长度为__________,二分查找法的平均查找长度为________,分块查找法(以顺序查找确定块)的平均查找长度为__________,分块查找法(以二分查找确定块〉的平均查找长度为_________,哈希表查找法采用链接法处理冲突时的平均查找长度为_________。
(n+1)/2;((n+1)*log2(n+1))/n-1;(s2+2s+n)/2s;log2(n/s+1)+s/2;1+α2.在各种查找方法中,平均查找长度与结点个数n无关的查法方法是_________哈希表查找3.二分查找的存储结构仅限于_________,且是__________。
顺序;有序的4.在分块查找方法中,首先查找__________,然后再查找相应的___________。
索引;块5.长度为255的表,采用分块查找法,每块的最佳长度是____________。
156.在散列函数H(key)=key%p中,p应取_______________。
小于表长的最大素数7.假设在有序线性表A[1..20]上进行二分查找,则比较一次查找成功的结点数为_________,则比较二次查找成功的结点数为__________,则比较三次查找成功的结点数为_________,则比较四次查找成功的结点数为________,则比较五次查找成功的结点数为_________,平均查找长度为_________。
第8章 特征查找
第8章特征查找特征是GIS图上的各种元素的统称,如图形对象(点、线、多边形等)以及它们的基本结构(结点、弧段、标识点等)、各种符号和标注等。
特征是描述地图的最基本的数据单位。
因此我们把和GIS图有关的查找都称之为特征查找。
GIS系统中既包含空间数据,又包含和其相关联的属性数据。
我们可以通过属性数据查找宁问数据,也可以通过一个空间数据来查找另外的空间数据,还可以通过空间数据查找属件数据。
另外,我们还可以用SQL语言来加入复杂的限制条件进行查找。
在MO中可以用SearchExpression(表达式查找)、SearchByDistance(距离查找)和SearchShape〔图形查找)来实现各种复杂的查找关系。
8.1 SearchExpression(表达式查找)8.1.1SearchExpression定义SearchExpression方法是利用查找属性数据库(dbf)中的数据,实现对GIS特征的查找。
该方法定义为:Set variable = object.SearchExpression(expression)其中:Variable:记录集变量;Object:对象,一般为图层对象;Expression:以SQL语言说明的字符串表达式。
注意:(1)由于已经指定了图层,也就是指定了数据表,因此不需要前面的SELECT语句,只是后面的WHERE字句即可。
(2)表达式中的字符要用单引号,如States = …California‟。
(3)用百分号%表示多种选择,如STA TE_NAME like …M%‟。
(4)用下划线_表示位数,如STATE_NAME like …M ____‟(4个下划线),只能返回Maine州。
(6)如果要操作较大的记录集(比如100000条记录),建议采用SDE,而不是用Shapefiles。
但是SDE不支持ORDER BY语句。
8.1.2使用SearchExpression进行简单查找以下例子用表达式”STA TE_ID = 24”来查找墨西哥地图上序号为24的州,并用另外一种颜色来显示它。
数据结构讲义——查找表
• 静态查找表(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
《数据结构》填空作业题(答案)
《数据结构》填空作业题答案第1章绪论(已校对无误)1.数据结构包括数据的逻辑结构、数据的存储结构和数据的运算三方面的内容。
2.程序包括两个内容:数据结构和算法。
3. 数据结构的形式定义为:数据结构是一个二元组:Data Structure =(D,S)。
4. 数据的逻辑结构在计算机存储器内的表示,称为数据的存储结构。
5. 数据的逻辑结构可以分类为线性结构和非线性结构两大类。
6. 在图状结构中,每个结点的前驱结点数和后继结点数可以有多个。
7. 在树形结构中,数据元素之间存在一对多的关系。
8. 数据的物理结构,指数据元素在计算机中的标识(映象),也即存储结构。
9. 数据的逻辑结构包括线性结构、树形结构和图形结构3种类型,树型结构和有向图结构合称为非线性结构。
10. 顺序存储结构是把逻辑上相邻的结点存储在物理上连续的存储单元里,结点之间的逻辑关系由存储单元位置的邻接关系来体现。
11. 链式存储结构是把逻辑上相邻的结点存储在物理上任意的存储单元里,节点之间的逻辑关系由附加的指针域来体现。
12. 数据的存储结构可用4种基本的存储方法表示,它们分别是顺序存储、链式存储、索引存储和散列存储。
13. 线性结构反映结点间的逻辑关系是一对一的,非线性结构反映结点间的逻辑关系是一对多或多对多。
14. 数据结构在物理上可分为顺序存储结构和链式存储结构。
15. 我们把每种数据结构均视为抽象类型,它不但定义了数据的表示方式,还给出了处理数据的实现方法。
16. 数据元素可由若干个数据项组成。
17. 算法分析的两个主要方面是时间复杂度和空间复杂度。
18. 一个算法的时间复杂度是用该算法所消耗的时间的多少来度量的,一个算法的空间复杂度是用该算法在运行过程中所占用的存储空间的大小来度量的。
19. 算法具有如下特点:有穷性、确定性、可行性、输入、输出。
20. 对于某一类特定的问题,算法给出了解决问题的一系列操作,每一操作都有它的确切的定义,并在有穷时间内计算出结果。
数据结构-查找分析
第八章查找一、填空题1.线性有序表(a1,a2,a3,…,a256)是从小到大排列的,对一个给定的值k,用二分法检索表中与k相等的元素,在查找不成功的情况下,最多需要检索次。
设有100个结点,用二分法查找时,最大比较次数是。
2.折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找表中元素20,它将依次与表中元素比较大小。
3. 在各种查找方法中,平均查找长度与结点个数n无关的查找方法是。
4、对线性表进行二分查找时,要求线性表必须以方式存储,且结点按关键字排列。
5.顺序查找n个元素的顺序表,若查找成功,则比较关键字的次数最多为_ __次;当使用监视哨时,若查找失败,则比较关键字的次数为__ 。
6.在有序表A[1..12]中,采用二分查找算法查等于A[12]的元素,所比较的元素下标依次为____ _____。
7. 在有序表A[1..20]中,按二分查找方法进行查找,查找长度为5的元素个数是_8. 已知二叉排序树的左右子树均不为空,则_______上所有结点的值均小于它的根结点值,________上所有结点的值均大于它的根结点的值。
9、中序遍历二叉排序树得到的序列是序列(填有序或无序)。
10、从有序表(10,16,25,40,61,28,80,93)中依次二分查找40和61元素时,其查找长度分别为和。
二、单项选择题()1.在表长为n的链表中进行顺序查找,它的平均查找长度为A. ASL=n; B. ASL=(n+1)/2;C. ASL=n+1; D. ASL≈log2(n+1)-1()2.折半查找有序表(4,6,10,12,20,30,50,70,88,100)。
若查找表中元素58,则它将依次与表中比较大小,查找结果是失败。
A.20,70,30,50 B.30,88,70,50C.20,50 D.30,88,50()3.对22个记录的有序表作折半查找,当查找失败时,至少需要比较次关键字。
数据结构之查找课件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,继续对 数组的前半部分进行二分查找;
第八章查找——精选推荐
查找一.选择题1.若查找每个元素的概率相等,则在长度为n 的顺序表上查找到表中任一元素的平均查找长度为_____________。
A. nB. n+1C. (n-1)/2D. (n+1)/2分析:本题主要考查顺序表的平均查长度的计算,在等概率下,ASLsucc=nP1+(n-1)P2+……+2Pn-1 +Pn=[n+(n-1)+ ……+1]/n = (n+1)/2,其中:Pi 为查找第i 个元素的概率。
所以答案为D。
2.折半查找的时间复杂度_____________。
A.O(n*n)B.O(n)C. O(nlog2n)D. O(log2n)分析:本题考查折半查找的基本思想和对应的判定树。
因为对n 个结点的线性表进行折半查找,对应的判定树的深度是 log2n +1,折半查找的过程就是走了一条从判定树的根到末端结点的路径,所以答案为D。
3.采用分块查找时,数据的组织方式为_____________。
A. 把数据分成若干块,每块内数据有序B. 把数据分成若干块,块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引表C. 把数据分成若干块,每块内数据有序,每块内最大(或最小)的数据组成索引表D. 把数据分成若干块,每块(除最后一块外)中的数据个数相等分析:本题主要考查分块查找的数据组织方式特点。
在分块查找时,要求块间有序,块内或者有序或者无序。
这样,在查找记录所在的块时,可以采用折半查找。
所以答案为B。
4.二叉排序树的查找效率与二叉排序树的(1)有关,当(2)时,查找效率最低,其查找长度为n。
(1) A.高度B.结点的个数C.形状D.结点的位置(2) A.结点太多B.完全二叉树C.呈单叉树D.结点的结构太复杂分析:本题主要考查二叉排序树的查找效率与二叉排序树形存在一定的关系。
当二叉排序树的前 log2n 层是满二叉树时,其查找效率最高,其查找长度最大为 log2n +1;当二叉排序树呈单叉树时,其查找效率最低,其查找长度最大为n,此时相当于顺序查找。
数据结构第8章 查找 答案
第8章 查找 测试题 及答案一、填空题1. 在数据的存放无规律而言的线性表中进行检索的最佳方法是 顺序查找(线性查找) 。
2. 线性有序表(a 1,a 2,a 3,…,a 256)是从小到大排列的,对一个给定的值k ,用二分法检索表中与k 相等的元素,在查找不成功的情况下,最多需要检索 8 次。
设有100个结点,用二分法查找时,最大比较次数是 7 。
3. 假设在有序线性表a[20]上进行折半查找,则比较一次查找成功的结点数为1;比较两次查找成功的结点数为 2 ;比较四次查找成功的结点数为 8 ;平均查找长度为 3.7 。
解:显然,平均查找长度=O (log 2n )<5次(25)。
但具体是多少次,则不应当按照公式)1(log 12++=n nn ASL 来计算(即(21×log 221)/20=4.6次并不正确!)。
因为这是在假设n =2m -1的情况下推导出来的公式。
应当用穷举法罗列:全部元素的查找次数为=(1+2×2+4×3+8×4+5×5)=74; ASL =74/20=3.7 !!!4.【计研题2000】折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找表中元素20,它将依次与表中元素 28,6,12,20 比较大小。
5. 在各种查找方法中,平均查找长度与结点个数n 无关的查找方法是 散列查找 。
6. 散列法存储的基本思想是由 关键字的值 决定数据的存储地址。
7. 有一个表长为m 的散列表,初始状态为空,现将n (n<m )个不同的关键码插入到散列表中,解决冲突的方法是用线性探测法。
如果这n 个关键码的散列地址都相同,则探测的总次数是 n(n-1)/2=( 1+2+…+n-1) 。
(而任一元素查找次数 ≤n-1)二、单项选择题( B )1.在表长为n的链表中进行线性查找,它的平均查找长度为A. ASL=n; B. ASL=(n+1)/2;C. ASL=n +1; D. ASL≈log2(n+1)-1( A )2.折半查找有序表(4,6,10,12,20,30,50,70,88,100)。
数据结构考试题库含答案
数据构造习题集含答案目录目录1选择题2第一章绪论2第二章线性表4第三章栈和队列6第四章串7第五章数组和广义表8第六章树和二叉树8第七章图11第八章查找13第九章排序14简答题19第一章绪论19第二章线性表22第三章栈和队列24第四章串26第五章数组和广义表27第六章树和二叉树28第七章图31第八章查找31第九章排序32编程题34第一章绪论34第二章线性表34第三章栈和队列45第四章串45第五章数组和广义表45第六章树和二叉树45第七章图45第八章查找45第九章排序50选择题第一章绪论1.数据构造这门学科是针对什么问题而产生的?〔A 〕A、针对非数值计算的程序设计问题B、针对数值计算的程序设计问题C、数值计算与非数值计算的问题都针对D、两者都不针对2.数据构造这门学科的研究容下面选项最准确的是〔D 〕A、研究数据对象和数据之间的关系B、研究数据对象C、研究数据对象和数据的操作D、研究数据对象、数据之间的关系和操作3.*班级的学生成绩表中查得三同学的各科成绩记录,其中数据构造考了90分,则下面关于数据对象、数据元素、数据项描述正确的选项是〔C 〕A、*班级的学生成绩表是数据元素,90分是数据项B、*班级的学生成绩表是数据对象,90分是数据元素C、*班级的学生成绩表是数据对象,90分是数据项D、*班级的学生成绩表是数据元素,90分是数据元素4.*数据构造是指〔A 〕。
A、数据元素的组织形式B、数据类型C、数据存储构造D、数据定义5.数据在计算机存储器表示时,物理地址与逻辑地址不一样,称之为〔C 〕。
A、存储构造B、逻辑构造C、链式存储构造D、顺序存储构造6.算法分析的目的是〔C 〕A、找出数据的合理性B、研究算法中的输入和输出关系C、分析算法效率以求改良D、分析算法的易懂性和文档型性7.算法分析的主要方法〔A 〕。
A、空间复杂度和时间复杂度B、正确性和简明性C、可读性和文档性D、数据复杂性和程序复杂性8.计算机部处理的根本单元是〔B 〕A、数据B、数据元素C、数据项D、数据库9.数据在计算机有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要〔B 〕。
第八章 查找
B.折半查找方法适用于按值有序的顺序表的查找
C.折半查找方法适用于按关键字值大小有序排列的顺序文件的查找
D.折半查找方法适用于排序连续顺序文件的查找
(5)在有序表(k1,k2,...,k9,)中采用折半查找方法查找99次,其中,至少有一个元素被比较了99次,该元素是--。
A.参加比较的关键字值的多少
B.被查找的关键字值在关键字序列中的位置
C.关键字序列中是否存在被查找关键字值
D.关键字值的平均比较次数的多少
(2)顺序查找方法的优点之一是- 。 ·
A.对于被查找对象几乎没有限制 B.适合排序连续顺序文件的查找
(1)按该线性表中元素的顺序构造出一棵二叉排序树;
(2)若每个元素的查找概率均等,查找此二叉排序树中任意一个结点的平均查找长度ASL是多少?
(3)若对线性表的元素按字典顺序从小到大排列以后,再用折半查找方法,则查找其中任意一个元素的平均查找长度ASL是多少?
(4)画出相应的平衡二叉树。
A.K99 B.k50 C.K49 D.k1
(6)为了实现分块查找,线性表必须采用--结构。
A.顺序存储 B.链式存储
C.索引存储 D.散列存储
(7)只能在顺序存储结构上才能实现的查找方法是 法。
A.顺序查找 B.树型查找
(11)索引文件包括--和--两个部分。
(12)索引表的特点是--,并且--。
(13)在索引文件中查找一个记录的过程是先查--,然后--。
(14)具有144项的表分成--块最好,若每块的最佳长度为8,则平均查找长度为--
(15)在3阶B-树上,每个分支结点包含的子树的数目最多为--,最少为--。
第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
李春葆《数据结构教程》(C++语言描述)配套题库【课后习题】(查 找)
4 / 14
圣才电子书
【答案】B
十万种考研考证电子书、题库视频学习平台
【解析】与(8)同理可知答案为 B 项。
(10)在一棵 rn-阶 B 树中,有 k 个孩子结点的非叶子结点恰好包含______关键字。 A.k+1 B.k C.k-1 D.m/2 【答案】C 【解析】按照 B-树的定义可知,有 k 个孩子结点的非叶子节点应该有 k-1 个关键字, 答案为 C 项。
大高度应为 log2 (2047 1) 1 12 ,答案为 B 项。
(13)在以下查找方法中,查找效率与记录个数 n 无直接关系的是______。 A.顺序查找 B.折半查找 C.哈希查找 D.二叉排序树查找 【答案】C 【解析】哈希查找时的平均查找长度不是元素个数 n 的函数,而是装填因子 a 的函数。 因此答案应为 C 项。
(2)在对线性表进行折半查找时,要求线性表必须______。 A.以顺序方式存储 B.以链接方式存储 C.以顺序方式存储,且结点按关键字有序排序 D.以链表方式存储,且结点按关键字有序排序 【答案】C 【解析】对线性表进行折半查找时要求线性表必须以顺序方式存储,且结点按关键字有
1 / 14
圣才电子书 十万种考研考证电子书、题库视频学习平台
(7)一棵二叉排序树是由关键字集合{18,43,27,44,36,39}构建的,其中序遍 历序列是______。
3 / 14
圣才电子书 十万种考研考证电子书、题库视频学习平台
A.树形未定,无法确定 B.18,43,27,77,44,36,39 C.18,27,36,39,43,44,77 D.77,44,43,39,36,27,18 【答案】C 【解析】二叉排序树的中序遍历即为有序递增序列,因此答案应为 C 项。
《数据结构》填空作业题(答案)
《数据结构》填空作业题答案第1章绪论(已校对无误)1.数据结构包括数据的逻辑结构、数据的存储结构和数据的运算三方面的内容。
2.程序包括两个内容:数据结构和算法。
3。
数据结构的形式定义为:数据结构是一个二元组:Data Structure =(D,S).4. 数据的逻辑结构在计算机存储器内的表示,称为数据的存储结构。
5。
数据的逻辑结构可以分类为线性结构和非线性结构两大类。
6. 在图状结构中,每个结点的前驱结点数和后继结点数可以有多个。
7。
在树形结构中,数据元素之间存在一对多的关系。
8。
数据的物理结构,指数据元素在计算机中的标识(映象),也即存储结构.9。
数据的逻辑结构包括线性结构、树形结构和图形结构3种类型,树型结构和有向图结构合称为非线性结构。
10. 顺序存储结构是把逻辑上相邻的结点存储在物理上连续的存储单元里,结点之间的逻辑关系由存储单元位置的邻接关系来体现。
11. 链式存储结构是把逻辑上相邻的结点存储在物理上任意的存储单元里,节点之间的逻辑关系由附加的指针域来体现。
12. 数据的存储结构可用4种基本的存储方法表示,它们分别是顺序存储、链式存储、索引存储和散列存储。
13. 线性结构反映结点间的逻辑关系是一对一的,非线性结构反映结点间的逻辑关系是一对多或多对多.14. 数据结构在物理上可分为顺序存储结构和链式存储结构。
15. 我们把每种数据结构均视为抽象类型,它不但定义了数据的表示方式,还给出了处理数据的实现方法。
16。
数据元素可由若干个数据项组成。
17。
算法分析的两个主要方面是时间复杂度和空间复杂度。
18。
一个算法的时间复杂度是用该算法所消耗的时间的多少来度量的,一个算法的空间复杂度是用该算法在运行过程中所占用的存储空间的大小来度量的。
19。
算法具有如下特点:有穷性、确定性、可行性、输入、输出。
20. 对于某一类特定的问题,算法给出了解决问题的一系列操作,每一操作都有它的确切的定义,并在有穷时间内计算出结果.21. 下面程序段的时间复杂度为㏒3n 。
SQL-第08章-数据检索
▪ 注意: • ① 含通配符的字符串须用单引号引起来,单引号中的字符都 被认为是通配字符,无论是空格还是字符。
• ③ 在执行SELECT 语句时,对象所驻留的数据库不一定总是 当前数据库。若要确保总是使用正确的对象,则不论当前数
据库是如何设置的,均应使用数据库和所有者来限定对象名 称,如:JWGL.dbo.student。
• ④ 在 FROM 子句中所指定的表或视图可能有相同的列名,外 键很可能和相关主键同名。加上对象名称来限定列名可解决
9
• 列表:IN(在某个列表中)、NOT IN(不在某个列表中) • 字符串匹配:LIKE(和指定字符串匹配)、NOT LIKE
(和指定字符串不匹配) • 空值判断:IS NULL(为空)、 IS NOT NULL(不为空) • 组合条件:AND(与)、 OR(或) • 取反:NOT ▪ 要注意的是,应该避免使用否定条件,查询优化器不能识别 否定条件。 ▪ 2. 基于比较条件的WHERE子句 ▪ 使用基于比较条件的WHERE子句对表中数据进行查询,系 统在执行这种条件查询时,逐行地对表中的数据进行比较, 检查它们是否满足条件。
USE jwgl
GO SELECT * FROM student WHERE student_name LIKE '张%' SELECT * FROM student WHERE student_name LIKE '_[红,虹]%' SELECT * FROM student WHERE student_name LIKE '_[^红,虹]%' SELECT * FROM student WHERE student_name LIKE '李红b[大b]'
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第八章查找▪基本概念▪线性表的查找▪树表的查找▪散列(Hash)技术8.1 查找的基本概念查找(Searching)的定义是:给定一个关键字值K,在含有n个结点的表中找出关键字等于给定值K的结点。
若找到,则查找成功,返回该结点的信息或该结点在表中的位置;否则查找失败,返回相关的指示信息。
▪查找表的数据结构表示若在查找的同时对表做修改操作(如插入和删除等),则相应的表称之为动态查找表(Dynamic Search Table)。
否则称之为静态查找表(Static Search Table)。
若整个查找过程都在内存进行,则称之为内查找;反之,若查找过程中需要访问外存,则称之为外查找。
平均查找长度 ASL(Average Search Length)的定义为:其中:1、n是结点的个数;2、Pi是查找第i个结点的概率。
若不特别声明,认为每个结点的查找概率相等,即pl = p2…… = pn = 1/n3、ci是找到第i个结点所需进行的比较次数。
(i=1,2, ··· ,n)8.2线性表的查找▪顺序查找(Sequential Search)基本思想是:从表的一端开始,顺序扫描线性表,依次将扫描到的结点关键字和给定值K相比较。
若当前扫描到的结点关键字与K相等,则查找成功;若扫描结束后,仍未找到关键字等于K的结点,则查找失败。
基于顺序结构的顺序查找算法类型说明typedef struct{ KeyType key; /* KeyType由用户定义 */InfoType otherinfo;/* 此类型依赖于应用 */}NodeType;typedef NodeType Seqlist[n+1];/*0号单元用作监视哨*/具体算法int SeqSearch(Seqlist R,KeyType K){ /*在顺序表R[1..n]中顺序查找关键字为K的结点,成功时返回找到的结点位置,失败时返回0*/int i;R[0].key=K; /*设置监视哨*/for(i=n;R[i].key!=K;i--); /*从表后往前找*/return i; /*若i为0,表示查找失败,否则R[i]为要找的结点*/} /*SeqSearch*/▪算法分析查找成功时的顺序查找的平均查找长度:ASL= =pi =np1+(n-1)p2+…+2pn-1+pn (式8.2)在等概率情况下,pi=1/n(1≤i≤n),故成功的平均查找长度为(n+…+2+1)/n=(n+1)/2即查找成功时的平均比较次数约为表长的一半。
•顺序查找的优点算法简单,且对表的结构无任何要求,无论是用向量还是用链表来存放结点,也无论结点之间是否按关键字有序,它都同样适用。
•顺序查找的缺点查找效率低。
二分查找•二分查找又称折半查找,它是一种效率较高的查找方法。
•二分查找要求:线性表是有序表,即表中结点按关键字有序,并且要用向量作为表的存储结构。
不妨设有序表是递增有序的。
二分查找的基本思想是:(1)首先确定该区间的中点位置:(2)然后将待查的K值与R[mid].key比较:若相等,则查找成功并返回此位置,否则须确定新的查找区间,继续二分查找。
例如: key = 64的查找过程如下low指示查找区间的下界;high指示查找区间的上界;mid = (low+high)/2。
二分查找算法int BinSearch(SeqList R,KeyType K){int low=1,high=n,mid;while(low<=high){mid=(low+high)/2;//求得中间元素if(R[mid].key==K) return mid;//找到if(R[mid].key>K) //设定下次查找区间high=mid-1;elselow=mid+1;}return 0;}二分查找判定树二分查找过程可用二叉树来描述:把当前查找区间的中间位置上的结点作为根,左子表和右子表中的结点分别作为根的左子树和右子树。
由此得到的二叉树,称为描述二分查找的判定树(Decision Tree)或比较树(Comparison Tree)。
分析折半查找的平均查找长度先看一个具体的情况,假设:n=11二分查找判定树的组成•圆结点即树中的内部结点。
树中圆结点内的数字表示该结点在有序表中的位置。
•外部结点:圆结点中的所有空指针均用一个虚拟的方形结点来取代,即外部结点。
•当查找时找到外部节点时,表示查找的值没有在该有序表中。
二分查找的平均查找长度•二分查找成功时的平均查找长度为: ASLbn≈lg(n+1)-1•二分查找在查找失败时所需比较的关键字个数不超过判定树的深度,在最坏情况下查找成功的比较次数也不超过判定树的深度。
即为:二分查找的优点和缺点•虽然二分查找的效率高,但是要将表按关键字排序。
•二分查找只适用顺序存储结构。
为保持表的有序性,在顺序结构里插入和删除都必须移动大量的结点。
分块查找•分块查找表存储结构•分块查找表由"分块有序"的线性表和索引表组成。
•分块查找的基本思想:•首先查找索引表索引表是有序表,可采用二分查找或顺序查找,以确定待查的结点在哪一块。
•然后在已确定的块中进行顺序查找由于块内无序,只能用顺序查找。
索引顺序表在建立顺序表的同时,建立一个索引。
例如:顺序表算法分析•分块查找是两次查找过程。
整个查找过程的平均查找长度是两次查找的平均查找长度之和。
以二分查找来确定块,分块查找成功时的平均查找长度•ASLblk=ASLbn+ASLsq•≈log2(b+1)-1+(s+1)/2≈log2(n/s+1)+s/2以顺序查找确定块,分块查找成功时的平均查找长度•ASL’blk=(b+1)/2+(s+1)/2=(s2+2s+n)/(2s)•分块查找的优点•①在表中插入或删除一个记录时,只要找到该记录所属的块,就在该块内进行插入和删除运算。
•②因块内记录的存放是任意的,所以插入或删除比较容易,无须移动大量记录。
综合以上讨论的几种查找表的特性:可得如下结论:1)从查找性能看,最好情况能达O(logn),此时要求表有序;2)从插入和删除的性能看,最好情况能达O(1),此时要求存储结构是链表。
树表的查找一、二叉排序树(二叉查找树)二、二叉平衡树三、B - 树四、B+树五、键树一、二叉排序树(二叉查找树)1.定义2.查找算法3.插入算法4.删除算法5.查找性能的分析1.定义:二叉排序树或者是一棵空树;或者是具有如下特性的二叉树:(1)若它的左子树不空,则左子树上所有结点的值均小于根结点的值;(2)若它的右子树不空,则右子树上所有结点的值均大于根结点的值;(3)它的左、右子树也都分别是二叉排序树。
不是二叉排序树。
通常,取二叉链表作为二叉排序树的存储结构2.二叉排序树的查找算法:若二叉排序树为空,则查找不成功;否则•1)若给定值等于根结点的关键字,则查找成功;•2)若给定值小于根结点的关键字,则继续在左子树上进行查找;•3)若给定值大于根结点的关键字,则继续在右子树上进行查找。
查找关键字==50,35,90,95,从上述查找过程可见,在查找过程中,生成了一条查找路径:从根结点出发,沿着左分支或右分支逐层向下直至关键字等于给定值的结点; ——查找成功或者从根结点出发,沿着左分支或右分支逐层向下直至指针指向空树为止。
——查找不成功算法描述如下:Status SearchBST (BiTree T, KeyType kval,BiTree f, BiTree &p ) {// 在根指针 T 所指二叉排序树中递归地查找其// 关键字等于 kval 的数据元素,若查找成功,// 则返回指针 p 指向该数据元素的结点,并返回// 函数值为 TRUE; 否则表明查找不成功,返回// 指针 p 指向查找路径上访问的最后一个结点,// 并返回函数值为FALSE, 指针 f 指向当前访问// 的结点的双亲,其初始调用值为NULL… … … …}// SearchBST非递归查找3.二叉排序树的插入算法根据动态查找表的定义,“插入”操作在查找不成功时才进行;若二叉排序树为空树,则新插入的结点为新的根结点;否则,新插入的结点必为一个新的叶子结点,其插入位置由查找过程得到。
4.二叉排序树的删除算法和插入相反,删除在查找成功之后进行,并且要求在删除二叉排序树上某个结点之后,仍然保持二叉排序树的特性。
可分三种情况讨论:•(1)被删除的结点是叶子;•(2)被删除的结点只有左子树或者只有右子树;•(3)被删除的结点既有左子树,也有右子树。
(1)被删除的结点是叶子结点其双亲结点中相应指针域的值改为“空”(2)被删除的结点只有左子树或者只有右子树其双亲结点的相应指针域的值改为 “指向被删除结点的左子树或右子树”。
(3)被删除的结点既有左子树,也有右子树算法描述如下:其中删除操作过程如下所描述:// 右子树为空树则只需重接它的左子树 q = p; p = p->lchild; delete(q);// 左子树为空树只需重接它的右子树q = p; p = p->rchild; delete(q);// 左右子树均不空5.查找性能的分析对于每一棵特定的二叉排序树,均可按照平均查找长度的定义来求它的 ASL 值,显然,由值相同的 n 个关键字,构造所得的不同形态的各棵二叉排序树的平均查找长 度的值不同,甚至可能差别很大。
例如:由关键字序列 1,2,3,4,5构造而得的二叉排序树, ASL =(1+2+3+4+5)/ 5= 3由关键字序列 3,1,2,5,4构造而得的二叉排序树 ASL =(1+2+3+2+3)/ 5 = 2.2二、二叉平衡树(课后自学) 何谓“二叉平衡树”? 如何构造“二叉平衡树” 二叉平衡树的查找性能分析二叉平衡树是二叉查找树的另一种形式,其特点为:三、 B - 树 1.定义 2.查找过程 3.插入操作 4.删除操作5.查找性能的分析B-树结构的C 语言描述如下: typedef struct BTNode {int keynum; // 结点中关键字个数,结点大小 struct BTNode *parent;// 指向双亲结点的指针 KeyType key[m+1]; // 关键字(0号单元不用) struct BTNode *ptr[m+1]; // 子树指针向量 Record *recptr[m+1]; // 记录指针向量 } BTNode, *BTree; // B 树结点和B 树的类型非叶结点中的多个关键字均自小至大有序排列,即:K1< K2 < … < Kn ;• 且 Ai-1 所指子树上所有关键字均小于Ki ;Ai 所指子树上所有关键字均大于Ki ;---查找树的特性•• 树中所有叶子结点均不带信息,且在树中的同一层次上; • 根结点或为叶子结点,或至少含有两棵子树;•其余所有非叶结点均至少含有⎡m/2⎤棵子树,至多含有m棵子树;-------------平衡树的特性•2.查找过程:从根结点出发,沿指针搜索结点和在结点内进行顺序(或折半)查找两个过程交叉进行。