数据结构第五章查找讲解.ppt

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

查找是为了得到某个信息而进行的工作,也称检索;基本概念;查找表;平均查找长度;5-1 线性表查找;typedef struct { ElemType *data; int length; }SeqTable; ;顺序查找;typedef int KeyType; typedef struct { KeyType key; DataType other; } ElemType; typedef struct{ ElemType *elem; int length; } SeqTable; ;顺序查找算法;若找到的是第一个元素data[1],则比较次数c1=n;若找到的是第i个元素data[i],则比较次数ci=n-i+1;在不考虑检索失败的情况下,顺序检索的平均检索长度为 ASL =1*pn+2*pn-1+…+n*p1 =(1+2+…+n)/n (pi=1/n) =(n+1)/2 T(n)=O(n) ;有序表的查找;7;status BinSearch(SeqTable t,KeyType kx) { int low ,high,mid; int flag; low=0; high=t-length-1; while(low=high) {mid=(low+high)/2; if(kxt-elem[mid]) high=mid-1; else if(kxt-elem[mid]) low=mid+1; else { flag=mid; break; } } return flag; };若表中元素个数n为:有 ;插值查找;斐波纳契查找(黄金分割法);;索引表的整个表分成三个子表,对每个子表建立一个索引项, 其中包括两项内容:关键字项(其值为该子表内的最大关键字) 和指针项(指示该子表的第一个记录在表中的位置)。 索引表按关键字有序,表或者有序或者分块有序。 分块有序指的是后一个子表中所有记录的关键字均 大于前一个子表中的最大关键字。;5-2 哈希表查找;哈希表与哈希方法:选取某个函数,依该函数 按关键码计算元素的存储位置,并按此存放; 查找时,由同一个函数对给定值kx计算地址, 将kx与地址单元中元素关键码进行比较, 确定查找是否成功。;负载因子: ;常用的哈希函数;2.除余法;3.乘余取整法;5.数字分析法 数字分析法是关键码位数比存储区的地址码的位数多,这时可以对关键码的各位进行分析,丢掉分布不均匀的位留下均匀位作为地址。;6.折叠法 折叠法是将关键码分割成倍数相等的几部分,最后一部分的倍数可以短点,将这几部分叠加求和,取后几位为哈希地址。;例如,关键码为key=582422241,要求转换为4位的地址码。 58 | 2422 | 241 移位折叠相加 移位相加 8 5 5 8 1 4 2 2 4 1 2 4 2 2 2 4 2 2 1 1 0 6 4 2 7 2 1 h1(key)=1064 h2(key)=2721;处理冲突的方法;di=1,2,3,…,m-1,di=i称线性探查序列;;②二次探测法;③双哈希函数探测法;2.拉链法;K={18, 73,10,05,68,99,27,41,51, 32, 25},;结点类型:;#define m … int CreateHashT(OpenHash l_t; DataType *eptr) { int I; int d,finished; for(i=0;im;i++) l_t[i]=NULL; for(;eptr-key!=0;eptr++) { d=Hash(eptr-key);

文档评论(0)

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

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

1亿VIP精品文档

相关文档