桶排序解決大數據排序

大數據沒法一次載入內存,因此分桶文件作一次次分割數組

 

以整數爲例,若是是整數排序,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

相關文章
相關標籤/搜索