算法学习(十三)多路归并

多路归并

1. 概念

一、多路归并算法的由来

    假定现在有一包含大量整数的文本文件存放于磁盘中,其文件大小为10GB,而本机内存只有4GB。此时若我们要对该文件中的所有整数进行升序排序,肯定不能直接将文件中的所有数据一次性读入内存中,再使用快速、归并等排序算法对这么大规模的整数进行排序。

    好像陷入了难题? 我们不妨换一个思路,为何不将10GB大文件拆分为10个1GB的小文件呢? 逐个对10个文件进行排序后,再将其写入磁盘中,此时就得到了10份已排序后的临时文件。

    每一份文件都是一个升序序列,这时问题就转换为如何合并这10路升序序列为1路升序序列。正因为待合并的数据路数比较多,所以才有了多路归并这一说法。

    还是有些抽象?那不妨举个具体的例子来瞅瞅,假定有nums1、num2、nums3三路升序序列,先打算将他们合并为一路升序序列:

nums1 = [1, 2, 3]

nums2 = [2, 4, 6]

nums3 = [3, 5 ,8] =》 合并结果: res = [1, 2, 2, 3, 3, 4, 5, 6, 8]

二、多路归并算法的最简编程模型

    现在我们将刚才提到的合并k路升序序列问题,转化为具体的C++代码,也即是建立最简单的多路归并算法编程模型。以k = 3,即3路为例:

    为了便于理解,我们将三路序列存储为矩阵的形式(如上图),横坐标x的取值范围为0,1,2代表有三列,纵坐标的取值范围也为0,1,2代表有三行。第一行(y=0)是nums1,第二行(y=1)是nums2,第三行(y=2)是nums3。

多路归并算法的基本思想如下:

  1. 首先建立一个小顶堆;

  2. 将每一路的最小元素(即第1列元素)都加入小顶堆中,此时堆顶就是k路中全局的最小值;

  3. 将堆顶元素弹出,并将堆顶元素所在数组的下一个元素加入堆中。

  4. 重复第2)和第3)步,直至每一路数据都读取结束。

    img

2. 解题技巧(我的总结)

多路归并

题目说明实现
313. 超级丑数多路归并我的提交
786. 第 K 个最小的质数分数多路归并我的提交
1508. 子数组和排序后的区间和多路归并我的提交

3. 更多练习

4. 参考

  1. 多路归并算法从理论到应用(易懂)
  2. 总库:tryHard

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/410609.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《Docker 简易速速上手小册》第7章 高级容器管理(2024 最新版)

文章目录 7.1 容器监控与日志7.1.1 重点基础知识7.1.2 重点案例:监控 Flask 应用7.1.3 拓展案例 1:使用 ELK Stack 收集和分析日志7.1.4 拓展案例 2:使用集成监控工具 7.2 性能调优与资源限制7.2.1 重点基础知识7.2.2 重点案例:Fl…

边缘计算网关与边缘计算的融合之道-天拓四方

随着物联网、大数据和人工智能的飞速发展,数据处理和分析的需求呈现出爆炸式增长。传统的中心化数据处理模式已难以满足实时性、低延迟和高带宽的需求,边缘计算应运而生,成为解决这一难题的关键技术。而边缘计算网关,作为连接边缘…

护眼台灯哪个品牌质量比较好?五大优质护眼台灯推荐!

护眼台灯作为近年来最受欢迎的灯具之一,它不仅可以提供充足明亮的光照,光线环境,从而减少眼睛的负担和疲劳,还能够实现预防近视的效果,所以很多家长都会给孩子准备护眼台灯。但也有不少朋友觉得护眼台灯是名副其实的智…

爆火的Sora,动了谁的奶酪?

北京时间2月16日凌晨,当我们还沉浸在春节假期的喜庆和欢乐中时,Open AI 官宣推出首个文生视频模型 Sora。一年多前,Chat GPT 的横空出世,引起了全球广泛关注。如今 Sora 的出现,再次掀起千层浪。 只需要一段文本描述&a…

校招失败后,在小公司熬了 2 年终于进了字节跳动,竭尽全力....

其实两年前校招的时候就往字节投了一次简历,结果很明显凉了,随后这个理想就被暂时放下了,但是这个种子一直埋在心里这两年除了工作以外,也会坚持写博客,也因此结识了很多优秀的小伙伴,从他们身上学到了特别…

SMTP和IMAP是什么?SMTP的定义及工作模式?

SMTP是什么邮件的协议?如何开启网站邮箱SMTP服务? 随着互联网的普及和电子邮件的广泛使用,SMTP和IMAP这两个名词逐渐进入了我们的视野。它们是什么?它们在我们的日常生活中扮演着怎样的角色呢?下面,蜂邮ED…

C语言--贪吃蛇

目录 1. 实现目标2. 需掌握的技术3. Win32 API介绍控制台程序控制台屏幕上的坐标COORDGetStdHandleGetConsoleCursorinfoCONSOLE_CURSOR_INFOSetConsoleCursorInfoSetConsoleCursorPositionGetAsyncKeyState 4. 贪吃蛇游戏设计与分析地图<locale.h>本地化类项setlocale函…

uniapp微信小程序解决上方刘海屏遮挡

