10G的文件里面全是无序数字,内存只有2G,如何找到里面的中位数
以上算法的思想,首先对每块数据的第一个元素组成最小堆,自然而然可以直接拿到最小元素,关键点在步骤③,为什么要将弹出元素所在块的下个元素放入最小堆呢?因为内存只有2g,而文件有10g,所有不能一次性将磁盘文件的所有数据都读进来,而是通过将10g文件分成内存能处理的多个小文件进行处理,或者每次读取2g大小进行处理。最终,通过一个只有五个数据大小的最小堆,即可得到一个经过排序好的数据文件,不过每次读取块内的元素其实都要经过一次磁盘I/O,内存是够了,但磁盘I/O是很密集的。重复②③,直到每块的元素都遍历完。
原创
2024-05-06 18:09:20 ·
280 阅读 ·
1 评论