4.算法进阶——外部排序,如何用有限的内存对TB级数据进行排序

比如有这样一个基于真实场景的经典面试题:假设现在有 1TB 的任意文本,请问如何能将其中出现的单词按照字母序排列,得到一个新的文本?

这个问题的关键点其实在于,内存是有限的,而所谓外部排序的这个外:指的是外部存储
已知1GB的内存如果要处理1TB,至少要读1024次。
所以大体思路一定是:将文件分段,用常见内部排序方法进行排序完了之后,再合并。即思路上大体是归并排序

主要影响因素

1.内部排序
我们分成一段一段之后,主要目的是使得内存能够装下这一段数据
一般来说,快速排序在大部分场景下都是最快的

2.归并阶段
因为需要归并n多个段,此时的内存肯定无法装下超过一个段的内容。此时最大的时间消耗来自IO
内存的读写操作是很快的,但是外部磁盘中读写,可能比内存中要慢非常非常多。
在这里插入图片描述
我们看这个教程中的图片。每一次的归并,我们都得从外存中读。所以IO次数和归并层数成正比

3.如何降低归并层数——增加归并路数k
那就得每次多归并几段,上图这种每次归并两段,就是两路归并

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值