网站大量收购闲置独家精品文档,联系QQ:2885784924

第八章 查找 - 内江师范学院-精品课程平台.doc

第八章 查找 - 内江师范学院-精品课程平台.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章 查找 - 内江师范学院-精品课程平台

第八章 查找 主要知识点 1. 查找表的检索机制 本章给出了三种类型的查找表: ?一类是线性索引,记录关键字一般按序排列,以提高检索速度,对应检索采用基于比较检索方法; ?第二类是树形索引,树形的典型结构是二叉排序树,其检索的时间复杂度与树的深度同级为对数函数,其对应的检索方法是基于树表式的检索,即将待查找的表组织成树、在树形结构上实现查找; ?第三类是散列(哈希)结构,根据数据的关键值“计算” 数据的存储地址。散列(哈希)表既是建立表也是查找表的方法,其对应的检索方法是“计算式”的检索。 2. 平均查找长度 为确定数据元素在列表中的位置,需和给定值进行比较的关键字个数的期望值,称为查找算法在查找成功时的平均查找长度。由于查找算法的基本运算是关键字之间的比较操作,所以平均查找长度是衡量查找算法的性能的重要指标。 对于长度为n的列表,查找成功时的平均查找长度为: ASL=P1C1+ P2C2+…+ PnCn = 其中Pi为查找列表中第i个数据元素的概率,Ci为找到列表中第i个数据元素时,已经进行过的关键字比较次数。 3. 折半查找 ? 折半查找法要求待查找表应采用顺序存储结构且按关键字有序排列。 ? 折半查找过程借助于折半判定树加以描述。判定树中每一结点对应表中一个记录在表中的位置序号。 ? 折半查找算法的性能:在等概率时查找成功的平均查找长度与折半判定树的深度相关, 折半查找算法查找速度快,平均性能好;插入删除较困难。 4. 二叉排序树 ? 掌握二叉排序树的定义, ? 理解二叉排序树的性质:中序遍历一个二叉排序树可以得到一个递增有序序列。 ? 含有n个结点的二叉排序树形态不唯一,其构造与数列的输入顺序有关。 ? 查找过程与折半查找过程类似,在二叉排序树中查找一个记录时,其比较次数不超过树的深度。就平均性能而言,二叉排序树上的查找和折半查找相差不大,平均查找长度仍然是。 ? 二叉排序树的插入、删除操作无需移动大量结点,经常变化的动态表宜采用二叉排序树结构。 5. 哈希法 ? 基本思想:以元素的关键字k为自变量,通过哈希函数H,计算其存储位置p即p=H(k),从而实现按关键字计算的方式建立表与查找表。哈希表的查找过程与哈希表的创建过程对应一致。 ? 哈希法主要包括:1)哈希函数构造,2)处理冲突方法。构造哈希函数常用的方法有除留余数法。处理冲突的基本方法包括线性探测再散列、二次探测再散列、链地址法等。 例1: 1000个记录设计哈希表,假设哈希函数是均匀的,解决冲突用线性探测再散列法,并要求在等概率情况下查找成功时的ASL不超过3,查找不成功时的ASL不超过13,则哈希表长度m应取多大? 解:本题要求应用公式计算平均查找长度。 解得α≤0.8,取α=0.8,由于0.8=1000/m,所以m=1250。 例2对以下关键字序列建立哈希表: (SUN, MON, TUE, WED, THU, FRI, SAT),哈希函数为: H(K) =(K中第一个字母在字母表中的序号)MOD 7。 用线性探测法处理冲突,要求构造一个装填因子为0.7的哈希表,并计算出在等概率情况下查找成功的平均查找长度和不成功的平均查找长度。 例3已知某哈希表的装载因子小于1,哈希函数H(key)为关键字(标识符)的第一个字母在字母表中的序号,处理冲突的方法为线性探测开放定址法。 (1) 编写按第一个字母的顺序输出哈希表中所有关键字的算法。 (2) 编写模拟手工计算等概率情况下查找不成功的平均查找长度算法。 解①:【问题分析】 因哈希表的装载因子小于1,哈希表未满。要实现按第一个字母的顺序输出哈希表中所有关键字的要求,可按字母序号从1到26的顺序逐个找出对应每个序号的所有关键字的方式加以实现。 实现步骤:对字母序号为i,可先从该字母序号位置开始判断该处所存关键字的哈希函数值是否为i,若相同,则表示该关键字为与序号i对应的关键字,输出该值,若不同,表示该关键字并非为字母序号i对应的关键字,不输出。按线性探测开放定址法继续判断下一个关键字,直到值为空。字母序号从1到26持续上述步骤,则可得一个按字母顺序输出的所有关键字序列。 【算法描述】 void printword(HashTable ht) { int i,j; for(i=1; i=26; i++) /*按字母顺序输出关键字*/ { j = i; /*哈希地址j初始为序号I*/ while(ht[j].key != NULLKEY) /*判断关键字是否为空*/ { if(hash

文档评论(0)

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

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

1亿VIP精品文档

相关文档