100亿数据排序
来源:互联网 发布:淘宝精品推荐分类 编辑:程序博客网 时间:2024/05/16 14:23
实现思路
1.把这个37GB的大文件,用哈希分成1000个小文件,每个小文件平均38MB左右(理想情况),把100亿个数字对1000取模,模出来的结果在0到999之间,每个结果对应一个文件,所以我这里取的哈希函数是 h = x % 1000,哈希函数取得”好”,能使冲突减小,结果分布均匀。
2.拆分完了之后,得到一些几十MB的小文件,那么就可以放进内存里排序了,可以用快速排序,归并排序,堆排序等等。
3.1000个小文件内部排好序之后,就要把这些内部有序的小文件,合并成一个大的文件,可以用二叉堆来做1000路合并的操作,每个小文件是一路,合并后的大文件仍然有序。
- 首先遍历1000个文件,每个文件里面取第一个数字,组成 (数字, 文件号) 这样的组合加入到堆里(假设是从小到大排序,用小顶堆),遍历完后堆里有1000个 (数字,文件号) 这样的元素
- 然后不断从堆顶拿元素出来,每拿出一个元素,把它的文件号读取出来,然后去对应的文件里,加一个元素进入堆,直到那个文件被读取完。拿出来的元素当然追加到最终结果的文件里。
- 按照上面的操作,直到堆被取空了,此时最终结果文件里的全部数字就是有序的了。
一个32G的大文件,用fopen()打开不会全部加载到内存的,然后for循环遍历啊,把每个数字对1000取模,会得到0到999种结果,然后每种结果在写入到新的文件中,就拆分了
0 0
- 100亿数据排序
- 数据排序
- 数据排序
- 数据排序
- 排序数据
- 数据排序.
- 排序数据
- 数据排序
- 数据排序(排序小结)
- 数据排序:冒泡排序
- 快速排序,排序一亿数据用时14秒
- 大数据算法:对5亿数据进行排序
- 大数据算法:对5亿数据进行排序
- 大数据算法:对5亿数据进行排序
- 测试大数据(快速排序)100万条数据
- 数据汇总加排序
- SQL数据排序 (转贴)
- xml数据分组排序
- Round B APAC Test 2017 Problem D. Sherlock and Permutation Sorting
- JavaScript个人笔记:面向对象设计二(继承)
- nc批量检测代理服务器端口可用性
- [四]java作业
- CentOS6.5下为编译Caffe升级python2.6到2.7
- 100亿数据排序
- 计算广告的指标
- 文章标题
- [数据结构与算法]二叉树查找结点和最大最小值
- oracle恢复数据库
- XSS攻击与防御
- 获取客户端真实的ip
- Struts2获取表单数据的方式
- 对象回收时Weak指针自动被置为nil的实现原理