6第9章查找技术
九章查找Search
i 1
A S L
Pi Ci
n
其中: n 为表长,Pi 为查找表中第i个记录的概率,假设
每次查找都是成功的,则有pi=1
Ci为找到该记录时,比较过的关键字的个数, Ci = n-i+1,ASL = nP1 +(n-1)P2 +…+2Pn-1+Pn,如果要
查找的元素在表中的任何位置的概率是相等的,p=1/n ,ASL=(n+1)/2
第九章 查找(Search)
9.1 基本概念 9.2 静态查找表 9.3 动态查找表 9.4 Hash表
9.1 基本概念
如何评估查找方法的优劣?
查找的过程就是将给定的值与文件中各记录的关
键字逐项进行比较的过程。所以用比较次数的平均值
来评估算法的优劣,称为平均查找长度(ASL:
average search length)。i1
三、索引顺序表的查找(分块查找)
分块查找的数据结构:
D={d1,d2,….,dn} 1. 将n个数据元素分为s个块 B1,B2, …, Bs ; 2. 块之间有序:Bi+1中的任一元素小于Bi中的任一元
return ERROR; T->data = R[i]; // 生成结点
if (i==low) T->lchild = NULL; // 左子树空 else SecondOptimal(T->lchild, R, sw, low, i-1);
// 构造左子树 if (i==high) T->rchild = NULL; // 右子树空 else SecondOptimal(T->rchild, R, sw, i+1, high);
2024秋闽教版信息技术四年级上册教学设计
2024秋闽教版信息技术四年级上册教学设计第一单元网络信息辨真伪第1课浏览网站获知识第2课搜索引擎查信息第3课辨别信息判真伪第二单元我的电了报刊第4课文字处理初体验第5课设置格式排文章第6课混排图文美版面第7课|巧设形状调版块第8课创建表格展信息第9课巧用表格做统计综合活动1规划主题收集资料综合活动2设计版面制作报刊综合活动3展评交流完善作品第一单元网络信息辨真伪第1课浏览网站获知识一、教材分析《第1课浏览网站获知识》是闽教版信息技术四年级上册的开篇课程,主要目的是引导学生了解和掌握如何使用浏览器浏览和获取网络信息。
教材中可能包括了浏览器的基本操作,如输入网址、使用搜索引擎、浏览网页等基本技能,同时也会强调网络安全和网络素养。
二、教学目标1.知识与技能:学生能掌握浏览器的基本操作,如打开浏览器、输入网址、使用搜索功能,能浏览和获取所需信息。
2.过程与方法:通过实际操作,培养学生的自主学习能力和问题解决能力。
3.情感态度与价值观:树立正确的网络观,理解网络信息的多元性,培养良好的网络素养和信息筛选能力。
三、教学重难点教学重点:浏览器的基本操作和信息的搜索与获取。
教学难点:如何筛选和判断网络信息的准确性,以及初步的网络安全意识。
四、教学过程步骤1:导入新课-可以从日常生活中的问题开始,比如“你们是如何获取信息和知识的?”,引导学生讨论书籍、电视、互联网等信息来源,然后引出互联网是获取信息的重要方式,特别是通过浏览网站。
步骤2:介绍浏览器-讲解什么是浏览器,如“浏览器是我们访问互联网的工具”,并展示一些常见的浏览器图标,如Chrome>Firefox、Safari 等。
步骤3:演示浏览器的使用-在投影仪或大屏幕上,教师操作电脑,现场演示如何打开浏览器,输入网址,搜索信息等基本操作。
步骤4:实践操作-学生在教师的指导下,亲自操作电脑,尝试打开浏览器,访问一些适合学生的网站,如科普网站、学习网站等,以实际操作来熟悉浏览器的使用。
信息检索技术(第二版)习题答案
《信息检索技术》(第二版)书后习题及参考答案(部分)第1章绪论【综合练习】一、填空题1.文献是信息的主要载体,根据对信息的加工层次可将文献分为_________文献、__________文献、___________文献和___________文献。
2.追溯法是指利用已经掌握的文献末尾所列的__________,进行逐一地追溯查找_________的一种最简便的扩大情报来源的方法。
3.用规范化词语来表达文献信息__________的词汇叫主题词。
主题途径是按照文献信息的主题内容进行检索的途径,利用能代表文献内容的主题词、关键词、叙词、并按字顺序列实现检索。
4.计算机信息检索过程实际上是将___________与____________进行对比匹配的过程。
5.无论是手工检索还是计算机检索,都是一个经过仔细地思考并通过实践逐步完善查找方法的过程。
检索过程通常包含以下几个步骤_________、__________、__________、__________、_________。
6.检索工具按信息加工的手段可以分文__________、____________、___________。
7.《中国图书馆图书分类法》共分___________个基本部类,下分________个大类。
8.索引包括4个基本要素:索引源、___________、___________、和出处指引系统。
答案1.零次,一次,二次,三次2.参考文献,引文3.内容特征4.检索提问词,文献记录标引词5.分析课题,选择检索工具,确定检索途径及检索式,进行检索,获取原文6.手工检索工具,机械检索工具,计算机检索工具7.五,228.索引款目,编排方法二、判断题1.在检索信息时,使用逻辑符“AND”可以缩小收缩范围。
()2.逆查法是由近及远地查找,顺着时间的顺序利用检索工具进行文献信息检索的方法。
()3.按编制方法划分,信息检索工具可以分为:手工检索工具、机械检索工具、计算机检索工具。
《信息检索与利用题集及答案》
《信息资源检索与利用100题集及答案》姓名:陈晨学号:110803021101班级:11级材料一班第一章绪论1.简述科技文献检索的意义。
答:人们无论学习、工作,还是进行科学研究,都离不开文献的检与利用。
具体来说,科技文献检索具有以下六个方面的意义:(1)有利于大学生信息素养的培育;(2)有利于复合性、开拓性人才的培养;(3)有利于促进智力资源的开发利用,推动社会进步与发展;(4)有利于帮助研究人员继承和借鉴前人的成果,避免重复研究和走弯路;(5)有利于节省研究人员查找文献的时间,提高科研效率;(6)有利于为决策提供科学依据。
2.信息、知识、情报、文献的概念是什么?答:(1)信息是被反映事物属性的再现。
信息不是事物本身,而是由事物发出的消息、指令、数据等所包含的内容。
(2)知识是人类认识的成果和结晶,是人类在认识和改造世界的社会实践中获得的对事物本质的认识。
(3)情报是人们在一定时间内为一定目的而传递的具有使用价值的知识或信息。
(4)文献是各种知识或信息载体的总称。
其由知识信息内容、载体材料和记录方式三要素组成。
3.试述科技文献检索的定义及作用。
答:所谓科技文献检索,是指文献资料的查找与获得。
其作用是检索者利用检索工具按照文献编排特点,采取一定的途径、方法和步骤迅速、准确地查获自己所需要的文献资料,便于学习、工作和进行科学研究。
4.科技文献有什么特点?答:现代科技文献的发展具有以下明显特点:(1)数量急剧增长;(2)内容交叉重复;(3)文献出版分散;(4)文献失效加快;(5)文献语种增多;(6)文献载体电子化,文献传播网络化。
5.试述一、二、三次文献的概念?它们之间的关系如何?答:(1)一次文献是作者在科学研究、教学和生产实践中以自己的研究成果为依据创作而成的文献,又称一级文献或原始文献;(2)二次文献是文献情报人员将大量分散的、无序的原始文献进行筛选、整理、报道和组织所形成的文献,又称二级文献或检索性文献;(3)三级文献是利用二级文献的线索,系统地检索出一批相关文献,并对其内容进行综合、分析、研究和评述而编写出来的文献,又称三级文献或参考性文献。
数据方体的索引、查询和维护
6.1.2 位图索引
一、简单bitmap索引:
对于取值范围较小的列,例如性别,称为稀疏列。对 于稀疏列可以通过创建特殊的索引来加快在该列上的 查询速度。基本思想是对每一个列值,给它创建一个 相应的由0和1组成的序列。
区域查询。
6.1.1 树索引
二、R树索引
R树的实现原理和B树、B+树类似,通过提供所要查 找数据的一条存取道路(从根结点到某个叶结点的一 条路径)为快速查找数据记录提供了捷径,并且直接 指向包含该数据项的数据页。 R树的叶子结点包含指向数据对象的指针,格式为 (I,对象标识符)。其中I=(I1,I2,…,In)表示一个 n维的超矩形,表示数据对象在n个维上的边界。 Ii=[a,b]表示在某个维上的取值范围。非叶子结点包 含指向下一层子女结点(Child)的指针,格式为(I, 子女指针)。其中I指向一个可以覆盖下一层所有结 点的超矩形,子女指针指向下一层的结点的地址。
6.1.1 树索引
cube树是一组经过压缩的R树假设事实表R(A,B,C,Q)由 三个维属性A、B、C和一个度量属性Q组成。如果将三个 维属性分别映射到多维空间的X、Y、Z坐标轴上,则事实 表R中的每一个元组T(a,b,c,q)都可以影射为多维空间 ABC的一个点。该点的内容为q,在X、Y、Z轴上的坐标 分别为a、b、c。
6.2.1 子查询划分技术
采用了先将维层排序然后将不同的维层加以组合来形成子 查询的方法后,有的维层组合实际上在MDX语句中不存在, 所以由它们所形成的子查询是无效的。
第9章查找
high指向待查元素所 在区间的上界
(1) low =1,high =11 ,mid =6 ,待查范围是 [1,11]; (2) 若 ST.elem[mid].key < key,说明 key[ mid+1,high] , 则令:low =mid+1;重算 mid= (low+high)/2;. (3) 若 ST.elem[mid].key > key,说明key[low ,mid-1], 则令:high =mid–1;重算 mid ; (4)若 ST.elem[ mid ].key = key,说明查找成功,元素序号=mid; 结束条件: (1)查找成功 : ST.elem[mid].key = key (2)查找不成功 :high<low (意即区间长度小于0)
2013-12-24
2
2、对查找表常用的操作:
查询某个“特定的”数据元素是否在表中; 查询某个“特定的”数据元素的各种属性; 在查找表中插入一元素; 从查找表中删除一元素。
静态查找表(Static Search Table):对查找表只做 前两种“查找”操作 动态查找表(Dynamic Search Table) :对查找表 要进行后两种“查找”操作
2013-12-24
8 75 i
9 80 i
10 88 i
11 92 i
比较次数=5
6
不设置监视哨的顺序查找算法
int SeqSearch( SSTable ST, KeyType key) /*不用监视哨法,在顺序表中查找关键字等于key的元素*/ {
i=ST.length;
while (i>=1&&ST. elem[i].key!=key) i--;
数据结构九章节查找
9.3 动态查找表
二叉排序树中序遍历 中序遍历二叉排序树,可得到一个关键字的有序序列,如 5,13,19,21,37,56,64,92,75,80,88
56 13
5
37
64 92
21
80
19
75
88
中国科大《数据结构》
9-25
9.3 动态查找表
二叉排序树删除 删除二叉排序树中的一个结点后,必须保持二叉排序树的特性:
顺序查找算法 1. 从表中最后一个记录开始 2. 逐个进行记录的关键字和给定值的比较 3. 若某个记录比较相等,则查找成功 4. 若直到第1个记录都比较不等,则查找不成功
9-6
中国科大《数据结构》
9.2 静态查找表
顺序查找算法描述
int Search_Seq(SSTable ST, KeyType key) { // 若查找成功,返回位置
中国科大《数据结构》
9-19
9.3 动态查找表
动态查找表 如果应用问题涉及的数据量很大,而且数据经常发生变化,如
图书馆经常购进图书,每购进新书,需将新书记录插入图书表,对 这类表除了提供前面的介绍的查找外,还要提供动态查找功能: 1. 查找某个“特定”元素是否在表中,若不在,将该元素插入; 2. 查找某个“特定”元素是否在表中,若在,从表中删除; 如何组织动态查找表? 用静态查找方法不能满足要求了。本节介绍几种方法。
找到 21
64
92 无此数
80
19
75
88
找到
例1:在右图二叉排序树中查找关键字值等于37 例2:在右图二叉排序树中查找关键字值等于88 例3:在右图二叉排序树中查找关键字值等于94
中国科大《数据结构》
数据结构-第九章 查找
数据结构-第九章查找在计算机科学的世界里,数据结构就像是一个精心设计的仓库,用于高效地存储和管理数据。
而查找,作为数据结构中的重要一环,它的作用就如同在这个庞大的仓库中迅速找到我们需要的宝贝。
当我们面对大量的数据时,如何快速准确地找到特定的信息,这是查找要解决的核心问题。
在第九章中,我们会深入探讨几种常见的查找算法和数据结构。
首先,我们来谈谈顺序查找。
这是最简单也是最直观的查找方法。
想象一下,我们有一个长长的列表,就像一排摆放整齐的物品,要找某个特定的东西,我们只能从第一个开始,一个一个地依次检查,直到找到目标或者遍历完整个列表。
这种方法虽然简单直接,但效率并不高,特别是当数据量很大时,查找的时间会很长。
与顺序查找相对的是二分查找。
二分查找就聪明多了,它要求数据是有序的。
就好像我们知道物品是按照大小顺序摆放的,每次都可以通过比较中间的元素来判断目标在左边还是右边,然后不断缩小查找的范围。
通过这种方式,查找的效率大大提高。
比如说,在一个有 100 个元素的有序列表中,最多只需要 7 次比较就能找到目标元素。
接下来是二叉查找树。
它是一种特殊的数据结构,每个节点最多有两个子节点,左子节点的值小于父节点,右子节点的值大于父节点。
通过这种特殊的结构,我们可以快速地在树中查找目标元素。
插入和删除操作也相对方便,但要注意保持树的平衡,否则查找的效率可能会下降。
还有哈希表,这是一种非常高效的查找结构。
它通过一个哈希函数将关键字映射到一个特定的位置。
如果哈希函数设计得好,查找的时间复杂度可以接近常数级别。
但哈希表也有它的问题,比如可能会出现哈希冲突,需要通过合适的冲突解决方法来处理。
在实际应用中,选择哪种查找方法取决于具体的情况。
如果数据量较小,顺序查找可能就足够了;如果数据是有序的,二分查找是个不错的选择;如果需要频繁的插入和删除操作,二叉查找树可能更合适;而对于大规模数据且查找操作频繁的情况,哈希表往往能发挥出巨大的优势。
数据结构 C语言版(严蔚敏版)第9章 查找
若大于,查找范围的高端数据元素指针high 不变,低端数据元素指针low更新为mid+1; (4)重复步骤(2)、(3)直到查找成功或 查找范围空(low>high),即查找失败为止。 (5)如果查找成功,返回找到元素的存放位 置,即当前的中间项位置指针 mid;否则返回 查找失败标志。
折半查找的c语言算法程序: int Search_Bin( SSTable ST, int n, int key) {int low, high,mid;
查找:在数据元素集合中查找满足某种条 件的数据元素的过程称为查找。最简单且最常 用的查找条件是“关键字值等于某个给定值” ,在查找表搜索关键字等于给定值的数据元素 (或记录)。若表中存在这样的记录,则称查 找成功,此时的查找结果应给出找到记录的全 部信息或指示找到记录的存储位置;若表中不 存在关键字等于给定值的记录,则称查找不成 功,此时查找的结果可以给出一个空记录或空 指针。若按主关键字查找,查找结果是唯一的 ;若按次关键字查找,结果可能是多个记录, 即结果可能不唯一。
while(ST[i].key!=key) i- -;
return i; }
0 1 0
/*从表尾往前查*/ 找到:返回元素 的存 1 2 3 4 在线 5 性表 6 中7 10 20 40 80 储位置; 30 60 25 (a) 初态 未找到:返回0。
2 3 4 5 6 7
80
监视哨 0
10
1
20
动态查找表:若在查找过程中可以将查找 表中不存在的 数据元素插入 ,或者从查找表中 删除某个数据元素 ,则称这类查找表为动态查 找表。动态查找表在查找过程中查找表可能会 发生变化。对动态查找表进行的查找操作称为 动态查找。 关键字:是数据元素中的某个数据项。唯 一能标识数据元素(或记录)的关键字,即每 个元素的关键字值互不相同,我们称这种关键 字为主关键字;若查找表中某些元素的关键字 值相同,称这种关键字为次关键字。例如,银 行帐户中的帐号是主关键字,而姓名是次关键 字。
第7章 查找技术习题解析
查找技术-----习题解析课后习题讲解 11. 填空题⑴顺序查找技术适合于存储结构为()的线性表,而折半查找技术适用于存储结构为()的线性表,并且表中的元素必须是()。
【解答】顺序存储和链接存储,顺序存储,按关键码有序⑵设有一个已按各元素值排好序的线性表,长度为125,用折半查找与给定值相等的元素,若查找成功,则至少需要比较()次,至多需比较()次。
【解答】1,7【分析】在折半查找判定树中,查找成功的情况下,和根结点的比较次数最少,为1次,最多不超过判定树的深度。
⑷长度为20的有序表采用折半查找,共有()个元素的查找长度为3。
【解答】4【分析】在折半查找判定树中,第3层共有4个结点。
⑸假定一个数列{25,43,62,31,48,56},采用的散列函数为H(k)=k mod 7,则元素48的同义词是()。
【解答】62【分析】H(48)= H(62)=6⑹在散列技术中,处理冲突的两种主要方法是()和()。
【解答】开放定址法,拉链法⑺在各种查找方法中,平均查找长度与结点个数无关的查找方法是()。
【解答】散列查找【分析】散列表的平均查找长度是装填因子的函数,而不是记录个数n的函数。
⑻与其他方法相比,散列查找法的特点是()。
【解答】通过关键码计算记录的存储地址,并进行一定的比较2. 选择题⑴静态查找与动态查找的根本区别在于()。
A 它们的逻辑结构不一样B 施加在其上的操作不同C 所包含的数据元素的类型不一样D 存储实现不一样【解答】B【分析】静态查找不涉及插入和删除操作,而动态查找涉及插入和删除操作。
⑵有一个按元素值排好序的顺序表(长度大于2),分别用顺序查找和折半查找与给定值相等的元素,比较次数分别是s和b,在查找成功的情况下,s和b的关系是();在查找不成功的情况下,s和b的关系是()。
A s=bB s>bC s<bD 不确定【解答】D【分析】此题没有指明是平均性能。
例如,在有序表中查找最大元素,则顺序查找比折半查找快,而平均性能折半查找要优于顺序查找,查找不成功的情况也类似。
数据结构-第九章 查找
数据结构-第九章查找数据结构第九章查找在计算机科学中,数据结构是组织和存储数据的方式,以便能够高效地进行访问、操作和管理。
而查找,作为数据结构中的一个重要概念,在我们处理和分析数据的过程中起着关键作用。
查找,简单来说,就是在一组数据中寻找特定的元素。
这听起来似乎很简单,但实际上,它涉及到一系列复杂的算法和策略,以确保能够快速准确地找到我们所需的信息。
让我们先来了解一下顺序查找。
顺序查找是最简单也是最直观的查找方法。
它的基本思想就是从数据集合的开头,逐个元素地进行比较,直到找到目标元素或者遍历完整个集合。
这种方法对于小型数据集或者数据没有特定规律的情况是可行的,但效率相对较低。
想象一下,你要在一本没有索引的电话簿中查找一个人的号码,只能从头开始一个一个地翻,这就是顺序查找的过程。
与顺序查找相对的是二分查找。
二分查找要求数据集合是有序的。
它通过不断地将数据集一分为二,比较目标元素与中间元素的大小,从而缩小查找范围。
这种方法的效率比顺序查找高得多。
比如说,要在一本按照姓名拼音排序的电话簿中查找一个人,我们可以先比较中间的名字,如果目标在前面,就只在前半部分继续查找,反之则在后半部分查找,如此反复,大大提高了查找的速度。
除了上述两种常见的查找方法,还有哈希查找。
哈希查找的核心是通过一个哈希函数将元素映射到一个特定的位置。
哈希函数的设计至关重要,一个好的哈希函数能够使得元素均匀地分布在哈希表中,减少冲突的发生。
当我们要查找一个元素时,通过哈希函数计算出其可能的位置,然后进行比较。
如果哈希函数设计得不好,可能会导致大量的冲突,从而影响查找效率。
在实际应用中,选择合适的查找方法取决于多个因素。
数据的规模是一个重要的考虑因素。
如果数据量较小,顺序查找可能就足够了;但对于大规模的数据,二分查找或者哈希查找通常更合适。
数据的分布情况也会影响选择。
如果数据分布比较均匀,哈希查找可能效果较好;如果数据有序,二分查找则更具优势。
第+9+章+查找n
else return 0 ; 0 1 2 3 4 5
一次查找所需的平均
6 7 8 9 10 11
}
60 5 37 19 21 13 5时6 间6几4 乎92减少88一半80。75
优点:算法简单,适应面广。 顺序查找
缺点:平均查找长度大,不适用于表长大的查找表。
制作:计算机科学与技术系 徐振中
数据结构
typedef struct { ElemType * elem; int length; // 表长度
} SSTable;
静态查找表的顺序存储结构
制作:计算机科学与技术系 徐振中
数据结构
第九章 查找
当静态查找表用不同的方法表示时,实现查找操作的
方法也不同。
顺序表 表示静态查找表
线性链表
顺序查找
9.1.1 顺序表的查找(顺序查找)
而这样的“查询”或“检索”是任何计算机应用系统中使用频 度都很高的操作,因此设法提高查找表的查找效率,是本章讨 论问题的出发点。
可以想像的到,如果能有目标地进行查找肯定比在一大堆 事物中瞎摸要有效得多,因此为提高查找效率,一个办法就是 在构造查找表时,在集合中的数据元素之间人为地加上某种确 定的约束关系。本章正是讨论查找表的各种组织方法及其查找 过程的实施。
2、记录的查找概率无法测定时如何提高查找效率?
方法:
1)、在每个记录中设一个访问频度域;
2)、始终保持记录按非递增有序的次序排列;
3)、每次查找后均将刚查到的记录直接移至表头。
制作:计算机科学与技术系 徐振中
▲
数据结构
第九章 查找
9.1.2 有序表的查找(折半查找)
有序表表示静态查找表
折半查找
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
内部结点
外部结点
27
9.2 线性表的查找技术
折半查找性能分析
具有n个结点的折半查找判定树的深度为 log 2 n +1 。
查找成功:在表中查找任一记录的过程,即是折半查 找判定树中从根结点到该记录结点的路径,和给定值 的比较次数等于该记录结点在树中的层数。
查找不成功:查找失败的过程就是走了一条从根结 点到外部结点的路径,和给定值进行的关键码的比 较次数等于该路径上内部结点的个数。
Kn:当前检索子 集中最大值关 键字 n:记录数量
22
9.2 线性表的查找技术
斐波那契检索
基本思想:用斐波那契数列中的数分割数据集。 斐波那契数列具有一些奇妙的性质,相当一部分事 物,如果服从斐波那契数列规律,就会达到最优状态 或富有艺术魅力。 如著名的黄金分割比0.618…(即 5 - 1 / 2 )就是与其 密切相关的。 斐波那契查找方法也称为黄金分割法,其平均性能 比折半查找好,但其时间效率仍为O(long n),而且 ,在最坏情况下的时间性能比折半查找差。 23
20
9.2 线性表的查找技术
折半查找——递归算法
int BinSearch2(int r[ ], int low, int high, int k) //数组r[1] ~ r[n]存放查找集合 { if (low>high) return 0; else { mid=(low+high)/2; if (k<r[mid]) return BinSearch2(r, low, mid-1, k); else if (k>r[mid]) return BinSearch2(r, mid+1, high, k); else return mid; } } O(logn)
28
9.2 线性表的查找技术
自组织线性表
基本思想:根据实际的记录访问模式,在线性表中修 改记录的顺序。修改规则:启发式规则
【例如】假设有8条记录,其关键码值为A到H,而且初 始状态是以字母顺序排列。 现在考虑应用一下访问模式的访问结果: FDFGEGFADFGE
29
9.2 线性表的查找技术
访问模式 F D F G E G F A D F G E (1)按访问计数顺序法 初始队列 计数器 A 1 0 B 0 C 0 D 2 0 1 E 0 2 1 F 0 2 1 4 3 G 0 2 1 3 H 0
8
9.1 概述
查找算法的时间复杂度是问题规模n和待查 关键码在查找集合中的位置k的函数,记为 T(n,k)。
查找频率与算法无关,取决于具体应用。
通常假设pi是已知的。
9
9.1 概述
平均查找长度:将查找算法进行的关键码的比较次数 的数学期望值定义为平均查找长度。计算公式为: n ASL = pi ci i =1 其中:n:问题规模,查找集合中的记录个数; pi:查找第i个记录的概率; ci:查找第i个记录所需的关键码的比较次数。
4
9.1 概述
静态查找 :不涉及插入和删除操作的查找 。 动态查找 :涉及插入和删除操作的查找。
静态查找适用于:查找集合一经生成,便只对其进行 查找,而不进行插入和删除操作,或经过一段时间的 查找之后,集中地进行插入和删除等修改操作; 动态查找适用于:查找与插入和删除操作在同一个阶 段进行,例如当查找成功时,要删除查找到的记录, 当查找不成功时,要插入被查找的记录。
结论:ci取决于算法;pi与算法无关,取决于具体应 用。如果pi是已知的,则平均查找长度只是问题规模 的函数。 10
9.2 线性表的查找技术
顺序检索 (线性查找)
基本思想:从线性表的一端向另一端逐个将关键码与 给定值进行比较,若相等,则查找成功,给出该记录 在表中的位置;若整个表检测完仍未找到与给定值相 等的关键码,则查找失败,给出失败信息。
哨兵
i 查找方向
i
i
i
13
9.2 线性表的查找技术
0 1 2 3 4 5 6 7 8 9
35 10 15 24 6 12 35 40 98 55
i i i i i i i 查找方向 i i i
int SeqSearch2(int r[ ], int n, int k) { r[0]=k; i=n; while (r[i]!=k) i --; return i; } ASL= pi c i = pi ( n - i +1) = (n+1)/2=O(n) i =1
9.2 线性表的查找技术
例如:
1 2 3 4 6 3 1 2 4 5 7 8 9 10 11
折半检索判定树 26
5
6
7
8
顺序检索判定树
9.2 线性表的查找技术
带外结点的折半检索判定树
6 3 9
1
-1
1-2
4 2
3-4 2-3
4-5
7 5 6-7 8
9-10
10 11
10-11 11-
5-6 7-8 8-9
12
9.2 线性表的查找技术
改进的顺序查找
基本思想:设置“哨兵”。哨兵就是待查值,将它放 在查找方向的尽头处,免去了在查找过程中每一次比 较后都要判断查找位置是否越界,从而提高查找速度 。 例:查找k=35 0 1 2 3 4 5 6 7 8 9
35 10 15 24 6 12 35 40 98 55
i =1
n
n
14
9.2 线性表的查找技术
顺序查找的缺点:
平均查找长度较大,特别是当待查找集合中元素较多 时,查找效率较低。
顺序要求,顺序存储和链接 存储均可; 对表中记录的有序性也没有要求,无论记录是否按 关键码有序均可。
15
9.2 线性表的查找技术
int BinSearch1(int r[ ], int n, int k) //数组r[1] ~ r[n]存放查找集合 { low=1; high=n; while (low<=high) { mid=(low+high)/2; if (k<r[mid]) high=mid-1; else if (k>r[mid]) low=mid+1; else return mid; } return 0; }
21
9.2 线性表的查找技术
插值检索
基本思想:对一个有序表根据关键码的大小确定比较点. 确定比较点的方法: i=(K-Ke)/(Kn-Ke)*n 性能:取决于关键码数据的分布。 数据分布越均匀,平均查找速度越 快。平均而言,性能优于O(logn) 。
K:待查关键字 Ke:当前检索 子集中最小值
关键字
9.2 线性表的查找技术
判定树
树中的每个结点对应有序表中的一个记录,结点的值 为该记录在表中的位置编号。 从树根到某个结点的路径,表示检索该结点所经历的 过程,路径上各结点为检索中测试过的结点,这些结点 个数即检测该节点的比较次数。 树结点的各个儿子,表示从该结点起下一步检索的各 选择分支。对无儿子结点,表示检索过程进行到此结点 后,应终止。 判定树的深度表示检索算法的最大比较次数。 24
折半查找
使用条件: 线性表中的记录必须按关键码有序; 必须采用顺序存储。 基本思想:在有序表中,取中间记录作为比较对象, 若给定值与中间记录的关键码相等,则查找成功;若 给定值小于中间记录的关键码,则在中间记录的左半 区继续查找;若给定值大于中间记录的关键码,则在 中间记录的右半区继续查找。不断重复上述过程,直 到查找成功,或所查找的区域无记录,查找失败。
16
9.2 线性表的查找技术
折半查找的基本思想
(mid=(1+n)/2)
k
[ r1 … … … rmid-1 ] rmid [ rmid+1 … … … rn ]
如果k<rmid 查找左半区 如果k>rmid 查找右半区
17
9.2 线性表的查找技术
例:查找值为14的记录的过程: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
树表:适用于动态查找,主要采用二叉排序树的查找 技术。 散列表:静态查找和动态查找均适用,主要采用散列 技术。
7
9.1 概述
查找算法的性能
查找算法时间性能通过关键码的比较次数来度量。
关键码的比较次数与哪些因素有关呢? ⑴查找算法; ⑵查找集合与问题规模; ⑶待查关键码在查找集合中的位置; ⑷查找频率。
最后结果
总比较次数:45
F F F F F
A D D D G
B A G G D
C B A E E
D C B A A
E E C B B
G G E C C
H H H H H
30
9.2 线性表的查找技术
访问模式 F D F G E G F A D F G E (2)按移至前端法 初始队列 计数器 A F D F G E E B A F D F G G C B A A D F F D C B B A D D E D C C B A A F E E E C B B G G G G E C C H H H H H H H
第 9 章 检索技术
基本内容:
检索的基本概念 线性表的检索技术 树表的检索技术 散列表的检索技术
1
9.1 概述
检索的基本概念
关键码:可以标识一个记录的某个数据项。 键值:关键码的值。 主关键码:可以唯一地标识一个记录的关键码。 次关键码:不能唯一地标识一个记录的关键码。
职工号 0001 0002 0003 姓名 王刚 张亮 刘楠 性别 男 男 女 年龄 38 25 47 参加工作 1990年4月 2003年7月 1979年9月
0004
0005
齐梅
李爽
女
女