桶排序解决大数据排序

大数据没法一次载入内存,因此分桶文件作一次次分割数组

 

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

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

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

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

 

该两个帖子都是如此:排序

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

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

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

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

相关文章
相关标签/搜索