桶排序解决大数据排序

大数据无法一次载入内存,所以分桶文件做一次次分割

以整数为例,如果是整数排序,32位,总共有2^32个桶,每个桶以整型(4字节)计数(计数排序)

2^10 * 2^10 * 2^10 *2^2 * 4 * 字节=16G,需要16g内存,才能对一个整数数组计算中位数,假设现在1g可用内存,需要将桶的数量压缩2^4倍,那么在桶的分配上 桶号=x / (2^4) ,那么现在桶的数量降到

2^28 个,每个桶4字节,即1G,内存中找到中位数所在桶,再遍历一遍,(均匀分布前提)记录该桶明细,快速排序,搞定

若不均匀,则需要根据下图递归分治疗:

该两个帖子都是如此:

https://www.jianshu.com/p/9f4ce4ec5684

"第四步:一直下去,直到最低字节(7-0bit)的桶排序结束。我相信这个时候完全可以在内存中使用一次快排就可以了"不太严谨

https://juejin.im/post/5d4c2158f265da03ae7861c7?utm_source=gold_browser_extension

提到了订单不均匀不断继续划分,“如果划分之后,101 元到 200 元之间的订单还是太多,无法一次性读入内存,那就继续再划分,直到所有的文件都能读入内存为止”,提到了递归划分的第一个停止条件,但没有考虑到浮点型极端情况下,就是有文件桶数据非常密集不断划分下仍然无法读入内存

猜你喜欢

转载自www.cnblogs.com/silyvin/p/11613772.html