多路平衡归并和败者树
多路平衡归并和败者树
- 为什么要引入败者树?
- 什么是败者树?
- 后续
为什么要引入败者树?
我们都知道,增加归并路数k能有效减少归并趟数S,进而减少I/O。然而,增加归并路数k时,内部归并的时间将增加。做内部归并时,在k个元素中选取关键字最小的记录需要进行k-1次比较。每趟归并n个元素需要做(n-1)(k-1)次比较,S趟归并总共需要的比较次数是
S(n-1)(k-1)=[log k r] (n-1) (k-1)=[log 2 r] (n-1) (k-1)/[log 2 k]
式中,(k-1)/【log 2 k】随k的增长而增长,因此内部归并时间随k的增长而增长。这将抵消由于增大k而减小外存访问次数所得到的效益。因此,不能使用普通的内部归并排序算法。
为了是内部归并并不受k的增大的影响,引入了败者树。
什么是败者树?
败者树是树形选择排序的一种变体,可视为一棵完全二叉树。k个叶节点分别存放k个归并段在归并过程中当前参加比较的记录,内部节点用来记忆左右子树中的“失败者”,而让胜者往上继续进行比较,一直到根节点。若比较两个数,大的为失败者,小的为胜利者,则根节点指向的数是最小值。
因为k路归并的败者树深度为【log 2 k】,因此k个记录中选择最小关键字,最多需要【log 2 k】比较。所以总的比较次数为
S(n-1)【log 2 k】=[log k r] (n-1)【log 2 k】= (n-1) [log 2 r]
可见,使用败者树后,内部归并的比较次数与k无关了。因此,只要内存空间允许,增大归并路数k将有效地减少归并树的高度,从而减小I/O次数,提高外部排序的速度。
需要说明的是,归并路数k并不是越大越好。归并路数k增大时,相应的需要增加输入缓冲区的个数。若可供使用的内存空间大小不变,势必要减少每个输入缓冲区的容量,使得内存、外存交换数据的次数增大。当k值过大时,虽然归并趟数会减少,但读写外存的次数仍会增加。
后续
如果想了解更多物联网、智能家居项目知识,可以关注我的程序设计专栏。
订阅专栏后,可以在微信公众号上私聊我,直接发给你源码。
或者关注公众号。
编写不易,感谢支持。
多路平衡归并和败者树相关推荐
- 胜者树与败者树, 多路平衡归并外部排序
胜者树与败者树 胜者树和败者树都是完全二叉树,是树形选择排序的一种变型.每个叶子结点相当于一个选手,每个中间结点相当于一场比赛,每一层相当于一轮比赛. 不同的是,胜者树的中间结点记录的是胜者的标号 ...
- VC++2012编程演练数据结构《35》多路平衡归并
多路平衡归并 一般说来,如果初始归并段有m个,那么这样的二路归并树就有élog2mù+1层,要对数据进行élog2mù遍扫描.采用k路平衡归并时,则相应的归并树有élogkmù+1层,要对数据进行él ...
- K路归并排序与败者树
一.大文件的排序问题 在我们日常开发中有时候会遇到这样一个问题,有一个文件大小为10GB,现在要为里面的数据进行排序,而计算机的内存只有1GB,如何对这10GB的数据进行排序呢? 由于内存空间只有1G ...
- 【外排序】外排序算法(磁盘排序、磁带排序) 外存设备结构分析 败者树多路归并 最佳归并树白话讲解
外排序 外排序概述 外排序的基本方法是归并排序法 例子 总结 存储设备(可忽略) 磁带 磁带结构 磁盘 硬盘结构 块 硬盘上的数据定位 磁盘排序 磁盘排序过程 1.生成初始顺串 方法1(常规方法): ...
- 数据结构(八):排序 | 插入排序 | 希尔排序 | 冒泡排序 | 快速排序 | 简单选择排序 | 堆排序 | 归并排序 | 基数排序 | 外部排序 | 败者树 | 置换-选择排序 | 最佳归并树
文章目录 第八章 排序 一.排序的基本概念 (一)什么是排序 (二)排序的应用 (三)排序算法的评价指标 (四)排序算法的分类 (五)总结 二.插入排序 (一)算法思想 (二)算法实现 (三)算法效率 ...
- 8-13外部排序-败者树
败者树是树形选择排序的一种变体,可视为一棵完全二叉树.通过败者树,可以在k个归并段中选出最小关键字所需要的关键字对比次数更少. 绿色为叶子结点,存放初始数据 黑色为失败结点 蓝色为胜出结点 一.基本过 ...
- 外部排序归并排序 败者树
一.定义问题 外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的.外部排序最常用的算法是多路 ...
- dataStructure_外部排序/多路归并/败者树/最佳归并树
文章目录 外部排序 时间代价:为什么不用二路归并 概念 归并段 小结:每趟归并需要读写磁盘的次数取决于 内存工作区 严格k叉树 k叉树和k路归并的趟数s与初始归并段数量m的关系 提高外部排序性能 k路 ...
- 败者树 多路归并排序
胜者树和败者树都是完全二叉树,是树形选择排序的一种变型.每个叶子结点相当于一个选手,每个中间结点相当于一场比赛,每一层相当于一轮比赛. 不同的是,胜者树的中间结点记录的是胜者的标号:而败者树的中间结点 ...
最新文章
- Qt笔记-拖动文件到QWidget(获取拖动文件路径)
- 面临重重挑战 华为造车之路任重道远
- JAVA的节点流和处理流
- 解决Android log输出看不到的情况
- java垃圾回收机制GC
- 43、剑指offer--左旋转字符串
- import 导入模块学习
- mysql日常工作中批量插入效率问题
- (窗口隐藏工具 3.40)自动隐藏指定的应用窗口及托盘图标
- 如何快速设计《数字电路》的JK触发器、T触发器描述的驱动方程对应的次态K图——异或卡诺图法
- Arcgis修改栅格数据像素值
- 【SEBAL模型】地面特征参数反演01--大气透射率
- 电子元器件手册中assert和deassert的含义
- 平台卡卷API文档分享
- 每个程序员都应该了解的 CPU 高速缓存 英文原文:Memory part 2: CPU caches
- NanoPi NEO小试牛刀(一)
- B树,B+树,B*树以及R树的介绍
- 408考研大纲计算机网络,2021计算机考研408大纲:计算机网络部分解析及备考指导...
- serialize()和serializeArray()方法
- rtl8821 wifi驱动编译