19. 蛤蟆的数据结构进阶十九外部排序相关概念

19. 蛤蟆的数据结构进阶十九外部排序相关概念

本篇名言:“一个人最怕不老实,青年人最可贵的是老实作风。 "老实 "
就是不自欺欺人,做到不欺骗人家容易,不欺骗自己最难。 "老实作风 "
就是脚踏实地,不占便宜。世界上没有便宜的事,谁想占便宜水就会吃亏。 --徐特立”

之前我们学习的排序都是内部排序的,接下去来看下外部排序。

欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47844037

1.  外部排序

指的是大文件(外存文件)中的记录进行排序的过程,即待排序的记录存储在外存储器上,在排序过程中需进行多次的内、外存之间的交换。

外部排序基本上由两个相对独立的阶段组成。

(1)首先,按可用内存大小,将外存上含n个记录的文件分成若干长度为 L的子文件或段,依次读入内存并利用有效的内部排序方法对它们进行排序,并将排序后得到的有序子文件重新写入外存。通常称这些有序子文件为归并段或顺串。

(2)然后,对这些归并段进行逐趟归并,使归并段(有序的子文件)逐渐由小至大,直至得到整个有序文件为止。

1.1             举例说明

假设有一个含10000个记录的文件,首先通过10次内部排序得到10个初始归并段R1~R10,其中每一段都含1000个记录。然后对它们作如下图所示的两两归并,直至得到一个有序文件为止。

上图可见,由10个初始归并段到一个有序文件,共进行了四趟归并,每一趟从 m 个归并段得到[m/2]个归并段。这种归并方法称为2-路平衡归并。

假设,在上例中每个物理块可以容纳 200个记录,则每一趟归并需进行50次“读”和50次“写”,四趟归并加上内部排序时所需进行的读/写使得在外排中总共需进行500次的读/写。

一般情况下,外部排序所需总的时间 =

内部排序(产生初始归并段)所需的时间 M * tIS

+   外存信息读写的时间 d * tIO

+   内部归并所需的时间 S * utmg

其中:

M   经过内部排序之后得到的初始归并段的个数;

tIS  为得到一个初始归并段进行内部排序所需时间的均值

d   总的读/写次数;

tIO  进行一次外存读/写时间的均值;

S   归并的趟数;

utmg 对u个记录进行内部归并所需时间。

由此,上例 10000个记录利用2一路归并进行外排所需总的时间为:  10* tIS+500* tIO+4*10000tmg

其中tIO取决于所用的外存设备,显然,tIO (进行一次外存读/写时间的均值)较tmg (内部归并所需时间)要大得多。因此,提高外排的效率应主要着眼于减少外存信息读写的次数 d 。

1.2             分析外存信息读写的次数d和“归并过程”的关系

若对上例中所得的10个初始归并段进行5-路平衡归并(即每一趟将5个或5个以下的有序子文件归并成一个有序子文件),则从下图可见,仅需进行2趟归并,外排时总的读/写次数便减至 2 x 100+ 100= 300,比 2-路归并减少了 200次的读/写。

可见,对同一文件而言,进行外排时所需读/写外存的次数和归并的趟数S成正比而在一般情况下,对 m个初始归并段进行 k-路平衡归并时,归并的趟数

s = [km]

可见,若增加 k 或减少 m 便能减少 s 。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-01 22:47:40

19. 蛤蟆的数据结构进阶十九外部排序相关概念的相关文章

10. 蛤蟆的数据结构进阶十排序相关概念

10. 蛤蟆的数据结构进阶十排序相关概念 本篇名言:"生,亦我所欲也:义,亦我所欲也:二者不可得兼,舍生而取义者也.--孟轲" 接下去我们将来看下排序相关的知识. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47381339 1.  排序 排序是什么? 将一组杂乱无章的记录按一定规律顺序排列起来. 什么排序方法是稳定的?什么是不稳定的? 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记

16. 蛤蟆的数据结构进阶十六排序实现之基数排序

