四、关于“排序方法的时间复杂度的下限”
本章讨论的各种排序方法,除基数排序外,其它方法都是基于“比较关键字”进行排序的排序方法,可以证明,这类排序法可能到达的最快的时间复杂度为O(nlogn)。(基数排序不是基于“比较关键字”的排序方法,所以它不受这个限制)
例如:对三个关键字进行排序的判定树如下:
1. 树上的每一次“比较”都是必要的。
2. 树上的叶子结点包含所有可能情况。
一般情况下,对n个关键字进行排序,可能得到的结果有n!中,对于含n!个叶子结点的二叉树的深度不小于,则对n个关键字进行排序的比较次数至少是。利用斯蒂林近似公式
所以,基于“比较关键字”进行排序的排序方法,可能达到的最快的时间复杂度为O(nlogn).
10.8外部排序
一、问题的提出
1.待排序的记录数量很大,不能一次装入内存,则无法利用前几节讨论的排序方法(否则将引起频繁访问内存);
2.对外存中数据的读、写是以“数据块”为单位进行的;
读、写外存中一个“数据块”的数据所需要的时间为:
二、外部排序的基本过程
由相对独立的两个步骤组成:
1. 按可用内存大小,利用内部排序方法,构造若干(记录的)有序子序列,通常称外存中这些有序子序列为“归并段”;
2. 通过“归并”,逐步扩大(记录的)有序子序列的长度,直至外存中整个记录序列按关键字有序为止。
例如:假设有一个含10000个记录的磁盘文件,而当前所用的计算机一次只能对1000个记录进行内部排序,则首先利用内部排序的方法得到10个初始归并段,然后进行逐趟归并。
假设进行2-路归并(即两个归并),则
第一趟由10个归并段得到5个归并段;
第一趟由5个归并段得到3个归并段;
第一趟由3个归并段得到2个归并段;
最后一趟归并得到整个记录的有序序列
分析上述外部排序过程中访问外存(对外存进行读、写)的次数;
假设“数据块”的大小为200,即每一次访问外存可以读、写200个记录。则对于10000个记录,处理一遍需访问外存100次(读和写各50次)。
由此,对上述例子而言,
1) 求得10个初始归并段需访问外存100次。
2) 每进行一趟归并需访问外存100次
3) 总计访问外存100+4*100=500次
外排总的时间还应包括内部排序所需时间和逐趟归并时进行内部归并的时间,显然,出去内部排序的因素外,外部排序的时间取决于逐趟归并所需进行的“趟数”。
例如,若对上述例子采用5-路归并,则只需进行2趟归并,总的访问外存次数将压缩到100+2*100=300次。
一般情况下,假设带排记录序列含m个初始归并段,外排时采用k-路归并,则归并趟数显然,随k的增大归并的趟数将减少,因此,对外排而言,通常采用多路归并。K的大小可选,但需综合考虑各种因素。
第十二章文件
12.1有关文件的基本概念
12.2顺序文件
12.3索引文件、
12.4索引顺序文件
12.5 直接存取文件
12.6 多关键字文件
12.1有关文件的基本概念
一、文件即为记录的集合,和“查找表”的差别在于,“文件”指的是存储在外存储器中的记录的集合,记录是文件中可以存取的数据的基本单位。
二、文件可按其中记录的类型不同而分成两类:
其一为操作系统的文件,文件中的记录仅是一个字符组。由于操作系统的文件仅是一维的连续字符序列,为了用户存取和加工的方便,将文件中的信息划分为若干个组,其中每一组信息称作一个记录。
其二、数据库文件,文件中的记录带有结构,是数据项的集合。记录是文件中可以存取的数据基本单位,数据项是文件中可以使用的数据最小单位。
三、记录中能识别不同记录的数据项被称为关键字,若该数据项能唯一识别一个记录,则称为主关键字,若能识别多个记录则称为次关键字。
四、文件的逻辑结构指的是呈现在用户面前的文件中记录之间的逻辑关系;文件的物理结构指的是文件中逻辑记录在存储器中的组织方式。
五、文件的操作
1.检索
顺序存取:存取“当前记录的”下一个记录。
直接存取:存取第i个记录
按关键字存取:存取其关键字等于给定值的记录。
2.修改
往文件中插入一个或一批记录;
从文件中删除一个或一批记录;
更新文件中某个记录的属性。
3. 排序
外部排序
本章讨论文件的几种常见的物理结构:
顺序文件、索引文件、索引顺序文件、直接存取文件、多关键字文件
12.2 顺序文件
结构特点:
记录在文件中的排列顺序是由记录进入存储介质的次序决定的,即文件物理结构中记录的排列顺序和文件的逻辑结构中记录的排列顺序一致。
顺序文件的具体组织形式有两种:
连续文件:次序相机的两个物理记录其存储位置相邻
串联文件:物理记录之间的顺序由指针相链。
操作特点:
1. 便于进行顺序存取
2. 不便于进行直接存取,为取第i个记录,必须先读取前i-1个记录,对于磁盘上等长记录的连续文件可以进行折半查找。
3. 插入新的记录只能在文件的末尾
4. 删除记录时,只做标记;
5. 更新记录必须生成新的文件。