版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章
文件和外排序
主要内容11.2文件11.3文件的索引结构11.4外排序
11.2文件
11.2.1
文件的基本概念
文件是逻辑上相关的记录的集合。
通常一个文件的各个记录是按照某种次序排列起来的。可以按记录中关键字值的大小,也可以按各个记录存入文件的时间先后排列。这样各记录间自然形成一种线性关系,所以一般情况下,文件被看成是一种线性结构。
两种不同类型的文件:操作系统文件和数据库文件。
操作系统文件仅仅是一维的连续的字符序列,无结构无解释。它也可以看成是记录的集合,每个记录只是一个字符组。每组信息称为一个逻辑记录,且进行编号,以方便按记录号存取和处理
数据库文件是带有结构的记录的集合。这类记录本身是由一个或多个数据项组成,也称逻辑记录。
逻辑记录是从用户角度看到的记录,由逻辑记录组成的文件称为逻辑文件。
文件是存在外存储器上的。为了有效分配外存空间,多个扇区通常形成簇或块。簇(块)是文件的最小分配单位,它们的大小由操作系统决定。文件存储器上的文件称为物理文件,一簇或块(物理块)中的信息称为物理记录用户读/写的记录是指逻辑记录,查找该逻辑记录所在的物理块是操作系统文件管理器的职责,文件管理是操作系统的主要功能模块。
11.2.2文件的组织方式
文件结构是外存数据的组织方式。文件结构的原则主要是使磁盘访问次数最少。几种基本的文件组织方式(即文件结构):顺序文件、散列文件、索引文件和倒排文件。
顺序文件是顺序存放的线性表。顺序文件分两种:串行处理文件和顺序处理文件
串行处理文件
记录未按关键字值排序,一般按记录存入文件的先后次序
顺序处理文件
记录已按关键字值的大小排列。1.顺序文件
举例:串行处理文件
串行处理文件的顺序搜索
由于串行处理是无序的,对这样的文件按关键字搜索是从文件的第一个记录开始,依此将待查关键字值与文件中的记录的关键字值进行比较,直到成功找到该记录,或直到文件搜索完毕,搜索失败为至。
顺序处理文件的搜索
顺序文件已按关键字排序。搜索方法:有序表上的各种搜索方法原则上都可以用于顺序处理文件的搜索,如顺序搜索和二分搜索等。但是由于文件是外存上的数据结构,在考虑算法时,必须立足于尽量减少访外次数,因此顺序处理文件的搜索算法有自己的特点。下面介绍顺序处理文件上的分块插值搜索
设顺序处理文件有n个记录R1,R2,…,Rn
,顺序存储在m个(物理)块中。并已知记录的关键字值为:K1,K2,…,Kn。K1是最小关键字值,Kn是最大关键字值。现要在该文件中搜索关键字值为K的记录。设low和high分别是搜索范围内的最小块号和最大块号。
L和H分别是该搜索范围内的最小关键字值和最大关键字值。则下一次读入内存的块号i为:i=low+
((K–L)/(H-L))
(high-low)
c)分块插值搜索:分块插值搜索:是首先在m个块范围内决定被读入内存进行搜索的块号。第一次被读入内存的块号i按下式计算:i=1+
((K–K1)/(Kn-K1))
(m-1)
12345…m若Li
K
Hi,则i即为所求的块,可在该块中去搜索待查关键字值K;若K<Li,则下次搜索的块号范围为[l,i-1],并且新的H将是Li;若K>Hi,则下一次被搜索的块号的范围为[i+1,u],
并且新的L将是Hi。分块插值搜索是一种比较高效的顺序处理文件的搜索方法。尤其当文件中的关键字值分布比较均匀时,显得更有效,常常一次或两次访外操作即可命中。12345…mliuLi
…Hi
2.散列文件
记录通常是成组存放,若干个记录组成一个存储单位,在散列文件中,这个存储单位叫做桶。每个桶有一个散列地址。若一个桶能存放K个记录,K个同义词记录存放在同一个地址的桶中,只有当第K+1个同义词出现时才发生“溢出”处理溢出采用拉链的方法基桶和溢出桶大小相同,用指针相链接
基桶溢出桶
插入记录可将其插在最后一个桶(基桶或溢出桶)中,若该桶已装满,则在该桶后新增加一个溢出桶,将新记录插入该新桶中。或先从基桶开始查找可用空间,包括被打上删除标记的空间。如有,则将新记录存于该处,否则再新增溢出桶。
删除记录仅需对被删除的记录作删除标记即可。或当被删除的记录不在最后一个桶中时,将最后一个桶中的记录移到存放被删除记录的位置。
索引表是关键字值和指针的偶对的集合。关键字值和指针的偶对称为索引项。3.索引文件
稀疏(非稠密)索引。如果数据文件是顺序处理文件,则可对一组记录建立一个索引项,组成索引表。这时,每个索引项的关键字值是该组记录中的最大关键字值,而指针指向存放该组记录的块的起始地址。这种索引称为稀疏索引。
如果数据文件是串行处理文件,则必须对每个记录建立一个索引项,组成索引表,这种索引称为稠密索引。索引表总是按关键字值顺序排列的。
4.
倒排文件
倒排文件是对次关键字建立索引。在一个次关键字的索引表中,对该次关键字的每个值,直接列出具有该值的所有记录的存放地址。倒排文件的次索引表称为倒排表。由于倒排索引表的第一栏是某个次关键字的所有的值,第二栏才能查到相应的记录,而通常的表格第一栏总是主关键字,也许正因为这种主次颠倒,才得名倒排文件。倒排文件的好处在于对次关键字值的搜索快。倒排文件的缺点是维护困难
11.3文件的索引结构
11.3.1静态索引结构
静态索引结构
前面介绍的索引文件结构是一种静态索引结构。当数据文件很大时,索引表本身也很大,可以建立多级索引:2级索引,3级索引,…。这种多级索引形成一种静态的m叉搜索树结构。显然静态的多叉树索引结构不利于记录的频繁插入和删除。
多级索引形成一种静态的m叉搜索树结构。
11.3.2动态索引结构B+树与B-树的最显著的区别是B+树只在叶结点中存储记录。非叶结点存储索引项。每个索引项为:(关键字值,指向子树的指针),叶结点存储实际记录。叶结点中可能存储多于或少于m个记录,只是简单地要求叶结点的磁盘块存储足够的记录,以保持该块至少半满,B+树的叶结点组成数据文件。
B树的回忆定义7.3
m叉搜索树或者是一棵空树,或者是一棵满足下列特性的树:(1)
根结点最多有m棵子树,并具有如下结构:
n,P0,(K1,P1),(K2,P2),…,(Kn,Pn)其中,Pi是指向子树的指针,0
i
n<m,Ki是元素的关键字值,1
i
n<m;(2)
Ki<Ki+1,1
i<n;(3)
子树Pi上所有关键字值都大于Ki,小于Ki+1,0<i<n;(4)
子树P0上所有关键字值都小于K1,子树Pn上的所有关键字值都大于Kn;(5)
子树Pi,0
i
n也是m叉搜索树。
B树的回忆定义7.4一棵m阶B-树是一棵m叉搜索树,它或者是空树,或者是满足下列特性的树:(1)根结点至少有两个孩子;(2)除根结点和失败结点外的所有结点至少有
m/2
个孩子;(3)所有失败结点均在同一层上。
1.B+树
一棵m阶B+树或者是空树,或者是满足下列特性的树:每个非叶结点最多有m个孩子;除根结点以外的非叶结点至少有
m/2
个孩子;有k个孩子的非叶结点必须有k个关键字值;根结点至少有两个孩子;所有叶结点均在同一层上。每个B+树结点的结构如下:N,(P0,K0),(P1,K1),…,(Pn-1,Kn-1)其中,Pi是指向子树的指针,Ki是子树Pi上的最大关键字值,Ki<Ki+10
i<n<m。
B+树的搜索有两种:a)从根开始随机搜索;2.B+树的搜索、插入和删除B+树的搜索b)从顺序集的头指针开始顺序搜索。
B+树的删除
从B+树中删除一个结点的情形类似于B-树的删除。从叶结点中删除一个记录后,如果该结点的关键字值数目仍在许可范围内,则删除操作结束,即使被删除的关键字值是当前结点的最大关键字值,也不必修改父结点的关键字值,因为它并不影响索引作用。
在B+树上插入一个记录首先搜索应当包含该记录的叶结点。如果该叶结点未满,则直接将该记录插入后操作结束。如果叶结点已满,则叶结点应进行分裂,建立一个新叶结点,将前一半记录复制到新结点中。然后将指向新结点的指针和前一半记录的最大关键字值构成一个索引项,插到上一层结点中。在父结点中插入一个索引项的过程与上面相同,同样也可能引起结点分裂。B+树的插入
11.4外排序内容提要:1.外排序的基本过程2.初始游程的生成3.2路合并和多路合并4.胜方树和败方树
11.4.1外排序的基本过程
在外存上进行排序的最通常的方法是合并排序。这种方法由两个相对独立的阶段组成:(1)预处理首先根据内存的大小,将有n个记录的磁盘文件分批读入内存,采用有效的排序方法进行排序,将其预处理为若干个有序的子文件。这些有序子文件被称为初始游程或顺串。(2)合并排序然后采用合并的方法将这些初始游程逐趟合并成一个有序文件。
11.4.2初始游程的生成
为得到初始游程,可选择一种有效的内排序方法,将待排序的磁盘文件中的记录尽可能多地读入内存进行排序。生成初始游程算法有三步:
(1)建立初始堆
(2)置换选择排序
(3)输出内存中的剩余记录
采用置换选择方法(堆排序的变体)。设内存能容纳p个记录,则用该方法可得到平均长度为2p的初始游程。
1.建立初始堆从输入文件中输入p个记录,建立大小为p的堆。为第一个初始游程选择一个适当的磁盘文件作为输出文件。2.置换选择内存中会同时存在两个堆:当前堆和新堆。(1)输出当前堆的堆顶记录到选定的输出文件。
(2)从输入文件中输入下一个记录。
①若该输入记录的关键字值不小于刚输出的关键字值,则由它取代堆顶记录,并调整当前堆。②若该输入记录的关键字值小于刚输出的关键字值,则由当前堆的堆底记录取代堆顶记录,并调整之,当前堆的体积减少。新输入的记录将存放在当前堆的原堆底记录的位置上,成为新堆的一个记录。这时,如果新堆的记录个数超过
p/2
时,应着手调整新堆;如果新堆中已有p个记录,表示当前堆已输出完毕,当前的初始游程结束,应当开始创建下一个初始游程,因此必须另为新堆选择一个磁盘文件作为输出文件。③重复②,直到输入文件输入完毕。
3.输出剩余记录输出当前堆中的剩余记录,并边输出边调整。将内存中的新堆作为最后一个初始游程输出。例18个记录的文件:5,8,2,1,9,7,6,4。设p=31.建立初始堆读入3个记录,建堆。选择输出文件file2582285
i2.置换选择
(1)输出堆顶元素(2)到file2:2。从输入文件中输入1,因1<2,故581i
(2)输出堆顶元素5到file2:2,5。读入9,因9>5,故981i
新堆891i
新堆
当前堆新堆
例2.设P=5,现有输入文件为(503,87,512,61,908,170,275,154,509,426,523,289,456,329,77,135,500,266).初始游程产生过程如下:1.建立初始堆
2。置换选择(503,87,512,61,908,170,275,154,509,426,523,289,456,329,77,135,500,266).输出文件:61输出文件:61,87输出文件:61,87,170输出文件:61,87,170,275170275503154新堆509426908523289523
堆的记录个数超过
p/2
时,应着手调整新堆新堆有p个记录时,当前的初始游程结束输入文件输入完毕(503,87,512,61,908,170,275,154,509,426,523,289,456,329,77,135,500,266).输出523456908329输出523,908输出154,作为新的初始游程77456新堆
3。输出剩余记录将内存中的新堆作为最后一个初始游程输出。
得到如下三个初始游程
61,87,170,275,503,509,512,523,908,154,289,329,426,456,50077,135,266
11.4多路合并
对第一阶段的预处理所产生一组初始游程(即有序子序列),可以使用合并的方法将它们合并成一个有序序列。将一组有序子文件合并成一个有序文件可以采用两路合并,也可以采用多路合并的方式进行。其中,1~8为游程编号;且每个游程局部有序。
14235867123456781234567812345678两路合并树两路合并树的高度是
log2m
+1,其中,m是初始游程的数目
123456782路合并树123456784路合并树
k路合并树的深度为:
logkm+1。k表明合并的路数,m为初始游程数。
合并趟数=树高-1。如2路合并3趟,4路合并2趟。合并趟数少(k大),读写次数就少,可以减少合并的时间。
k路合并时,需要从k个游程的K个最小元素中求其中最小者输出,需比较k-1次。n个记录,每趟比较n(k-1)次,合并
logkm
趟,故:总的比较次数=n(k-1)
logkm=n(k-1)
log2m/log2k
可见,k大会增加总的比较次数,从而影响合并效率。采取下面介绍的竞赛树方法可减少从K路中找出最小关键字值所需的比较次数
竞赛树
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- app软件外包合同
- 互联网服务外包合同
- 人力资资源外包合同
- 会务礼仪外包合同
- 企业厨房外包合同
- 体育老师外包合同
- 健身房卫生外包合同
- 入职签署外包合同
- 公墓服务外包合同
- 写字楼客服外包合同
- 海尔卡萨帝洗衣机XQGH100-HBF1427W说明书
- 缠论-简单就是美
- 河北省沧州市2022-2023学年五年级下学期数学期末试卷(含答案)
- 渠道开发与管理(第3版) 巩固练习题
- 高新技术企业认定管理办法及工作指引解读
- 天融信防火墙NGFW4000配置手册
- 石油化工设备维护检修规程版第七册:仪表
- 核电站反应堆控制棒驱动机构课件
- 贵州省2023年中考数学试卷(附答案)
- 国际航运管理课程设计
- 危险化学品无仓储经营责任规章制度及操作规程
评论
0/150
提交评论