社区
数据结构与算法
帖子详情
求在100w个数中找出前100大数的算法
Kandada1985
2009-07-16 11:57:56
rt,请教各位达人,怎么是最高效的算法呢?
谢谢了
...全文
666
14
打赏
收藏
求在100w个数中找出前100大数的算法
rt,请教各位达人,怎么是最高效的算法呢? 谢谢了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jmailhappy
2011-08-05
打赏
举报
回复
最大堆求前n小,最小堆求前n大!
千与
2009-07-17
打赏
举报
回复
堆排序(基于大根堆建堆),选出100个大数。
yinfie
2009-07-17
打赏
举报
回复
用堆栈
jlp999
2009-07-17
打赏
举报
回复
[Quote=引用 4 楼 marf_cn 的回复:]
大顶堆
[/Quote]
应该是小头堆,每次比较是于当前最小值比,而不是与当前最大值比。
zhangdp_neu
2009-07-17
打赏
举报
回复
用堆
或位图算法都可以解决。
jlp999
2009-07-16
打赏
举报
回复
堆选正解;
详细说下:
1 小头堆;
2 堆固定大小为100;
3 堆元素个数小于100时直接加入堆;
4 堆元素个数等于100时,与堆顶元素比较,并调整堆;
5 遍历结束时,堆中元素为100个最大数。
dirtysalt
2009-07-16
打赏
举报
回复
堆选正解.用STL里面的partial_sort或者是nth_element
bigbug9002
2009-07-16
打赏
举报
回复
用堆选出来吧.
abcdef0966
2009-07-16
打赏
举报
回复
《编程之美》有详细解释,建议去看下
Gdj
2009-07-16
打赏
举报
回复
才100w个数嘛。就算是DWORD一个数4字节。400w字节也不过就几M而已。现在个人机器内存都按G算的了,怎么会放不下?
bigbug9002
2009-07-16
打赏
举报
回复
如果内存放不上,那就要用外排.
设一100大小的带索引的数组.
设一10000大小的数组,每次读1W的数据进来建大顶堆,堆顶放入100大小的数组,10000数据保存为文件.直到100w的数据全处理完,再对100大小的数组建大顶堆,选出最大的后,对应的10000数据调整堆,用新的堆顶换掉100大小的数组的堆顶,再对100大小的数组调整堆.循环下去.
conquersky
2009-07-16
打赏
举报
回复
在算法导论的 线性查找 那章有这方面的提示 大概复杂度是O(n)
shine_paul
2009-07-16
打赏
举报
回复
堆的算法我倒是可以理解,但是这有100w的数据啊,这个数据的庞大性那可不是开玩笑的~~~一般这100w的数据应该存放在哪里啊?然后这么把这些数据提取出来呢?貌似第一次提取100个,后面的都是每次提取一个,并进行DeleteMin和Insert的操作吧,那这个时间不是相当的长!!!我这样理解可以不?
marf_cn
2009-07-16
打赏
举报
回复
大顶堆
从
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) 返回上一个区间,并返回此区间的数字数目...
如何从
100
万
个数
中
找出
最大的
前
100
个数
1.
算法
如下:根据快速排序划分的思想 (1) 递归对所有数据分成[a,b)b(b,d]两个区间,(b,d]区间内的数都是大于[a,b)区间内的数 (2) 对(b,d]重复(1)操作,直到最右边的区间
个数
小于
100
个。注意[a,b)区间不用划分 (3) 返回上一个区间,并返回此区间的数字数目。接着方法仍然是对上一区间的左边进行划分,分为[a2,b2)b2(b2,d2]两个区间,取(
1亿
个数
中
找出
最大的
100
个数
(top K问题)
如何在1亿
个数
中
找出
最大的
100
个数
(top K问题) 最容易想到的方法是将数据全部排序,然后在排序后的集合
中
进行查找,最快的排序
算法
的时间复杂度一般为O(nlogn),如快速排序。但是在32位的机器上,每个float类型占4个字节,1亿个浮点数就要占用400MB的存储空间,对于一些可用内存小于400M的计算机而言,很显然是不能一次将全部数据读入内存进行排序的。其实即使内存能够满足要
求
(我机器内存都是8GB),该方法也并不高效,因为题目的目的是寻
找出
最大的
100
00
个数
即可,而排序却是将所有的元素都排序
【堆排序思想】
找出
100
万
个数
据
中
的
前
100
大数
据
生成随机数据存入txt文件
中
首先在c++代码的文件下新建一个txt文件,命名为test.txt,然后在generate_random.cpp
中
写如下代码: #include<bits/stdc++.h> const long long N =
100
0001; using namespace std; long long x[N]; int main(){ fstream fso...
数据结构与算法
33,025
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章