- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九章 查找 静态查找表 动态查找表 哈希查找表 9.1 基本概念(Page 214) 查找表:是由同一类型数据元素构成的集合。 静态查找表:只做“查询”或“检索”操作。 动态查找表:查询、检索、插入、删除。 关键字:是数据元素中某个数据相的值,用它可以标识一个数据元素。 主关键字、次关键字 查找:根据给定值,在查找表中确定一个其关键字等于给定值的数据元素。 查找成功返回位置序号、查找不成功返回 0 注意 比较各种查找算法时间复杂度和空间复杂度,查找算法的主要时间用于“关键字的比较”。 9.2 静态查找表 顺序表的查找 typedef int KT ; typedef struct{KT key ; ... }ET; typedef struct{ET *elem; //数据元素存储空间基址,0为空单元 int length;}SST; int Search_Sq(SST ST, KT key){ St.elem[0].key=key;//设置哨兵 for (i=ST.length ; key!=ST.elem[i].key; i--) ; return i; } 顺序表的查找算法性能分析 在等概率的情况下:Pi=1/n 查找成功时的平均查找长度: (n+1)/2 查找不成功时的比较次数: n+1 假设查找成功与不成功的可能性相同,在等概率的情况下:Pi=1/2n , 则顺序查找的平均查找长度为: ASLss=((n+1)+(n+1)/2)/2=3(n+1)/4 有序表的查找——折半查找 折半查找(二分查找):经过一次比较将表分割成两部分,然后只在表的一部分中继续进行查找的方法。 mid=(low+high)/2 二分算法描述 int Search_Bin(SST ST, KT key){ low=1 ; high=ST. length; while (low=high) { mid=(low+high)/2; if(key==ST.elem[mid].key) return mid; else if (keyST.elem[mid].key) high=mid-1; else low=mid+1; } return 0; }//时间复杂度:O(log2 n) i-1 二叉树的性质 1、在二叉树的第 i 层上至多有2 个结点(i=1); 2、深度为k的二叉树至多有2 -1个结点(k=1); 3、对任何一棵二叉树T,如果其终端结点数为 n0,度为2的结点数为n2,则n0=n2+1。 4、具有n个结点的完全二叉树的深度为: ?log2 n? +1 二叉判定树 查找过程可用二叉树来描述。树中每个结点表示一个记录,结点中的值为该记录在表中的位置,通常这个描述查找过程的二叉树为判定树。 在该树中,和给定值进行比较的次数恰为该结点在判定树中的层次。 性能分析 比较次数最多: ?log2 n?+1 不超过判定树的深度 时间复杂度: O(log2 n) 此方法只能适用于有序表,且限于顺序存储结构。 索引顺序表的查找(分块查找)要求: 索引表 按表中记录的关键字分块, R1,R2,…,RL 第Rk 块中所有关键字 Rk+1块中的所有关键字 k=1,2,…,L-1, 称为“分块有序” 对每块建立一个索引项, 包含有两项内容: 关键字项 : 为该块中最大关键字值; 指针项 : 为该块第一个记录在表中位置. 所有索引项组成索引表 查找过程 确定待查记录所在块; (可以用顺序或折半查找) 在块内顺序查找. (块内查找只能用顺序查找) 性能分析 ASLbs=Lb+Lw, Lb为确定块的平均查找长度;Lw为块内查找次数。 若顺序查找: ASLbs=Lb+Lw =(n/s+s)/2+1 若折半查找: ASLbs=Lb+Lw = log2(n/s+1)+s/2 9.3 动态查找表 二叉排序树(BST) 二叉排序树的定义:page 227 查找过程 二叉排序树的插入和删除 二叉排序树的查找分析 含有n个结点的二叉排序树的平均查找长度和树的形态有关:最差的形态是:单支树( (n+1)/2 );最好的形态是:判定树( l
文档评论(0)