当前位置: 首页 > news >正文

排序:败者树和置换选择排序(解决外部排序中的优化问题)

1.算法目的(败者树)

解决多路平衡归并带来的问题。
在外部排序中,使用k路平衡归并策略,
选出一个最小元素需要对比关键字(k-1)次,
导致内部归并所需时间增加。(可用“败者树”进行优化)

2.败者树的定义

败者树:可视为一棵完全二叉树(多了一个头头)。
k个叶结点分别是当前参加比较的元素,
非叶子结点用来记忆左右子树中的“失败者”,
而让胜者往上继续进行比较,一直到根结点。

3.败者树在多路平衡归并中的应用

在这里插入图片描述

对于k路归并,第一次构造败者,树需要对比关键字k-1次。
有了败者树,选出最小元素,只需对比关键字 「 l o g 2 k ∣ 「log_2k| log2k次。

4.败者树的实现思路

k路归并的败者树只需要定义一个长度为k的数组即可。

5.置换选择排序

可用“置换-选择排序"进一步减少初始归并段数量.
在这里插入图片描述

注:假设用于内部排序的内存工作区只能容纳3个记录。

若WA内的关键字都比MINIMAX更小,则该归并段在此截止.

使用置换-选择排序,
可以让每个初始归并段的长度超越内存工作区大小的限制.

1.步骤

设初始待排文件为FI,初始归并段输出文件为FO,内存工作区为WA,
FO和WA的初始状态为空,WA可容纳w个记录。
置换-选择算法的步骤如下:

  1. 从FI输入w个记录到工作区WA。
  2. 从WA中选出其中关键字取最小值的记录,记为MINIMAX记录。
  3. 将MINIMAX记录输出到FO中去。
  4. 若FI不空,则从FI输入下一个记录到WA中。
  5. 从WA中所有关键字比MINIMAX记录的关键字大的记录中选出最小关键字记录,作为新的MINIMAX记录。
  6. 重复3~5,直至在WA中选不出新的MINIMAX记录为止,由此得到一个初始归并段,输出一个归并段的结束标志到FO中去。
  7. 重复2~6,直至WA为空。由此得到全部初始归并段。
http://www.lryc.cn/news/178716.html

相关文章:

  • 【超分:光谱响应函数】
  • IoT 物联网 JavaScript 全栈开发,构建家居环境监控系统实战
  • jupyter notebook可以打开,但无法打开.ipynb文件,报错500 : Internal Server Error
  • latex图片编号+表格编号
  • 【1day】用友时空KSOA平台 imagefield接口SQL注入漏洞学习
  • linux之美
  • 5、超链接标签
  • CCF CSP认证历年题目自练 Day15
  • APP的收费模式及特点
  • opencv: 解决保存视频失败的问题
  • 源码编译安装zstd
  • LabVIEW开发实时自动化多物镜云计算全玻片成像装置
  • 【深度学习实验】卷积神经网络(二):自定义简单的二维卷积神经网络
  • Socket网络编程练习题三:客户端上传文件到服务器
  • Excel技巧之【锁定工作簿】
  • 用于自然语言处理的 Python:理解文本数据
  • 历史服务器
  • 竞赛无人机搭积木式编程(四)---2023年TI电赛G题空地协同智能消防系统(无人机部分)
  • 深入理解JavaScript中的事件冒泡与事件捕获
  • 纯css html 真实水滴效果
  • HBASE集群主节点迁移割接手动操作步骤
  • TRB爆仓分析,套利分析,行情判断!
  • LVGL - RV1109 LVGL UI刷新效率优化-02
  • 5、布局管理器
  • What is a UDP Flood Attack?
  • 多核 ARM Server 性能调优
  • oracle执行计划中,同一条语句块,在不同情况下执行计划不一样问题。子查询,union 导致索引失效。
  • 【新的小主机】向日葵远程控制ubuntu
  • 在Android studio高版本上使用低版本的Github项目库报错未能解析:Landroid/support/v4/app/FrageActivity;
  • 自动混剪多段视频、合并音频、添加文案的技巧分享