- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8.1查找的基本概念 查找(Searching)的定义是:在含有n条记录的表(文件)中找出关键字等于给定值K的记录。若找到,则查找成功,返回该记录的信息或该记录在表(文件)中的位置;否则查找失败,返回相关的指示信息。 若在查找的同时对表做修改操作(如插入和删除等),则相应的表称之为动态查找表(Dynamic Search Table)。否则称之为静态查找表(Static Search Table)。 若整个查找过程都在内存进行,则称之为内查找;反之,若查找过程中需要访问外存,则称之为外查找 二分查找又称折半查找,它是一种效率较高的查找方法。 二分查找要求:要求线性表是有序表,即表中结点按关键字有序,并且要用向量作为表的存储结构。不妨设有序表是递增有序的。 例:设算法的输入实例中有序的关键字序列为:??? 05,13,19,21,37,56,64,75,80,88,92。查找的关键字K=21 第一步:这里的n=11,mid=(1+11)/2=6 05,13,19,21,37,56,64,75,80,88,92 二分查找判定树的组成 二分查找的平均查找长度 二分查找成功时的平均查找长度为:? ASLbn≈log2(n) 二分查找在查找失败时所需比较的关键字个数不超过判定树的深度,在最坏情况下查找成功的比较次数也不超过判定树的深度。即为: 二分查找的优点和缺点 虽然二分查找的效率高,但是要将表按关键字排序(有序表)。 二分查找只适用顺序存储结构。为保持表的有序性,在顺序结构里插入和删除都必须移动大量的结点。 三、分块查找(索引顺序查找 ) 分块查找表存储结构 分块查找的特点是:按表内记录的某种属性把表(文件)分成b个块(子表),并建立一个相应的“索引表”,索引表中每个元素对应一个块,而在索引表中是按其关键字有序,但是每一块中的记录的存放是任意的,块与块之间必须是有序的。即分块查找的前提是:文件由分块有序的线性表和索引表组成。 算法分析 分块查找是两次查找过程。整个查找过程的平均查找长度是两次查找的平均查找长度之和。 以二分查找来确定块,分块查找成功时的平均查找长度(在索引表中用二分查找,在块内用顺序查找) ASLblk= ASLbn+ASLsq≈log2(b+1)-1+(s+1)/2≈log2(n/s+1)+s/2 以顺序查找确定块,分块查找成功时的平均查找长度 ASL’blk=(b+1)/2+(s+1)/2=(s2+2s+n)/(2s) ①在表中插入或删除一个记录时,只要找到该记录所属的块,就在该块内进行插入和删除运算。 ②因块内记录的存放是任意的,所以插入或删除比较容易,无须移动大量记录。 8.3 树表的查找 1、二叉排序树的定义 二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree)。其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树: (1)若它的左子树非空,则左子树上所有结点的值均小于根结点的值; (2)若它的右子树非空,则右子树上所有结点的值均大于根结点的值; (3)左、右子树本身又各是一棵二叉排序树。 (1) 二叉排序树中任一结点x,其左(右)子树中任一结点y(若存在)的关键字必小(大)于x的关键字。 (2) 二叉排序树中,各结点关键字是惟一的。 (3) 按中序遍历该树所得到的中序序列是一个递增有序序列。 二叉排序树的存储结构 typedef int KeyType; typedef struct node { ? KeyType key; /*关键字类型*/ ? infoType otherinfo; /*结点其它信息类型*/ struct node *lchild,*rchild; } BSTNode; /*二叉排序树的结点类型*/ typedef BSTNode *BSTree; 在二叉排序树中插入新结点,要保证插入后仍满足BST性质。其插入过程是: 1)若二叉排序树T为空,则为待插入的关键字key申请一个新结点,并令其为根; 2)若二叉排序树T不为空,则将key和根的关键字比较: ????(a)若二者相等,则说明树中已有此关键字key,无须插入。 ????(b)若keyT→key,则将key插入根的左子树中。 ????(c)若keyT→key,则将它插入根的右子树中。 二叉排序树插入新结点的算法 ??void InsertBST(BSTree Tptr,Keytype key) ????? {??BSTNode *f,*p=Tptr; ??????? wh
您可能关注的文档
最近下载
- 建筑施工高处作业安全技术规范JGJ80-202420240805.pptx VIP
- 【精编版】部编教材四年语文上册全册课后作业(含答案解析) .pdf VIP
- BHE-336F风电-光伏箱变智能监控装置说明书.pdf VIP
- 通力电梯LCE无机房KDM KDL中文注释版电气原理图.pdf
- 第二单元+探索+3+物联网的定位技术+课件+2024—2025学年苏科版(2023)+初中信息技术八年级上册.pptx VIP
- 人教版美术七上 第一单元第1课《情感的表达》课件.pptx
- 2025年招聘考试宝典物流经理竞聘笔试模拟题与答案详解.docx VIP
- 小学语文六年级上册期末试卷 (21).doc VIP
- 关于勤奋学习的名人故事(通用63则).docx VIP
- 2025年压裂装备市场分析报告.docx
文档评论(0)