zoukankan      html  css  js  c++  java
  • 桶排序解决大数据排序

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

    以整数为例,如果是整数排序,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 元之间的订单还是太多,无法一次性读入内存,那就继续再划分,直到所有的文件都能读入内存为止”,提到了递归划分的第一个停止条件,但没有考虑到浮点型极端情况下,就是有文件桶数据非常密集不断划分下仍然无法读入内存

  • 相关阅读:
    学习Spring.Net:1.简单的应用之控制台
    学习Memcached:2基本应用之控制台使用
    学习Memcached:1基本配置与安装
    C#IAsyncResult异步回调函数的解释
    C# JSON格式数据高级用法
    C#CRC16 Modbus 效验算法
    第一篇编程笔记
    SqlParameter 操作 image 字段
    C# 对象复制
    利用触发器实现数据同步
  • 原文地址:https://www.cnblogs.com/silyvin/p/11613772.html
Copyright © 2011-2022 走看看