16. 蛤蟆的数据结构进阶十六排序实现之基数排序 本篇名言:"社会犹如一条船 ,每人都要有掌舵的准备.--易卜生" 我们来看下基数排序. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47760601 1.  基数排序 基数排序(radix sort)属于"分配式排序"(distributionsort),又称"桶子法"(bucket sort)或bin sort,顾名思义,

15. 蛤蟆的数据结构进阶十五排序实现之堆排序

15. 蛤蟆的数据结构进阶十五排序实现之堆排序 本篇名言:"谁要是游戏人生 ,他就一事无成 ; 谁不能主宰自己 ,永远是一个奴隶.--歌德" 继续来看下堆排序. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47733553 1.  堆排序 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种.可以利用数组的特点快速定位指定索引的元素.堆分为大根堆和小根堆,是完全二叉树

14. 蛤蟆的数据结构进阶十四排序实现之简单选择排序

14. 蛤蟆的数据结构进阶十四排序实现之简单选择排序 本篇名言:"即是我们是一支蜡烛也应该 " 蜡烛成灰泪始干 " 即使我们只是一根火柴也要在关键时刻有一次闪耀即使我们死后尸骨都腐烂了解也要变成磷火在荒野中燃烧. -- 艾青" 继续来看什么是简单选择排序. 欢迎转载,转载请标明出处: 1.  简单选择排序 设所排序序列的记录个数为n.i取1,2,-,n-1,从所有n-i+1个记录(Ri,Ri+1,-,Rn)中找出排序码最小的记录,与第i个记录交换.执行n-1趟后就完

18. 蛤蟆的数据结构进阶十八排序实现之快速排序

18. 蛤蟆的数据结构进阶十八排序实现之快速排序 本篇名言:"一个人做点好事并不难,难的是一辈子做好事,不做坏事.--毛泽东" 我们最后来看下快速排序,以及各个排序之间的一些信息汇总. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47817933 1.  快速排序 快速排序由C. A. R.Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分

12. 蛤蟆的数据结构进阶十二排序实现之直接插入法

12. 蛤蟆的数据结构进阶十二排序实现之直接插入法 本篇名言:"路是脚踏出来的 ,历史是人写出来的,人的每一步行动都在书定自己的历史. --吉鸿昌" 接下来看下直接插入法的实现. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47687631 1.  直接插入法 直接插入排序(straightinsertion sort) 每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序. 第一趟比较前两

8. 蛤蟆的数据结构进阶八哈希表相关概念

8. 蛤蟆的数据结构进阶八哈希表相关概念 本篇名言:"作家当然必须挣钱才能生活,写作,但是他决不应该为了挣钱而生活,写作.--马克思" 前些笔记我们学习了二叉树相关.现在我们来看下哈希表.这篇先来看下哈希表的相关概念 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47347273 1.  哈希表的概念 哈希表(HashTable)也叫散列表,是根据关键码值(Key Value)而直接进行访问的数据结构.它通过把关键

6. 蛤蟆的数据结构进阶六之二叉树排序树

6. 蛤蟆的数据结构进阶六之二叉树排序树 本篇名言:"有些人因为贪婪,想得更多的东西,却把现在所有的也失掉了. -- 伊索" 关于理论知识已经在上篇中进行描述,这篇我们主要来看下如何是实现二叉排序树. 欢迎转载,转载请标明出处: 1.  二叉排序树的定义 二叉排序树(BinarySort Tree)又称二叉查找(搜索)树(Binary Search Tree).其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树: ①若它的左子树非空,则左子树上所有结点的值均小于根结点的值: ②

9. 蛤蟆的数据结构进阶九哈希表实现

9. 蛤蟆的数据结构进阶九哈希表实现 本篇名言:"人们所努力追求的庸俗的目标 --我总觉得都是可鄙的. -- 爱因思坦" 上篇我们看了哈希表的相关定义和概念,这篇来看下如何来实现. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47362781 1.  代码实现 1.1             Main 函数定义哈希元素数组 10个元素. 定义哈希表变量. 调用InitHashTable构造一个空的哈希表. 然后循