社区
数据结构与算法
帖子详情
求在100w个数中找出前100大数的算法
Kandada1985
2009-07-16 11:57:56
rt,请教各位达人,怎么是最高效的算法呢?
谢谢了
...全文
596
14
打赏
收藏
求在100w个数中找出前100大数的算法
rt,请教各位达人,怎么是最高效的算法呢? 谢谢了
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
大顶堆
10亿数字
找出
前
100
大的数据(网易
大数
据面试
算法
题)
当时去面试的时候现场现写,憋了将近一个小时,用递归实现了,估计问题很多,不是人家怎么可能不要我,哈哈哈,开个玩笑; 思路就是新建一个长度为
100
数组array1,把
前
100
个元素放进去,排个序,然后再把剩下的元素拿来跟array1里面的元素比较,大于的时候替换,等于的时候就跳出循环取下一个元素,遍历一遍
大数
组就能取出
前
100
大的数来,没考虑到时间复杂度,心里想实现了就烧高香了,那还管得了那么多。 后来回来百度的时候才发现,有更简洁的办法 利用堆排实现,具体请见下面大神的博客 数据结构——常见的十种.
java
算法
之
找出
数组
中
第二大的数
1、如果仅考虑实现功能而不考虑效率,可以先通过排序
算法
将数组排序,然后根据数组下标来访问数组
中
第二大的数,,最快的排序
算法
一般为快速排序
算法
,但是其时间复杂度为(nlogn),根据下标访问需要便利一遍数组,时间复杂度为O(n),所以总的时间复杂度为O(nlogn)。那么是否有更好的方法呢?答案是有的,可以通过一边扫描数组即可以
找出
数组
中
第二大的数。实现的思路为:定义两个变量:一个变量用来存储数组的最
大数
,另一个变量用来存储数组
中
的第二
大数
,如果数组的值比最
大数
组的变量值要大,,即将第二大变量的值更新为最
大数
TOPN问题 十万级数据取
前
K大的数据解法
n+1的数组来存储二叉树,其
中
扣除输入的n和d后为O(n)的空间复杂度。之后,我们使用分治
算法
在O(log(n))的时间复杂度内对二叉树
中
的节点进行排序,得到
前
100
大的数字,并输出到终端。在构建好二叉树之后,从根节点开始遍历,不断选择左右节点
中
的最大值,直到
找出
前
k大的数字。上述代码
中
,首先使用快速排序
算法
对n
个数
字进行排序,其
中
快速排序的时间复杂度为O(n。在10万
个数
字
中
寻找
前
100
大的数字,输出最大的
前
d
个数
到终端,并输出比较的次数。log(n)),空间复杂度为O(n),比较次数为2。
golang
算法
-计算
100
00
个数
里最小的10
个数
前
言 从包含M
个数
字的池子里,取出
前
k个(最小的)数字。 分析 使用mapreduce思想,将M
个数
字的池,拆成容量为vol的子池,对子池取出最小的10
个数
,将所有子池的最小十
个数
合并,再取一下最小10
个数
。 生成M
个数
字的
大数
组 func GenMNumberArr(M int, seed time.Time) []int { var rs = make([]int, 0, M) ran...
海量数据
中
找出
前
k
大数
(topk问题),一篇文章教会你
正常思路是把这N
个数
建成堆,然后 pop k次,即可找到最大的
前
k个值。 但是有些场景,上面的思路解决不了,比如N非常大的情况。 假设N是10亿,k是
100
,就不可能运行出结果。 因为如果这样建成堆的话,所占用的空间太大了。 10亿个整数需要多大的空间?答案是4GB。 4GB的内存啥电脑来了也吃不消,再说
100
亿,
100
0亿呢? 可见这不是一个可行的方法,咱们另辟蹊径。 我们知道,当数据很大时,它不会存在内存上,而是转而储存在磁盘文件里,所以我们的思路就转向磁盘文件。 磁盘
中
能建堆吗?答案是
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章