ds查找与散列结构.ppt

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章 查找与散列结构;主要内容; 查找; 查找; 查找; 查找; 查找;静态查找 顺序表的查找:顺序查找 有序表的查找:折半查找 索引顺序表的查找:分块查找;查找表 可用线性表表示L1=(45,61,12,3,37,24,90,53,98,78) 顺序查找 从最后一个(第一个)记录开始,逐个进行比较 查找不成功的标记 用顺序表表示静态查找表 用线性链表表示静态查找表;第 * 页;第 * 页;第 * 页;顺序查找特点 无排序要求; 算法简单; 存储结构:顺序、链式; 效率不高 ;查找表:用有序表表示 查找方法:???半查找(二分查找) 查找过程:先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。 例:有原始查找表 {45,61,12,3,37,24,90,53,98,78} 为进行折半查找,需要先进行排序: L=(3,12,24,37,45,53,61,78,90,98);例:查找 Key=24 的记录。;bool Search_Bin ( SSTable ST, KeyType key ) { //在有序表ST中折半查找法查找其关键字等于key的数据元素。若找到,则返回该元素在表中的位置,否则返回false。 low=1; high=ST.length; while ( low=high ) { mid=(low+high)/2; if EQ ( key, ST.elem[mid].key ) return mid; else if LT ( key, ST.elem[mid].key ) high=mid-1; else low=mid+1; } return false; //表中不存在待查元素 };例2:在下表中查找 key = 5 的结点。;折半查找的特点 要求元素按关键字有序。 存储结构:顺序。 ;查找表的组织:分块有序,除表本身以外,尚需建立一个“索引表”。 查找方法:查找索引表;在数据块内顺序查找;查找方法比较;动态查找 二叉排序树:或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于根结点的值; (3)根结点的左、右子树也分别为二叉排序树。 ;二叉排序树的查找过程;在查找过程中,生成了一条查找路径:;性能分析 查找表:{3,12,24,37,45,53,61,78,90,98}; 一般情况下,没有对二叉排序树的深度进行控制。 在构造二叉排序树的过程中进行“平衡化”处理,成为平衡二叉树(AVL树)。 平衡二叉树:左子树和右子树的深度之差的绝对值不超过1。;二叉排序树的特点 动态查找 (插入删除的时机) 含有n个结点的二叉排序树不唯一,与结点插入的顺序有直接关系。 删除某个结点后,二叉排序树要重组。 可得到平衡二叉树。 二叉排序树的适用范围 用于组织规模较小的、内存中可以容纳的数据。对于数据量较大必须存放在外存中的数据,则无法快速处理。;问题引入:前面讨论的各种结构,记录在结构中的相对位置是随机的,和记录的关键字之间不存在确定关系,因此,在结构中查找记录时需要进行一系列和关键字的比较。;理想情况是希望不经过任何比较,一次存取就能得到所查记录 解决方法:在记录的存储位置和其关键字之间建立一个确定的对应关系f,使每个关键字和结构中的唯一的存储位置相对应。 在查找时,只要根据该对应关系f可找到给定值K的存储位置f(K)。若结构中存在关键字和K相等的记录,则一定在f(K)的存储位置上,所以不需要进行比较即可直接得到所查记录。; 哈希表; 基本思想: 在记录的存储地址和它的关键字之间建立一个确定的对应关系;这样,不经过比较,一次存取就能得到所查元素的查找方法。即:通过简单计算直接得到数据的地址。 1) 哈希(Hash)函数是一个映象,即:将关键字的集合映射到某个地址集合上,它的设置很灵活,只要这个地址集合的大小不超出允许范围即可。 哈希函数可写成:addr(ai)=H(ki) ai是表中的一个元素 addr(ai)是ai的存储地址 ki是ai的关键字。; 2) 由于哈希函数是一个压缩映象,因此,在一般情况下,很容易产生“冲突”现象,即:key1? key2,而 f(key1) = f(key2)。 3) 很难找到一个不产生冲突的哈希函数。一般情况下,只能选择恰当的哈希函数,使冲突尽可能少地产生。; 哈希表;

文档评论(0)

178****4446 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档