第9章查找学案.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章 查找和排序 §9.1 静态查找表 9.1.1 顺序表的查找 1.顺序查找 顺序查找 顺序查找 2.无序表上的顺序查找,设监视哨 无序表上的顺序查找 平均查找长度 无序表上的顺序查找 9.1.2 有序表上的顺序查找 有序表上的顺序查找 有序表上的顺序查找 有序表上的顺序查找 有序表上的顺序查找 有序表上的顺序查找 有序表上的顺序查找 有序表上的顺序查找 有序表上的顺序查找:失败 9.1.3 有序顺序表上的折半查找 有序顺序表上的折半查找 有序顺序表上的折半查找 有序顺序表上的折半查找:成功 有序顺序表上的折半查找 有序顺序表上的折半查找 有序顺序表上的折半查找 有序顺序表上的折半查找 有序顺序表上的折半查找:失败 有序顺序表上的折半查找 折半查找算法 折半查找的效率分析 9.1.5 索引顺序表的查找 索引顺序表的查找:分块查找 索引顺序表的查找:分块查找 5.5 排序 排序分类 选择排序的算法步骤 选择排序 插入排序 交换排序 冒泡排序 本章小结 本章应掌握的内容 静态查找表,顺序查找、折半查找和平均查找长度 散列(哈希)查找 排序3种方法 设查找表中的元素可均匀地分为b块,每块含有s个记录 若在索引表和块内都进行顺序查找,则: 实际上,在索引表中可进行折半查找。 9.3 哈希表(散列表 ) 9.3.1 基本概念 1.散列 也称为杂凑或哈希。它既是一种查找方法,又是一种存贮方法,称为散列存贮。散列存贮的内存存放形式也称为哈希表或散列表。 散列查找,与前面介绍的查找方法完全不同,前面介绍的所有查找都是基于待查关键字与表中元素进行比较而实现的查找方法,而散列查找是通过计算哈希函数来得到待查关键字的地址,理论上讲,在哈希表中查找元素无须进行关键字间的比较。 例如,要找关键字为k的元素,则只需求出函数值H(k), H为给定的哈希函数, H(k)代表关键字k在存贮区中的地址。 假设有一批关键字序列18,75,60,43,54,90,46,给定哈希函数H(k)=k % 13,存贮区的内存地址从0到15,则可以得到每个关键字的散列地址为: H(18) = 18%13 = 5 H(75) = 75%13 = 10 H(60) = 60%13 = 8 H(43) = 43%13 = 4 H(54) = 54%13 = 2 H(90) = 90%13 = 12 H(46) = 46%13 = 7 于是,根据散列地址,可以将上述7个关键字序列存贮到一个一维数组HT(哈希表或散列表)中,具体表示为: HT 0 1 2 3 4 5 6 7 8 9 10 11 12 54 43 18 46 60 75 90 13 14 15 例如 9.3 哈希表(散列表 ) 因此,一个散列结构是一块地址连续的存储空间,它与一个称为散列函数的函数相关联,该函数是数据记录的关键字到地址空间的映射。 这种存储空间的使用方式,使得 存储记录时,通过散列函数计算出记录的存储位置并按此存储位置存储记录 记录位置 = Hash(记录的关键字) Hash:关键字→ 地址 (2)访问记录时,同样利用散列函数计算存储位置,然后根据所计算出的存储位置访问记录 9.3 哈希表(散列表 ) 2. 散列技术中的主要问题 表面上看,设置了散列函数后,只需作简单的函数计算就可以实现元素的定位及查找操作,但事实上没有这么简单,概括起来,主要有以下两个问题: 冲突 一般情况下,设计出的散列函数很难是单射的,即不同的关键字对应到同一个存储位置,这样就造成了冲突(碰撞)。此时,发生冲突的关键字互为同义词。 (2)散列函数的设计 设计一个简单、均匀、存储空间利用率高、冲突少的散列函数是关键。 9.3 哈希表(散列表 ) 3. 散列过程 散列的一般使用方法是,首先根据具体问题的特点(数据集的特点、存储空间的限制等)设计散列函数和解决冲突的方法,然后执行以下过程: 9.3 哈希表(散列表 ) 提取需要插入或访问的记录的关键字,用散列函数计算出存储位置addr。 (2)如果是存储(插入)记录,且addr处已被其他记录占用(插入冲突),则转(4);否则将记录存入该位置,结束。 (3)如果是访问(查找、删除、修改等)记录,则检查addr处的记录是否为要访问的记录,若不是(定位冲突) ,则转(4);否则读取该记录进

文档评论(0)

ccx55855 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档