谈从10亿个数中找出前10万个最大的
谈从10亿个数中找出前10万个最大的
期的实验显示10亿个浮点数大概占据3G左右的空间,因此全部一次性读入内存目前在个人PC上是不太现实的。本次讨论不考虑内存等等,只考虑算法。
如果一次性比较排序,然后输出前面最大的10w个,那么众所周知,算法的时间复杂度不下于O(N lgN),此处的N为数的个数(10亿)。
如果用堆排序,由于堆排序像合并排序而不像插入排序,堆排序的运行时间为O(N lgN);又想插入排序而不像合并排序,堆排序是一种原地排序。因此堆排序具有相对小的运行时间和占用相对小的额外空间的优点。
再则,利用最小堆的性质,堆顶元素是整棵树中具有最小值的元素,因此,我们可以构建这样的一个最小堆:
step1:取前m个元素(例如m=10万),建立一个小顶堆
保持一个小顶堆得性质的步骤,运行时间为O(lgm);
建立一个小顶堆运行时间为m*O(lgm)=O(m lgm);
其实建立一个小顶堆实际运行时间为O(m);具体分析参考算法导论。
step2:顺序读取后续元素,直到结束
每次读取一个元素,如果该元素比堆顶元素小,直接丢弃
如果大于堆顶元素,则用该元素替换堆顶元素,然后保持最小堆性质
最坏情况是每次都需要替换掉堆顶的最小元素,因此需要维护堆的代价为(N-m)*O(lgm);
最后这个堆中的元素就是前最大的10W个。
时间复杂度为O(N lgm)。
转载于:https://www.cnblogs.com/watsonlong/archive/2011/03/24/1994452.html
谈从10亿个数中找出前10万个最大的相关推荐
- 在10亿个数中找出前1000个最大的
在10亿个数中找出前1000个最大的 假设现在有一个文件,里面存放了10亿个整数,需要找出前1000个最大的. 方法: 1.普通排序,部分排序:几乎不可取. 2.分治法:随机选一个数t,然后对整个数组 ...
- 海量数据处理 - 10亿个数中找出最大的10000个数(top K)
海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 版权声明:本文为博主原创文章,未经博主允许不得转载 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望 ...
- 10亿个数中找出最大的10000个数
转载自 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅 ...
- 10亿个数中找出最大的10000个数(top K问题)
原博链接: https://blog.csdn.net/cbjcry/article/details/84917432 问题引入:10亿个数中找出最大的10000个数(top K问题) top K问题 ...
- 【面试现场】如何在10亿数中找出前1000大的数
小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司. 之前小史在BAT三家的面试中已经挂了两家,今天小史去了BAT中的最后一家面试了. 简单的 ...
- 如何在 10 亿数中找出前 1000 大的数?
作者 | channingbreeze 责编 | 胡巍巍 小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司. 之前小史在BAT三家的面试中已 ...
- 从十亿个数中找出前1000个最大的数的算法
10亿个数中找出1000个最大的数的算法思路: 1,先拿出前1000个数字,并排序,找出最小值为 minValue . 2, 然后再依次拿出1000个数字,找出最大值为 tempMaxValu ...
- 10亿个数中找出最大的10000个数之top K问题
方法一.先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的10000个数就是所需的最大的10 ...
- 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题)
top K问题 在大规模数据处理中,经常会遇到的一类问题:在海量数据中找出出现频率最好的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为top K问题.例如,在搜索引擎中,统计搜索最热 ...
最新文章
- 4.二叉树的先序、中序以及后序遍历的递归写法与非递归写法(LeetCode第94、144、145题)
- 【Python-ML】最小二乘法
- 2.Functions and Getting Help
- 专访《程序员的三门课》李伟山:从程序员到技术总监的修炼秘籍!
- linux如何结束音乐是什么函数,与音乐有关的linux命令
- 金山云和金山办公均成功上市 雷军揭秘背后原因
- sqlplus 设置显示格式
- Spring的单例模式底层实现
- Autodesk 首届中国开发者训练营将开始报名,5月24日前报名6折优惠!
- Ubuntu上无法登录网页版本微信的解决方案
- php 获取月份的周数,PHP获取当前月份的周数只能使用php
- 经典语录 - 人生十悟
- 连缀介绍和简单库对象
- swing(二十一)
- js当前页面打开小窗口 window.open
- Java实验01 Java编程基础(猜数字游戏、随机点名器)
- 《JAVA程序性能优化》总结
- PS-第三天-钢笔抠图及商业案例
- 股票软件定制将成为券商下一个核心竞争力
- 2419. Grass Planting