https://blog.csdn.net/cslbupt/article/details/65935577

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个最大的数中的最大的数和最小的数,取最大数的这组的第二大的数,与最小的数比较。。。。

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

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

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

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

    1.  算法如下:根据快速排序划分的思想  (1) 递归对所有数据分成[a,b)b(b,d]两个区间,(b,d]区间内的数都是大于[a,b)区间内的数  (2) 对(b,d]重复(1)操作,直到最右边 ...

  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. 设置select下拉框不可修改的→“四”←种方法
  2. fastdfs 测试客户端_Nginx+FastDFS+MacOS图片服务器的搭建
  3. IIS 网站服务器性能优化指南
  4. arcgis js api proxy java 版本配置
  5. 数字信号处理学习笔记(三)|时域离散系统的网络结构
  6. wxWidgets随笔(10)-wxApp类
  7. ms查约束具体代码_记 Arthas 实现一次 CPU 排查与代码热更新
  8. mysql文本自动递增_mysql-如何创建自动递增的字符串?
  9. 高一计算机专业班主任工作总结,2016学年上学期高一班主任工作总结
  10. Addition Chains(信息学奥赛一本通-T1443)
  11. nginx mozilla_Mozilla Firefox 11岁生日快乐!
  12. linux安装qq_体验一下,看看 Linux 系统中的 QQ 是什么样子的
  13. 喀什师范学计算机学院学位论文开题报告,喀什师范学院本科生毕业论文开题报告.doc...
  14. spring mvc 重新定向到一个新的Url
  15. 学生选课系统 c语言
  16. BP算法详细推导及分析
  17. win10家庭组(win10家庭组共享打印机)
  18. 【转自Oracle官方博客】一个ASMCA无法识别磁盘设备的问题
  19. Goto 桌面搜索 插件的使用
  20. man 命令显示简体中文帮助

热门文章

  1. 三维圆柱绕流建模与网格划分
  2. win7接收android无线显示,如何让win7系统笔记本和电视无线同屏显示|win7系统笔记本和电视无线同屏显示的设置方法...
  3. STM32F1_PAJ7260U2
  4. 网页设计常用色彩搭配表html源码
  5. 万物皆可联名时代,品牌联名怎么玩出彩?
  6. 3DSA-MFN:用于高光谱图像分类的结合3D自注意力的多尺度特征融合网络
  7. Oracle面试锦囊
  8. pytorch的安装(重装anaconda的过程以及错误)
  9. 传感器433报文协议
  10. 3D制图软件中如何构造放样弯边?