1. 
算法如下:根据快速排序划分的思想 
(1) 递归对所有数据分成[a,b)b(b,d]两个区间,(b,d]区间内的数都是大于[a,b)区间内的数 
(2) 对(b,d]重复(1)操作,直到最右边的区间个数小于100个。注意[a,b)区间不用划分 
(3) 返回上一个区间,并返回此区间的数字数目。接着方法仍然是对上一区间的左边进行划分,分为[a2,b2)b2(b2,d2]两个区间,取(b2,d2]区间。如果个数不够,继续(3)操作,如果个数超过100的就重复1操作,直到最后右边只有100个数为止。

2.先取出前100个数,维护一个100个数的最小堆,遍历一遍剩余的元素,在此过程中维护堆就可以了。具体步骤如下: 
step1:取前m个元素(例如m=100),建立一个小顶堆。保持一个小顶堆得性质的步骤,运行时间为O(lgm);建立一个小顶堆运行时间为m*O(lgm)=O(m lgm);       
step2:顺序读取后续元素,直到结束。每次读取一个元素,如果该元素比堆顶元素小,直接丢弃 
如果大于堆顶元素,则用该元素替换堆顶元素,然后保持最小堆性质。最坏情况是每次都需要替换掉堆顶的最小元素,因此需要维护堆的代价为(N-m)*O(lgm); 
最后这个堆中的元素就是前最大的10W个。时间复杂度为O(N lgm)。


补充:这个方法的说法也可以更简化一些:
假设数组arr保存100个数字,首先取前100个数字放入数组arr,对于第101个数字k,如果k大于arr中的最小数,则用k替换最小数,对剩下的数字都进行这种处理。

3.分块查找

先把100w个数分成100份,每份1w个数。先分别找出每1w个数里面的最大的数,然后比较。找出100个最大的数中的最大的数和最小的数,取最大数的这组的第二大的数,与最小的数比较。。。。

http://www.cnblogs.com/nzbbody/p/3576894.html 给出了另外一个思路: 
将这100万的数字,平分为100份,从每一份中取出最大的100个数字;将这1万个数字组合在一起,找到最大的100个数。



如果这100万个数字跨度不大,可以用位向量结合计数器的方法。

如何从100万个数中找出最大的前100个数相关推荐

  1. C++100w个数中找出最大的前K个数

    /*100w个数中找出最大的前K个数*/ #include <iostream> using namespace std; #include <assert.h> const ...

  2. 从100万个数中找出最大的前100个数

    https://blog.csdn.net/cslbupt/article/details/65935577 1.算法如下:根据快速排序划分的思想 (1) 递归对所有数据分成[a,b)b(b,d]两个 ...

  3. 从10亿个数字中找出最大的前100个数

    先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的10000个数就是所需的最大的10000个 ...

  4. 海量数据处理 大量数据中找出最大的前10个数 (Top K 问题)

    在工作中我们常遇到此类问题,从一个大量甚至海量的数据中取出前几个大的数.必须在海量的文章中取出点击量最大的10篇文章. 此类问题其实就是Top K问题. 给定一个数据(数据量海量 N),想找到前 K ...

  5. 海量数据处理:在100亿个数中找出top 10000

    经典的TOP K问题,借助堆排序进行 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆 ...

  6. 海量数据处理 - 10亿个数中找出最大的10000个数(top K)

    海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 版权声明:本文为博主原创文章,未经博主允许不得转载 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望 ...

  7. 10亿个数中找出最大的10000个数

    转载自  海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅 ...

  8. 10亿个数中找出最大的10000个数之top K问题

    方法一.先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的10000个数就是所需的最大的10 ...

  9. 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题)

    top K问题 在大规模数据处理中,经常会遇到的一类问题:在海量数据中找出出现频率最好的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为top K问题.例如,在搜索引擎中,统计搜索最热 ...

最新文章

  1. 元宵节来了,程序员用 Python 送你一盏 3D 花灯
  2. 服务器响应码302,ajax与302响应代码测试 详细出处参考:http://www.jb51.net/article/42327.htm...
  3. tensorflow学习(3.tensorboard的使用)
  4. T-SQL:流程控制 4,Case 语句
  5. python扇贝单词书_Python脚本 扇贝单词书爬取
  6. cmd查看所有数据库 db2_db2 cmd命令操作
  7. linux---編輯器
  8. Noip前的大抱佛脚----文章索引
  9. php集成坏境下载,常见php集成环境安装包
  10. 银河麒麟V10下载安装使用体验(上)
  11. 王慧文清华产品课(二)
  12. JAVA 实现《黄金矿工》游戏
  13. 中国移动云能力中心IaaS产品部2021年招聘
  14. js控制的Flv视频播放器源码下载
  15. getcount php,物联网方案之“Android+Apache服务器(PHP+Mysql)+Arduino(+以太网盾板)”(四.点播客户端)...
  16. java 过滤微信昵称_java过滤微信昵称emoji表情与非emoji的问题解决方法
  17. VMR论文visualization实验总结
  18. Android 电池管理
  19. 外链html怎么添加,网站外链添加如何来做,要注意这些原则
  20. 各位集美兄得看过来! 利用AI给青春有你2的选手们做数据分析挖掘(一):基于PaddlePaddle爬虫选手信息

热门文章

  1. 《Python编程与实战》学习笔记
  2. SpringCloud - Spring Cloud Netflix 之 Zuul网关;路由(十一)
  3. 2011分区联赛模拟试题 电子眼(树形dp)
  4. python中slice用法
  5. HTML5学习(三):布局标签、列表、超链接和id
  6. css兼容 IE浏览器字号太小
  7. 滇西应用技术大学有没有计算机专业,科普滇西应用技术大学在哪以及滇西应用技术大学有哪些好专业...
  8. 看懂了数智化转型的产业链逻辑,也就看懂了用友BIP
  9. Python—CRC校验码,计算2进制校验数据的校验码
  10. 【简历模板素材】制作简历,找简历模板?这几个网站全部搞定!