二分查找与哈希查找.pptxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二分查找和哈希查找;仅作查询和检索操作的查找表。;是数据元素(或记录)中某个数据项的值,用以标识(识别)一个数据元素(或记录)。; 根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素或(记录) ;ST.elem;ST.elem; 上述顺序查找表的查找算法简单, 但平均查找长度较大,特别不适用于表长较大的查找表。;ST.elem; int BinarySearch( int a[ ], int low,int high, int x ) { int mid; //定义保存中点元素下标的变量 while(low=high) { mid=(low+high)/2; if(x==a[mid]) // 找到待查元素 return mid ; else if(xa[mid]) high=mid-1; //在左半侧 else low=mid+1 ; //在右半侧 } return -1; }; 先看一个具体的情况,假设:n=11;二分查找的其他应用 二分查找求区域 如果数组中有多个都是x,那若用上边那个程序会返回哪个下标?那能不能求出该值所在的完整区间。下边这个程序当x存在时返回它出现的第一个位置,如果不存在,就会返回一个下标,在这里插入x后,原数列仍然有序 int lower_bound(int *a,int low,int high ,int x) { int mid; while(low high)//这里不可为= { mid = low+(high-low)/2 ; if(a[mid] = x) high = mid ; else low = mid+1; } return low ; } 那上边程序怎样修改可以求x存在的最后一个位置呢?;二分查找求上下界 给定一个数x,让你用二分求出数列中第一个比它大的数或者是第一个比它小的数。下边这个代码是求给定的数上界 int BSearchUp(int a[], int low, int high, int x) { if(low high || x = a[high]) return -1; int mid = (low + high) / 2; while (low high) { if (a[mid] x) high = mid; else low = mid + 1; mid = (low + high) / 2; } return mid; } 由此问题特点可知,若是求上界,则从前往后找,若是求下界,则是从后往前找,因此下界较为麻烦一点点。。。。。需要注意mid的位置。。。。。; 一、什么是哈希表?; 以上两节讨论的表示查找表的各种结构的共同特点:记录在表中的位置和它的关???字之间不存在一个确定的关系,;对于动态查找表而言,;{Zhao, Qian, Sun, Li, Wu, Chen, Han, Ye, Dei} ;1) 哈希(Hash)函数是一个映象,即: 将关键字的集合映射到某个地址集合上, 它的设置很灵活,只要这个地址集合的 大小不超出允许范围即可;;3) 很难找到一个不产生冲突的哈希函数。 一般情况下,只能选择恰当的哈希函数,使冲突尽可能少地产生。;哈希表的定义:;二、构造哈希函数的方法;5. 除留余数法; 给定一组关键字为: 12, 39, 18, 24, 33, 21, 若取 p=9, 则他们对应的哈希函数值将为: 3, 3, 0, 6, 6, 3; 实际造表时,采用何种构造哈希函数的方法取决于建表的关键字集合的情况(包括关键字的范围和形态),总的原则是使产生冲突的可能性降到尽可能地小。;三、处理冲突的方法 ; 为产生冲突的地址 H(key) 求得一个地址序列: H0, H1, H2, …, Hs 1≤ s≤m-1 其中:H0 = H(key) Hi = ( H(key) + di ) MOD m i=1, 2, …, s;对增量 di 有三种取法:;例如: 关键字集合

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档