- 1、本文档共77页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8.1查找的基本概念 查找(Searching)的定义是:给定一个关键字值K,在含有n个结点的表中找出关键字等于给定值K的结点。若找到,则查找成功,返回该结点的信息或该结点在表中的位置;否则查找失败,返回相关的指示信息。 查找表的数据结构表示 若在查找的同时对表做修改操作(如插入和删除等),则相应的表称之为动态查找表(Dynamic Search Table)。否则称之为静态查找表(Static Search Table)。 若整个查找过程都在内存进行,则称之为内查找;反之,若查找过程中需要访问外存,则称之为外查找 顺序查找的优点 算法简单,且对表的结构无任何要求,无论是用向量还是用链表来存放结点,也无论结点之间是否按关键字有序,它都同样适用。 顺序查找的缺点 查找效率低。 二分查找又称折半查找,它是一种效率较高的查找方法。 二分查找要求:线性表是有序表,即表中结点按关键字有序,并且要用向量作为表的存储结构。不妨设有序表是递增有序的。 例:设算法的输入实例中有序的关键字序列为:??? 05,13,19,21,37,56,64,75,80,88,92查找的关键字K=21 第一步:05,13,19,21,37,56,64, 75,80,88,92 二分查找判定树的组成 圆结点即树中的内部结点。树中圆结点内的数字表示该结点在有序表中的位置。 外部结点:圆结点中的所有空指针均用一个虚拟的方形结点来取代,即外部结点。 当查找时找到外部节点时,表示查找的值没有在该有序表中 二分查找的平均查找长度 二分查找成功时的平均查找长度为:? ASLbn≈lg(n+1)-1 二分查找在查找失败时所需比较的关键字个数不超过判定树的深度,在最坏情况下查找成功的比较次数也不超过判定树的深度。即为: ??????? 二分查找的优点和缺点 虽然二分查找的效率高,但是要将表按关键字排序。 二分查找只适用顺序存储结构。为保持表的有序性,在顺序结构里插入和删除都必须移动大量的结点。 分块查找 分块查找表存储结构 分块查找表由分块有序的线性表和索引表组成。 查找关键字等于给定值K=24的结点 (见P199) 因为索引表小,不妨用顺序查找方法查找索引表。即首先将K依次和索引表中各关键字比较,直到找到第1个关键宇大小等于K的结点,由于K48,所以关键字为24的结点若存在的话,则必定在第二块中;然后,由ID[2].addr找到第二块的起始地址7,从该地址开始在R[7..12]中进行顺序查找,直到R[11].key=K为止。 算法分析 分块查找是两次查找过程。整个查找过程的平均查找长度是两次查找的平均查找长度之和。 以二分查找来确定块,分块查找成功时的平均查找长度 ASLblk=ASLbn+ASLsq≈lg(b+1)-1+(s+1)/2≈lg(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)若二者相
您可能关注的文档
- 组织行为学 作者 刘怫翔 3 第三章 价值观、态度与情绪.ppt
- 旅游电子商务 作者 杨路明 旅游电子商务01.ppt
- 旅游电子商务 作者 杨路明 旅游电子商务02.ppt
- 旅游电子商务 作者 杨路明 旅游电子商务03.ppt
- 旅游电子商务 作者 杨路明 旅游电子商务04.ppt
- 旅游电子商务 作者 杨路明 旅游电子商务07.ppt
- 旅游电子商务 作者 杨路明 旅游电子商务11.ppt
- 旅游电子商务 作者 杨路明 旅游电子商务12.ppt
- 旅游法规教程 作者 赵利民 主编 第二章.ppt
- 旅游法规教程 作者 赵利民 主编 第六章 旅游饭店.ppt
- 绿电2022年系列报告之一:业绩利空释放,改革推动业绩反转和确定成长.docx
- 化学化工行业数字化转型ERP项目企业信息化规划实施方案.pdf
- 【研报】三部门绿电交易政策解读:溢价等额冲抵补贴,绿电交易规模有望提升---国海证券.docx
- 中国债券市场的未来.pdf
- 绿电制绿氢:实现“双碳”目标的有力武器-华创证券.docx
- 【深度分析】浅析绿证、配额制和碳交易市场对电力行业影响-长城证券.docx
- 绿电:景气度+集中度+盈利性均提升,资源获取和运营管理是核心壁垒.docx
- 节电产业与绿电应用年度报告(2022年版)摘要版--节能协会.docx
- 2024年中国人工智能系列白皮书-智能系统工程.pdf
- 如何进行行业研究 ——以幼教产业为例.pdf
文档评论(0)