- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七章 索引结构与散列技术索引结构和散列技术是在实际应用中大量使用的存储方法,在进行数据查找运算时会经常用到这两种存储技术。索引结构及查找散列技术 应用实例索引结构包括两部分:索引表和数据表。指明结点与其存储位置之间的对应关系的表就叫做索引表;数据表是存储结点信息的,索引结构中常用的数据表是线性表。 索引表中的每一项称作索引项,索引项的一般形式是:(关键字,地址)。其中关键字是能唯一标识一个结点的那些数据项。 如果数据表中的记录按关键字顺序排列,这时的索引结构称索引顺序结构。反之,若数据表中的数据未按关键字顺序排列时,则称索引非顺序结构。 索引结构基本概念线性索引 对于索引非顺序结构,由于数据表中的记录是无序的,则必须为每个记录建立一个索引项,这种一个索引项对应数据表中一个对象的索引结构称为稠密索引。 两种线性索引的比较对于索引顺序结构,由于数据表中的记录按关键字有序,则可对一组记录建立一个索引项,这种索引称为稀疏索引。在稠密索引中,索引项中的地址将指出结点所在的存储位置。而在稀疏索引中,索引项中的地址指出的则是一组结点的起始存储位置。无论是稠密索引还是稀疏索引,都属于线性索引索引结构上的检索 查找索引表,若索引表上存在该记录,则根据索引项的指示在数据表中读取数据;否则说明数据表中不存在该记录,也就不需要访问数据表。 由于索引表是有序的,则索引表的查找既可顺序查找,又可使用折半查找。 索引结构查找方法 —— 分块查找分块查找性能介于顺序查找和二分查找之间的查找方法,又称索引顺序查找。构造方法:(1) 将数据表R[n]均分成b块,前b-1块中记录数为S=?n/b? ,第b块的记录数小于等于S;(2) 前一块中的最大关键字必须小于后一块中的最小关键字,即要求表是“分块有序”的; (3) 抽取各块中的最大关键字及其起始位置构成一个索引表ID[i],即ID[i](0≤i<b)中存放着第i块的最大关键字及该块在表R中的起始位置。由于表是分块有序的,所以索引表是递增有序表分块查找的存储结构示例下图表R中只有18个记录,被分成3块,每块中有6个记录,第一块中最大关键字22小于第二块中最小关键字24,第二块中最大关键字48小于第三块中最小关键字49。 分块查找的存储结构示例(1) 由于索引表有序,故可采用顺序查找或折半查找索引表,以确定待查找的记录在哪一块; (2) 在已确定的那一块中进行顺序查找。说明: 由于分块查找是两次查找过程,故分块查找的算法即为这两种算法的简单合成,而整个算法的平均查找长度,即是两次查找的平均查找长度之和。 typedef struct{ // 索引表的结点类型 Keytype key; int addr;}Idtable;Idtable ID[b];//索引表 多级索引 二级索引(建立索引的索引 )结构的示例: 二级索引中一个索引项对应一个索引块,登记该索引块的最大关键字及该索引块的存储地址。在搜索时,先在二级索引中搜索,确定索引块地址;再把该索引块读入内存,确定数据结点的地址;最后读入该数据结点。 多级索引建立二级索引的索引,叫做三级索引。在三级索引情况下,访问外存次数等于读入索引次数再加上1次读取数据。也可以建四级索引,五级索引,…。这种多级索引结构形成一种m叉树,也称m路搜索树。多级索引是一种静态结构,各级索引均为顺序表,每次修改都要重组索引。因此,当数据表在使用过程中记录变动较多时,应采用动态索引,例如二叉排序树,它本身是层次结构,无需建立多级索引,而且建立索引表的过程即排序过程。 倒排表在实际应用中有时需要针对其它非关键字的属性进行检索。例如,查询如下的学生信息: 1)列出所有籍贯为陕西的学生名单; 2)列出所有的女生名单。 可以把一些经常查询的属性设定为次关键字,并针对每一个次关键字属性,建立一个称为次索引的索引表:列出该属性的所有取值,并对每一个取值建立有序链表,并按存放地址递增的顺序或按关键字递增的顺序链接在一起。倒排表是一种次索引的实现。在倒排表中所有次关键字的链都保存在次索引中,仅通过搜索次索引就能找到所有具有相同属性值的记录。 倒排表倒排表查找时:先通过搜索次索引以确定该记录的主关键字,再通过搜索主索引确定记录的存放地址。这样在记录的存放地址发生变化时,只需修改主索引,次索引可以不用改动。 散列表的查找问题 能否构造一种查找方法与比较次数无关或关系较小?散列表查找可达到这一要求:不用比较而直接计算出记录所在地址,从而可直接进行存取的方法。散列表查找的基础是散列存储结构。散列表的概念以结点的关键字k为自变量,通过一个确定的函数关系f,计算出对应的函数值,把这个值解释为结点的存储地址,将结点存入f(k)所指的存储位置上。该方法称为散列法;又称关键字——地址转换法。用散列法存储的线性表
原创力文档


文档评论(0)