软件技术基础 算法与数据结构五.pptx
《软件技术基础 算法与数据结构五.pptx》由会员分享,可在线阅读,更多相关《软件技术基础 算法与数据结构五.pptx(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1/49第3章 内容摘要3.1 数据结构概述 3.2 算法的描述和分析3.3 线性表 3.4 树和二叉树3.5 图3.6 3.6 查找与排序查找与排序软件技术基础电子教案第1页/共49页2/493.6 查找与排序 查找与排序是计算机最频繁的操作,特别是大量数据的数据处理领域。排序和查找是两个密切相关、很基本的技术。查找和排序一般数据结构比较简单,主要是算法问题。在早期计算机内存紧张,速度慢时,对程序员尤其重要。如今CPU快速、内存大,相对重要性降低。但是作为学习编程,“想得到它就写得出算法来”还是非常有意义的,还可以开阔思路。它包含了许多编程技巧的精髓。软件技术基础电子教案第2页/共49页3/
2、49查找基本概念 查找表:由同一类数据构成的用于查找的集合被称作查找表。查找表是具有一定存储结构的数据集合,比如顺序表结构、链式结构、树形结构等。查找往往根据数据元素的某个属性进行。例如根据学号查找某个学生记录。这种被用于查找的元素属性一般称为关键字,它往往可以唯一标识一个元素。3.6.1 查找查找软件技术基础电子教案第3页/共49页4/49 静态查找表:查找表一旦建立,在以后的查找过程中就不会改变。它所对应的查找算法属于静态查找技术。动态查找表:查找表建立后,在后来的查找过程中仍会改变查找表的内容。它所对应的查找算法属于动态查找技术。动态查找的例子词汇统计问题。就是统计一篇文章中使用了多少词
3、汇以及每个词汇的使用次数。解决方法是先建立一个空的查找表,以后每读到一个词就在查找表中查询一下,如果该词汇存在则将其使用次数加一,否则将新词插入到查找表中并设使用次数为一次。显然,这个查找表是不断扩张的。第4页/共49页5/49平均查找长度平均查找长度:为了确定数据元素在查找表中的位置,需要将给定值为了确定数据元素在查找表中的位置,需要将给定值和表中的数据元素的关键字进行比较的次数的期望值。和表中的数据元素的关键字进行比较的次数的期望值。平均查找长度平均查找长度ASLASL的计算方法为:的计算方法为:n n 为表长;为表长;P Pi i为查找第为查找第i i个元素的概率。个元素的概率。C Ci
4、 i为找到该为找到该记录时,曾和给定值比较过的数据元素的个数。记录时,曾和给定值比较过的数据元素的个数。在等概率条件下在等概率条件下(P(Pi i=1/n)=1/n)这时平均查找长度为:这时平均查找长度为:其中其中:软件技术基础电子教案第5页/共49页6/49查找表定义#define maxsize 100 /*查找表最大长度*/typedef int KeyType;/*整型*/涉及的数据记录至少含有一个关键字段(域):typedef struct KeyType key;DataType;typedef struct DataType rmaxsize;/*数据元素存储空间*/int le
5、ngth;/*表的长度*/Sqlist;软件技术基础电子教案第6页/共49页7/49线性表的查找常见的线性表查找算法顺序查找顺序查找 折半查找折半查找 分块查找分块查找 软件技术基础电子教案第7页/共49页8/49顺序查找顺序查找改进算法:int SeqSearch(Sqlist s,KeyType k)/*在表在表s中顺序查找关键字中顺序查找关键字k,若查找成功,则函数值为该元素在表中的位置,若,若查找成功,则函数值为该元素在表中的位置,若查找失败,返回查找失败,返回-1。*/int i;for(i=0;is.length;i+)if(s.ri.key=k)return(i);/*查找成功查
6、找成功*/return(-1);/*查找失败查找失败*/思考:此算法的效率能提高吗?第8页/共49页9/49顺序查找顺序查找改进算法:顺序查找改进算法:int SeqSearch_gai(Sqlist s,KeyType k)int i;i=s.length-1;s.r-1.key=k;/*设置前哨站设置前哨站*/while(s.ri.key!=k)/*从表尾开始向前扫描从表尾开始向前扫描*/i-;return(i);请请比比较较这这两两个个算算法法,由由于于改改进进后后的的算算法法不不需需要要判判断断当当前前下下标标是是否否出出界界,时时间间效效率率几几乎乎提提高了一倍高了一倍.顺序查找的平
7、均查找长度顺序查找的平均查找长度为 第9页/共49页10/49i例-1012345678910513192137566475808892找6464监视哨iiii比较次数=5比较次数:比较次数:查找第查找第n个元素:个元素:1查找第查找第n-1个元素:个元素:2.查找第查找第1个元素:个元素:n查找第查找第i个元素:个元素:n+1-i查找失败查找失败:n+1软件技术基础电子教案第10页/共49页11/49有序表的查找 前提:表中的结点按关键字递增有序首先将待查值k和表中间位置上的结点关键字进行比较,若两者相等,则查找成功;否则,若k值小,则在表的前半部分中继续利用折半查找法查找,若k值大,则在表
8、的后半部分中继续利用折半查找法查找这样,经过一次关键字比较缩小一半的查找区间,如此进行下去,直到查找到该关键字或查找失败。软件技术基础电子教案第11页/共49页12/49折半查找算法int BinSearch(Sqlist s,KeyType k)/*在在表表s中中用用折折半半查查找找法法查查找找关关键键字字k,若若查查找找成成功功,则则函函数数值值为为该该元元素素在在表表中中的的位置,若查找失败,返回位置,若查找失败,返回-1。*/int low,mid,high;low=0;high=s.length-1;while(lowk)high=mid-1;/*在左区间中查找在左区间中查找*/el
9、se low=mid+1;/*在右区间中查找在右区间中查找*/return(-1);/*查找失败查找失败*/第12页/共49页13/49算法描述lowhighmid例 1234567891011513192137566475808892找211234567891011513192137566475808892lowhighmid1234567891011513192137566475808892lowhighmid软件技术基础电子教案第13页/共49页14/49例例 1234567891011513192137566475808892lowhighmid找7012345678910115131
10、92137566475808892lowhighmid1234567891011513192137566475808892low highmid1234567891011513192137566475808892lowhighmid第14页/共49页15/491234567891011513192137566475808892lowhigh1185210741936判定树:1234567891011513192137566475808892ASL=(1*1+2*2+4*3+4*4)/11=3第15页/共49页16/49折半查找查找过程可用二叉树来描述(如图所示)折半查找的ASL近似软件技术基础
11、电子教案第16页/共49页17/49哈希表查找(杂凑法)哈希(Hash)表与哈希方法基本思想基本思想 在记录的存储地址和它的关键码之间建立一个确在记录的存储地址和它的关键码之间建立一个确定的对应关系;这样,定的对应关系;这样,不经过比较不经过比较,一次存取就,一次存取就能得到所查元素的查找方法能得到所查元素的查找方法定义定义哈希函数哈希函数在记录的关键码与记录的存储地址在记录的关键码与记录的存储地址之间建立的一种对应关系,哈希函数可写成:之间建立的一种对应关系,哈希函数可写成:addraddr(a(ai i)=H(k)=H(ki i)。按照存储的方法去查找按照存储的方法去查找:你是如何存储的你
12、就如你是如何存储的你就如何去查找何去查找,回忆一下回忆一下:你是如何找存折你是如何找存折?如何找钱包如何找钱包?软件技术基础电子教案第17页/共49页18/49哈希表与哈希方法 哈希表哈希表应用应用哈希函数哈希函数,由记录的关键码确定记录在表中的地址,由记录的关键码确定记录在表中的地址,并将记录放入此地址。并将记录放入此地址。哈希查找哈希查找又叫散列查找,利用哈希函数进行查找的过程。又叫散列查找,利用哈希函数进行查找的过程。关键码集合存储地址集合HASH软件技术基础电子教案第18页/共49页19/49哈希表与哈希方法哈希函数只是一种映象,所以哈希函数的设定很灵活,只要使任何关键哈希函数只是一种
13、映象,所以哈希函数的设定很灵活,只要使任何关键码的哈希函数值都落码的哈希函数值都落在表长允许的范围之内在表长允许的范围之内即可即可冲突:冲突:key1 key2,但但H(key1)=H(key2)的现象的现象同义词:具有相同函数值的两个关键码哈希函数冲突不可避免,只能尽同义词:具有相同函数值的两个关键码哈希函数冲突不可避免,只能尽量减少。所以,哈希方法解决两个问题:量减少。所以,哈希方法解决两个问题:构造好的哈希函数;制定解决冲突的方法软件技术基础电子教案第19页/共49页20/49常用的哈希函数构造方法直接定址法直接定址法构造:取关键码或关键码的某个线性函数作哈希地址,即H(key)=key
14、 或 H(key)=akey+b例如:取学号作为关键字,哈希函数H(k)=k+(-230000)查找学号230009记录,只需查230009-230000=9 项即可特点直接定址法所得地址集合与关键字集合大小相等,直接定址法所得地址集合与关键字集合大小相等,不会发生冲突不会发生冲突实际中能用这种哈希函数的情况很少实际中能用这种哈希函数的情况很少软件技术基础电子教案第20页/共49页21/49常用的哈希函数构造方法数字分析法数字分析法构造:对关键码进行分析,取关键码的若干位或其组合作哈希地址适于关键码位数比哈希地址位数大,且可能出现的关键码事先知道的情况软件技术基础电子教案第21页/共49页22
15、/49常用的哈希函数构造方法平方取中法平方取中法构造:取关键码平方后中间几位作哈希地址适于不知道全部关键码情况除余法(亦称除留余数法)除余法(亦称除留余数法)构造:取关键码被某个不大于哈希表表长m的数p除后所得余数作哈希地址,即H(key)=key MOD p,pm特点简单、常用,可与上述几种方法结合使用简单、常用,可与上述几种方法结合使用p p的选取很重要;的选取很重要;p p选的不好,容易产生同义词,一般取不大于选的不好,容易产生同义词,一般取不大于m m的最大素数。的最大素数。软件技术基础电子教案第22页/共49页23/49常用的哈希函数构造方法折叠法折叠法构造:将关键码分割成位数相同的
16、几部分,然后取这几部分的叠加和(舍去进位)做哈希地址种类移位叠加:将分割后的几部分低位对齐相加移位叠加:将分割后的几部分低位对齐相加间界叠加:从一端沿分割界来回折送,然后对齐相加间界叠加:从一端沿分割界来回折送,然后对齐相加适于关键码位数很多,且每一位上数字分布大致均匀情况软件技术基础电子教案第23页/共49页24/49常用的哈希函数构造方法选取哈希函数,考虑以下因素:选取哈希函数,考虑以下因素:计算哈希函数所需时间关键码长度哈希表长度(哈希地址范围)关键码分布情况记录的查找频率软件技术基础电子教案第24页/共49页25/49哈希表的操作哈希表的类型定义为#definemaxsize100#d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件技术基础 算法与数据结构五 软件技术 基础 算法 数据结构
限制150内