ds8-查找算法.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文档。上传文档
查看更多
ds8-查找算法

第8章 查找算法;8.1 查找的基本概念;(2)查找表指由具有同一类型(属性)的数据元素组成的集合。 静态查找表只允许进行查找,不能改变表中的数据元素。 动态查找表不仅可以实现查找,还允许向表中插入或删除数据元素。 (3)查找是指在查找表中查找键值与待查元素值相等的过程。 (4)平均查找长度是指查找过程中对键需要执行的平均比较次数,是一个查找算法优劣的衡量标准。 对n个对象记录进行查找时,平均查找长度为:;8.2 静态查找表;顺序表类的定义如下: 算法8.2:顺序表类的定义 class Sqtable{ private: datanode r[MAXSIZE]; //数组,查找表 int n; //数据元素个数,表长 public: Sqtable(); //构造函数 void create(); void output(); int sq_search(KeyType k); //顺序查找 int binary_search(KeyType k); //折半查找 }; ;8.2.1 顺序表的查找;已知表r,关键字数据K,表长n: 算法8.3:顺序查找算法 int Sqtable::sq_search(KeyType K){ r[n].key=K; //设置监视哨 int i=0; while(r[i].key!=K) i++; if(in) return i; //查找成功,该记录下标为i else return -1; //查找失败 } ;顺序表的性能分析:;改进:自组织表 对顺序表的查找有如下三种改进策略(自组织表): ① 每次成功查找将被查元素移动到查找表的表头; ② 每次成功查找将被查元素向前移动一个位置; ③ 给每个元素增加一个频率域,每次成功查找时,更新该元素的频率并且移动元素的位置,以保持查找表中的元素按频率从大到小存储。 根据“二八规律”,80%的查找都会在前20%部分成功。 ;8.2.2 折半查找;【例8.1】已知一个有11个数据元素的有序表(关键字即为数据元素的值):(04,15,20,27,39,46,59,61,78,82,95),以折半查找方法查找关键字为27和86的数据元素。 其中:方括号表示当前的查找区间,“↑”指向中间、下界和上界位置。 ;(1)如查找给定值key=27的元素;(2)如查找给定值key=86;算法8.5:折半查找的递归算法 int Sqtable:: binary_search(KeyType k, int low, int high){ if ( low high ) return –1; int mid = (low + high) / 2; if ( k == r[mid] ) return mid; else if ( k r[mid] ) return binary_search(k, low, mid-1); else return binary_search(k, mid+1, high); } ;算法8.4:折半查找的非递归算法 int Sqtable:: binary_search(KeyType K){ int mid,low,high,find; low=0;high=n-1;find=0; do{ mid=(low+high)/2; if(K==r[mid].key){ find=1; return mid; //查找成功,该记录下标为mid } else if(Kr[mid].key) high=mid-1; else low=mid+1; }while(find==0low=high); if(find==0) return -1; //查找失败! } ;折半查找算法的复杂度分析: 折半查找可描述为二叉树的形式,称为折半查找判定树。设待查区间为[low..high],则折半查找判定树递归定义如下: (1)如果lowhigh,则折半查找判定树为空。 (2)如果low=high,则折半查找判定树的根为mid=(low+high)/2,左子树的查找区间为[low..mid-1],右子树的查找区间为[mid+1..high]。 ;?;折半查找的优点与缺点:;8.3 散列表;哈希冲突:;8.3.1 哈希函数的常用构建方法;直接定址法 哈希函数Hash(key)=a*key+b,其中a和b都为常数。 直接定址法取关键字的某个线性函数值为哈希地址。 此类哈希函数计算方法最简单,是一对一的映射,一般不会产生冲突。但是,直接

文档评论(0)

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

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

1亿VIP精品文档

相关文档