- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构 第11章 文件和外排序 11.2 文件 11.2.1 文件的基本概念 文件是逻辑上相关的记录的集合。 通常一个文件的各个记录是按照某种次序排列起来的。可以按记录中关键字值的大小,也可以按各个记录存入文件的时间先后排列。这样各记录间自然形成一种线性关系,所以一般情况下,文件被看成是一种线性结构。 两种不同类型的文件:操作系统文件和数据库文件。 操作系统文件仅仅是一维的连续的字符序列,无结构无解释。它也可以看成是记录的集合,每个记录只是一个字符组。每组信息称为一个逻辑记录,且进行编号,以方便按记录号存取和处理 数据库文件是带有结构的记录的集合。这类记录本身是由一个或多个数据项组成,也称逻辑记录。 逻辑记录是从用户角度看到的记录, 由逻辑记录组成的文件称为逻辑文件。 11.2.2 文件的组织方式 2. 散列文件 4. 倒排文件 11.3 文件的索引结构 11.3.1 静态索引结构 静态索引结构 多级索引形成一种静态的m叉搜索树结构。 当数据文件很大时,索引表本身也很大,可以建立多级索引:2级索引,3级索引,…。这种多级索引形成一种静态的m叉搜索树结构。 显然静态的多叉树索引结构不利于记录的频繁插入和删除。 前面提到的ISAM文件正是这种静态索引结构的一个例子。这种方法是解决需要频繁更新的大型数据库的一个早期尝试。 11.3.2 动态索引结构 B+树与B-树的最显著的区别是B+树只在叶结点中存储记录。非叶结点存储索引项。每个索引项为:(关键字值,指向子树的指针),叶结点存储实际记录。叶结点中可能存储多于或少于m个记录,只是简单地要求叶结点的磁盘块存储足够的记录,以保持该块至少半满,B+树的叶结点组成数据文件。 1. B+树 一棵m阶B+树或者是空树,或者是满足下列特性的树: 每个非叶结点最多有m个孩子; 除根结点以外的非叶结点至少有?m/2?个孩子; 有k个孩子的非叶结点必须有k个关键字值; 根结点至少有两个孩子; 所有叶结点均在同一层上。 每个B+树结点的结构如下: N,(P0,K0),(P1,K1),…,(Pn-1,Kn-1) 其中,Pi是指向子树的指针,Ki是子树Pi上的最大关键字值,KiKi+1 0?inm。 11.4 外排序 11.4.1 外排序的基本过程 在外存上进行排序的最通常的方法是合并排序。这种方法由两个相对独立的阶段组成:预处理和合并排序。即首先根据内存的大小,将有n个记录的磁盘文件分批读入内存,采用有效的排序方法进行排序,将其预处理为若干个有序的子文件。 这些有序子文件被称为初始游程或顺串。然后采用合并的方法将这些初始游程逐趟合并成一个有序文件。 11.4 多路合并 对第一阶段的预处理所产生一组初始游程(即有序子序列),可以使用合并的方法将它们合并成一个有序序列。将一组有序子文件合并成一个有序文件可以采用两路合并,也可以采用多路合并的方式进行。 11.4.4 最佳合并树 11.4.2 初始游程的生成 建立初始堆 从输入文件中输入p个记录,建立大小为p的堆。 为第一个初始游程选择一个适当的磁盘文件作为输出文件。 置换选择 内存中会同时存在两个堆:当前堆和新堆。 输出当前堆的堆顶记录到选定的输出文件。 从输入文件中输入下一个记录。 (1)若该记录的关键字值不小于刚输出的关键字值,则由它取代堆顶记录,并调整当前堆。 (2)若该记录的关键字值小于刚输出的关键字值,则由当前堆的堆底记录取代堆顶记录,并调整之,当前堆的体积减少。新输入的记录将存放在当前堆的原堆底记录的位置上,成为新堆的一个记录。这时,如果新堆的记录个数超过?p/2?时,应着手调整新堆;如果新堆中已有p个记录,表示当前堆已输出完毕,当前的初始游程结束,应当开始创建下一个初始游程,因此必须另为新堆选择一个磁盘文件作为输出文件。 (3)重复(2),直到输入文件输入完毕。 输出剩余记录 输出当前堆中的剩余记录,并边输出边调整。 将内存中的新堆作为最后一个初始游程输出。 ?得到如下三个初始游程 61, 87, 170, 275, 503, 509, 512, 523, 908, 154, 289, 329, 426, 456,500 77, 135,266 Data Structures in C++ 11.2 文件 11.3 文件的索引结构 11.4 外排序 文件是存在外存储器上的。为了有效分配外存空间,多个扇区通常形成簇或块。簇(块)是文件的最小分配单位,它们的大小由操作系统决定。 文件存储器上的文件称为物理文件,一簇或块(物理块)中的信息称为物理记录 用户读/写的记录是
您可能关注的文档
最近下载
- 第8课 中国古代的法治与教化 课件(共27张PPT)(内嵌音频+视频).pptx VIP
- 第四章:as-ad模型习题&答案.doc VIP
- 牙周病治疗翻瓣术.ppt VIP
- 《OSI参考模型体系》课件.ppt VIP
- 2025年牙周病治疗翻瓣术.pptx VIP
- GB50303-2015 建筑电气工程施工质量验收规范.docx VIP
- 2025年陕西省高考生物试卷真题(含答案解析).docx
- 线路板厂安全生产应急预案.docx
- 第一章 1.中融-隆晟1号结构化集合资金信托计划优先A12信托计划说明书.pdf VIP
- 2025-2030中国六氟磷酸锂(LiPF6)市场发展现状及竞争格局研究研究报告.docx
文档评论(0)