从100万个数中找出最大的前100个数
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个数相关推荐
- C++100w个数中找出最大的前K个数
/*100w个数中找出最大的前K个数*/ #include <iostream> using namespace std; #include <assert.h> const ...
- 如何从100万个数中找出最大的前100个数
1. 算法如下:根据快速排序划分的思想 (1) 递归对所有数据分成[a,b)b(b,d]两个区间,(b,d]区间内的数都是大于[a,b)区间内的数 (2) 对(b,d]重复(1)操作,直到最右边 ...
- 从10亿个数字中找出最大的前100个数
先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的10000个数就是所需的最大的10000个 ...
- 海量数据处理 大量数据中找出最大的前10个数 (Top K 问题)
在工作中我们常遇到此类问题,从一个大量甚至海量的数据中取出前几个大的数.必须在海量的文章中取出点击量最大的10篇文章. 此类问题其实就是Top K问题. 给定一个数据(数据量海量 N),想找到前 K ...
- 海量数据处理:在100亿个数中找出top 10000
经典的TOP K问题,借助堆排序进行 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆 ...
- 海量数据处理 - 10亿个数中找出最大的10000个数(top K)
海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 版权声明:本文为博主原创文章,未经博主允许不得转载 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望 ...
- 10亿个数中找出最大的10000个数
转载自 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅 ...
- 10亿个数中找出最大的10000个数之top K问题
方法一.先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的10000个数就是所需的最大的10 ...
- 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题)
top K问题 在大规模数据处理中,经常会遇到的一类问题:在海量数据中找出出现频率最好的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为top K问题.例如,在搜索引擎中,统计搜索最热 ...
最新文章
- 设置select下拉框不可修改的→“四”←种方法
- fastdfs 测试客户端_Nginx+FastDFS+MacOS图片服务器的搭建
- IIS 网站服务器性能优化指南
- arcgis js api proxy java 版本配置
- 数字信号处理学习笔记(三)|时域离散系统的网络结构
- wxWidgets随笔(10)-wxApp类
- ms查约束具体代码_记 Arthas 实现一次 CPU 排查与代码热更新
- mysql文本自动递增_mysql-如何创建自动递增的字符串?
- 高一计算机专业班主任工作总结,2016学年上学期高一班主任工作总结
- Addition Chains(信息学奥赛一本通-T1443)
- nginx mozilla_Mozilla Firefox 11岁生日快乐!
- linux安装qq_体验一下,看看 Linux 系统中的 QQ 是什么样子的
- 喀什师范学计算机学院学位论文开题报告,喀什师范学院本科生毕业论文开题报告.doc...
- spring mvc 重新定向到一个新的Url
- 学生选课系统 c语言
- BP算法详细推导及分析
- win10家庭组(win10家庭组共享打印机)
- 【转自Oracle官方博客】一个ASMCA无法识别磁盘设备的问题
- Goto 桌面搜索 插件的使用
- man 命令显示简体中文帮助