zoukankan      html  css  js  c++  java
  • 文件归并学习 严蔚敏讲数据结构笔记26

    新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正

        四、关于“排序方法的时间复杂度的下限”

        本章探讨的各种排序方法,除基数排序外,其它方法都是基于“比较关键字”进行排序的排序方法,可以证明,这类排序法可能到达的最快的时间复杂度为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.      更新记载必须生成新的文件。

    文章结束给大家分享下程序员的一些笑话语录: 3G普不普及现在已经不是看终端了,而是看应用,有好的,便宜实用的应用,花1000多买个能用的智能手机应该不是什么难事。反过来说,你200元拿一个智能手机,没有好的应用,看个电影要几十元,也是没人用3G。

    --------------------------------- 原创文章 By
    文件和归并
    ---------------------------------

  • 相关阅读:
    unittest框架assert断言
    python logging 总结
    好文章推荐 数据库mysql
    python 日志模块 日志格式
    django admin 后台总结(转载)
    xpath解析html标签
    lua 排序table.sort()用法
    lua 随机数 math.random()和math.randomseed()用法
    三种方法获取 lua时间戳
    crontab调用python脚本新思路
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3109054.html
Copyright © 2011-2022 走看看