第8章查找技术题材.ppt

  1. 1、本文档共117页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构与算法 作 者:胡明 王红梅 出版社:电子工业出版社 邮 箱:wanghm@mail.ccut.edu.cn;第 8 章 查找技术;;; 静态查找 :不涉及插入和删除操作的查找 。 动态查找 :涉及插入和删除操作的查找。 ;8.1 概述;本章讨论的查找结构 : 线性表:适用于静态查找,主要采用顺序查找技术和折半查找技术。 树表:适用于动态查找,主要采用二叉排序树的查找技术。 散列表:静态查找和动态查找均适用,主要采用散列技术。 ;查找算法的性能 ;查找算法的性能 ;顺序查找 (线性查找);顺序查找 (线性查找);基本思想:设置“哨兵”。哨兵就是待查值,将它放在查找方向的尽头处,免去了在查找过程中每一次比较后都要判断查找位置是否越界,从而提高查找速度。 ;基本思想:设置“哨兵”。哨兵就是待查值,将它放在查找方向的尽头处,免去了在查找过程中每一次比较后都要判断查找位置是否越界,从而提高查找速度。 ;int SeqSearch2(int r[ ], int n, int k) //数组r[1] ~ r[n]存放查找集合 { r[0] = k; i = n; while (r[i] != k) i--; return i; };平均查找长度较大,特别是当待查找集合中元素较多时,查找效率较低。;折半查找;折半查找的基本思想;例:查找值为14的记录的过程: ;例:查找值为22的记录的过程: ;int BinSearch1(int r[ ], int n, int k) { //数组r[1] ~ r[n]存放查找集合 low = 1; high = n; while (low = high) { mid = (low + high) / 2; if (k r[mid]) high = mid - 1; else if (k r[mid]) low = mid + 1; else return mid; } return 0; };int BinSearch2(int r[ ], int low, int high, int k) { //数组r[1] ~ r[n]存放查找集合 if (low high) return 0; else { mid = (low + high) / 2; if (k r[mid]) return BinSearch2(r, low, mid-1, k); else if (k r[mid]) return BinSearch2(r, mid+1, high, k); else return mid; } };折半查找判定树 ;⑴ 当n=0时,折半查找判定树为空; ⑵ 当n>0时,折半查找判定树的根结???是有序表中序号为mid=(n+1)/2的记录,根结点的左子树是与有序表r[1] ~ r[mid-1]相对应的折半查找判定树,根结点的右子树是与r[mid+1] ~ r[n]相对应的折半查找判定树。 ;8.2 线性表的查找技术;具有n个结点的折半查找判定树的深度为 ;分块查找;分块查找(也称为索引顺序查找),分两步进行: ⑴ 在索引表中确定待查关键码所在的块; ⑵ 在相应块中查找待查关键码。; 设有n个记录的文件分为m个块,每个块均为t个记录,则n=m×t。设Lb为查找索引表确定关键码所在块的平均查找长度,Lw为在块内查找关键码的平均查找长度,则分块查找的平均查找长度为: ASL=Lb + Lw 若采用顺序查找对索引表进行查找,则分块查找的平均查找长度为: ;二叉排序树;二叉排序树 非二叉排序树;二叉排序树的存储结构;二叉排序树的插入;;void InsertBST(BiNode *root, BiNode *s) { if (root == NULL) root = s; else i

文档评论(0)

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

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

1亿VIP精品文档

相关文档