
外排
文章平均质量分 59
数据结构中的外排序,多路归并,败者树,置换-选择,最佳归并树。
码明
独学无友,则孤陋而难成。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
1.多路归并
将磁盘块读入内存缓存区时就将磁盘块内的数据进行内部排序好,接着归并到输出缓冲区生成归并段。注:按照本节介绍的方法生成的初始归并段,若共 N 个记录,内存工作区可以容纳L个记录,读写外存时间肯定占大头,故此我们只要优化了归并的趟数就可以减少读写外存的时间。对r个初始归并段,做K路归并,则归并树可用K叉树表示;①k路归并时,需要开辟k个输入缓冲区,内存开销增加。若树高为h,则归并趟数=h-1=[logkr]K越大,r越小,归并趟数越少,读写磁盘数越少。内部排序的时间和内部归并的时间由CPU决定;原创 2024-11-21 17:42:37 · 400 阅读 · 0 评论 -
2.败者树
这大大减少了比赛的次数,败者树不像胜者树一样一眼就可以看到每场比赛的获胜者,而是当一个冠军选拔出之后,新来的队伍很轻易的可以通过结点找到上一次的败者,只需要和上次的败者打完就可以决出下一个冠军。k个叶结点分别对应 k个归并段中当前参加比较的元素,非叶子结点用来记忆左右子树中的“失败者”,而让胜者往上继续进行比较,一直到根结点。除了第一次构造败者树时需要比较k-1次,根据最小的元素根据冠军结点中存取的最小数据项所在的归并段号将最小元素输出后,决出下一个冠军只需要比较[log2k]就好。构造一棵完全二叉树。原创 2024-11-21 17:45:21 · 454 阅读 · 0 评论 -
3.置换选择排序-优化初始归并段
设初始待排文件为FI,初始归并段输出文件为FO,内存工作区为WA,FO和WA的初始状态为空,WA可容纳w个记录。6)重复3)~5),直至在WA中选不出新的MINIMAX记录为止,由此得到一个初始归并段,输出一个归并段的结束标志到FO中去。5)从WA中所有关键字比MINIMAX记录的关键字大的记录中选出最小关键字记录,作为新的MINIMAX记录。在有限的内存工作空间中,通过增大初始归并段的长度来减少初始归并段的数量,从而使多路归并的趟数减少。2)从WA中选出其中关键字取最小值的记录,记为MINIMAX记录,原创 2024-11-21 17:47:25 · 273 阅读 · 0 评论 -
4.最佳归并树——优化多路归并
上回说到通过置换选择排序通过有限的内存工作空间初始化了更长的归并段,但是这些归并段并不是等长的,那么对这些归并段进行归并时的磁盘的读写次数是什么样的呢?假设现在有四个不等长的归并段:R1R2R3R4R525162随便两两进行二路归并,画出其归并树:我们计算一下其需要读写的次数是分别都是:6+8+14+16=44次;原创 2024-11-21 17:49:41 · 743 阅读 · 0 评论