问题 在有刘海屏的手机上&#xff0c;我们的文字和按钮等可能会被遮挡 应该避免这种情况 解决 const SYSTEM_INFO uni.getSystemInfoSync();export const getStatusBarHeight ()> SYSTEM_INFO.statusBarHeight || 15;export const getTitleBarHeight ()>{if(uni.get…

信号完整性分析基本概念

“设计师可以分成两类&#xff0c;一类已经遇到了信号完整性问题&#xff0c;另一类即将遇到信号完不整性问题” 随着时钟频率的提高&#xff0c;发现并解决信号完整性问题成为产品开发的关键。因此需要精通信号完整性分析技术&#xff0c;并能采取高效设计过程以消除这些问题…

如何使用群晖NAS中FTP服务开启与使用固定地址远程上传下载本地文件?

文章目录 1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP地址连接 本文主要介绍如何在群晖NAS中开启FTP服务并结合cpolar内网穿透工具&#xff0c;实现使用固定公网地址远程访问群晖FTP服务实现文件上传下载。 Cpolar内…

实践案例分析:让数据说话,高效盘点研发效能,助力企业2024发展 | 活动回顾

前不久&#xff0c;思码逸 DevData Talks 落地深圳南山区&#xff0c;举办了一场以「中小到千人规模团队研发效能提升实践 」为主题的闭门沙龙&#xff0c;共探研发增效之道。活动邀请到了几位来自不同研发规模的团队的研发效能负责人齐聚一堂&#xff0c;分别是平安银行组织级…

SD-WAN:三步轻松实现异地访问总部内网

随着经济的蓬勃发展和企业业务范围的不断扩张&#xff0c;许多企业逐渐形成了以总部为核心的多点生产结构&#xff0c;并通过网络实现了总部与分支机构之间的信息互通。要实现对企业总部内网的异地访问并非易事&#xff0c;但如果应用了SD-WAN这些问题将被轻松解决。 某企业在总…

React18源码: Fiber树的初次创建过程图文详解

fiber树构造&#xff08;初次创建&#xff09; fiber树构造的2种情况&#xff1a; 1.初次创建 在React应用首次启动时&#xff0c;界面还没有渲染此时并不会进入对比过程&#xff0c;相当于直接构造一棵全新的树 2.对比更新 React应用启动后&#xff0c;界面已经渲染如果再次发…

连续轨迹加工和速度前瞻:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十二)

XPCIE1032H功能简介 XPCIE1032H是一款基于PCI Express的EtherCAT总线运动控制卡&#xff0c;可选6-64轴运动控制&#xff0c;支持多路高速数字输入输出&#xff0c;可轻松实现多轴同步控制和高速数据传输。 XPCIE1032H集成了强大的运动控制功能&#xff0c;结合MotionRT7运动…

盈致MES系统助力企业实现数字化转型

盈致MES系统通过以下几个方面帮助企业实现数字化转型&#xff1a; 生产流程透明化&#xff1a;MES系统通过实时采集生产现场的数据&#xff0c;实现了生产流程的透明化管理。企业可以实时了解生产进度、设备状态、质量检测等信息&#xff0c;提高了生产管理的效率和准确性。 优…

不再为写作发愁:4款AI写作软件推荐

当下&#xff0c;在写作领域&#xff0c;AI写作软件越来越多&#xff0c;为有写作需求的人群提供了很大的帮助&#xff0c;让写作者们能够更高效、更便捷地进行创作。下面将介绍4款值得关注的AI写作软件&#xff0c;帮助你轻松写作。 推荐工具一 爱制作AI 推荐指数&#xff1a…

网络编程-编码与解码(Protobuf)

编码与解码 下面的文字都来自于极客时间 为什么要编解码呢&#xff1f;因为计算机数据传输的是二进制的字节数据 解码&#xff1a;字节数据 --> 字符串&#xff08;字符数据&#xff09; 编码&#xff1a;字符串&#xff08;字符数据&#xff09;–> 字节数据 我们在编…

(二十三)Flask之高频面试点

目录&#xff1a; 每篇前言&#xff1a;Q1&#xff1a;为什么把request和session放在一起&#xff1f;Q2&#xff1a;Local对象的作用&#xff1f;Q3:&#xff1a;LocalStack对象的作用&#xff1f;Q4&#xff1a;一个运行中的Flask应用程序分别包括几个Local/LocalStack&#…

能为企业节省巨额成本的稳定性测试!你确定不来看看吗?

首先来说说性能测试&#xff1a; 性能是软件的一种非功能特性&#xff0c;他关注的不是软件是否完成了特定的功能&#xff0c;而是软件在完成特定功能是展示出来的及时性。 及时性从不同的视角代表不同的指标&#xff1a; 用户&#xff1a;响应时间 系统管理员&#xff1a;资…

20240223-2092.查找所有有秘密的人

题目要求 给你一个整数 n&#xff0c;表示有 n 个人&#xff0c;编号从 0 到 n - 1。你还给你一个 0 索引的二维整数数组 meetings&#xff0c;其中 meetings[i] [xi, yi, timei] 表示 xi 和 yi 在 timei 有一个会议。一个人可以同时参加多个会议。最后&#xff0c;给你一个整…
最新文章