- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基本概念 线性表的查找 树表的查找 哈希表查找 查找的概念 查找表:同类型元素(记录)构成的集合,每个元素具有一个关键字域。 关键字:记录中用以标识一个记录的值。 能够唯一标识一个记录的关键字称为主关键字(码)。 能识别若干记录的关键字,则称为“次关键字”。 查找(搜索):给定一个值,在查找表中确定是否存在一个记录,其关键字等于给定的值。 如果存在,则查找成功,结果是相应记录的内容,或者记录的位置; 如果不存在,则查找失败,结构是空记录或者空指针。 对查找表进行的操作有以下四种: 查询某个特定的数据元素是否在查找表中。 检索某个特定的数据元素的各种属性。 在查找表中插入一个数据元素。 从查找表中删除某个数据元素。 查找表可分为两类: 静态查找表:对查找表只作前两种操作 。 动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已存在的某个数据元素。 如何实现查找呢? 查找方法与查找表的“结构”密切相关; 查找问题的目标:合理组织数据,实现高效查找。 查找的效率: 主要操作:关键码比较; 主要时间指标:平均查找长度ASL(Average Search Length); 其它指标:存储空间,算法复杂程度。 线性表的查找(静态查找表) 顺序表的查找 有序表的查找 索引顺序表的查找 顺序查找 二分查找 基本思想: 在有序表中,首先用要查找的关键字值与中间位置结点的关键字值相比较;比较结果如果相等,则查找完成;若不相等,再根据要查找的关键字值与该中间结点关键码值的大小来确定下一步查找在哪个子表中进行:如果待查关键字大于中间结点的关键字值,则应查找中间结点以后的子表,否则,查找中间结点以前的子表。 折半查找判定树 :折半查找过程可用二叉树来形象的描述,把当前查找区间的中间位置上的结点作为根,左子表和右子表中的结点分别作为根的左子树和右子树,由此得到的二叉树,称为描述折半查找的判定树。 实例: 分块查找(索引顺序表的查找) 基本思想:把线性表分成若干块,在每一块中结点的存放是任意的,块与块之间必须排序;建立一个索引表,存放每块中最大的关键字值;查找时首先用要查找的关键字值在索引表中查找,确定应在哪一块中,然后再到相应的块中顺序查找。 该法要为被查找的表建立一个索引表,索引表中的一项对应于表中的一块,索引表中含有这一块中的最大关键字和指向块内第一个记录位置的指针,索引表中各项关键字有序。 3.二叉排序树的插入算法 根据动态查找表的定义,“插入”操作在查找不成功时才进行; 二 平衡二叉树(AVL树) 概念:或者是一棵空树,或者是具有下列性质的二叉树: 它的左子树和右子树都是平衡二叉树。 左子树和右子树的深度之差的绝对值不超过1。 实例: 实例:构造关键字的序列为(1,2,3,9,5)的平衡二叉树 。 平衡处理的方法 : LL型调整: RR型调整: LR型调整: RL型调整 : 多级索引结构 当数据对象个数 n 很大,或者数据量很大,由于内存容量的限制,数据对象不能全部存储在内存,这时可采用索引方法来实现存储和搜索。 稠密索引:一个索引项对应数据表中一个对象的索引结构。数据表可以是无序的。称为索引非顺序结构。 稀疏索引:当对象在外存中有序存放或者分块有序时,可以把所有 n 个对象分为 b 个子表(块)存放,一个索引项对应数据表中一个子表。索引项记录了子表中最大关键码以及该子表在数据区中的起始位置。称为索引顺序结构。 对索引顺序结构进行查找时,可分为两级查找: 有序索引表上的查找; 子表的查找 当数据对象数目特别大,索引表本身也很大,在内存中放不下,需要分批多次读取外存才能把索引表搜索一遍。 在此情况下,可以建立索引的索引,称为二级索引。二级索引可以常驻内存,二级索引中一个索引项对应一个索引块,登记该索引块的最大关键码及该索引块的存储地址。 如果二级索引在内存中也放不下,需要分为许多块多次从外存读入。可以建立二级索引的索引,叫做三级索引。这时,访问外存次数等于读入索引次数再加上1次读取对象。 m路搜索树 这种多级索引结构形成一种 m 叉树。树中每一个分支结点表示一个索引块,它最多存放 m 个索引项,每个索引项分别给出各子树结点 (低一级索引块) 的最大关键码和结点地址。 树的叶结点中各索引项给出在数据表中存放的对象的关键码和存放地址。这种m叉树用来作为多级索引,就是m路搜索树。 m路搜索树可能是静态索引结构,即结构在初始创建,数据装入时就已经定型;也可能是动态索引结构,即在整个系统运行期间,树的结构随数据的增删及时调整,以保持最佳的搜索效率。 从根结点开始,在结点内搜索;可使用顺序或折半查找; 如果结点内查找成功,则结束;否则,确定结点所在的子树; 沿指
文档评论(0)