社区
C++ 语言
帖子详情
有10亿个浮点数,从中找出1万个最大的数。写一个高性能的算法
mikemeego001
2011-06-02 08:47:00
rtt
...全文
345
11
打赏
收藏
有10亿个浮点数,从中找出1万个最大的数。写一个高性能的算法
rtt
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
giveable-coding
2011-06-03
打赏
举报
回复
其实真正用堆来做内存的使用量和堆的大小有关,1万个浮点数的内存也就在1MB左右,用小根堆来选择top k是没问题的。
giveable-coding
2011-06-03
打赏
举报
回复
“有10亿个浮点数,从中找出1万个最大的数。写一个高性能的算法”
这个题目是从10亿个中找出1万个最大的,如果这10亿个数里面有很多重复的数,我觉得应该先用hash,把这10亿个数字“去重”,这样如果重复率很高的话,会减少很大的内存用量,10亿个浮点数的内存不大于1GB,如果重复率很大,可能内存会降到0.5GB左右;如果不重复,那就直接使用堆来选择,然后再用一个维护1万个元素的“小根堆”进行筛选,将数据一次读入堆,因为小根堆,所以堆顶始终是1万个大数中的最小的,将要读的数与堆顶元素比较,如果大,进堆,否则什么不做,读下一个数字,最后这个小根堆中就维护了一个1万个最大的数字。
giveable-coding
2011-06-03
打赏
举报
回复
就是将不同的浮点数作为key,带入到一个合适的hash函数里,然后算出存储地址,放进去,每个散列存储单元里存一个结构体吧,数据域存这个浮点数,次数域存出现的次数,比如1.234存了进去,当在次出现1.234时就将次数域加1,就可以了吧,这样就不用重复的空间去存储了
luciferisnotsatan
2011-06-03
打赏
举报
回复
最大堆
10亿个,用64位系统,可以全放进内存里。
32位,就用内存文件映射吧
mikemeego001
2011-06-03
打赏
举报
回复
怎样用hash去除重复?
鸵鸟
2011-06-03
打赏
举报
回复
max heap
cunsh
2011-06-02
打赏
举报
回复
直接用 stl 的 partial_sort_copy() 就可以.
算法大体上就是用序列的前n个元素构造最大堆. 然后遍历第n个以后的元素.若小于堆的最大值(即第一个元素)则把它放到堆里把原来的拿出来. 这样遍历完后堆中就是前n个最小的元素了. 再对这个堆做个堆排序就好了.具体可以参考<stl源码剖析>.
另外回复楼上: 10亿个元素比如可以放在文件中等.
游牧小小诗人
2011-06-02
打赏
举报
回复
10亿啊。。。这得多少内存啊~~~~~留个脚印,看看有高手没有
alweeq86
2011-06-02
打赏
举报
回复
vector<double>MaxNumArray;
InitialMaxNumArray();//读入前10000个数
MaxNumArray.Sort();//从大到小排序
for(long long i=10000;i<1000000000;++i)
{
double data;
read(data);
if(data>MaxNumArray[10000-1])
{
MaxNumArray.Erease(9999);
MaxNumArray.PushBack(data);
MaxNumArray.Sort();
}
}
//随便手写的
zhengguodun
2011-06-02
打赏
举报
回复
一个10000个元素的数组 ,一开始把前面的10000个都读进去,然后每来一个就跟这一万个比较,把最小的替换。。。
好像,,,不够高效~~~
Liby
2011-06-02
打赏
举报
回复
o(╯□╰)o,来踩踩,报道,新人,无法为你解惑(⊙o⊙)…
面试之大
数
找关键值(如从
10
亿个
浮点
数
中
找出
最大
的1
万个
)
如从
10
亿个
浮点
数
中
找出
最大
的1
万个
网络搜索之类的题目
整理后java开发全套达内学习笔记(含练习)
int 32bit, -2^31~2^31-1 (2147483648,20亿,
10
位有效
数
字) long 64bit, -2^63~2^63-1 (900亿亿,20位有效
数
字) float 32bit, 9位有效
数
字,含小
数
(四舍五入)(小
数
点算一位,正负号不算) double 64bit, 18位...
有
10
亿个
浮点
数
,
从中
找出
1
万个
最大
的
数
。
有
10
亿个
浮点
数
,
从中
找出
1
万个
最大
的
数
。
写
一个
高性能
的
算法
算法
和
数
据结构1.
一个
数
组,大小
10
000,指针指向头尾部,称min和max 2.排序下(
算法
自选吧) 3.比min指针小的
数
字,忽略;大于max的,max指针移到min指针位置,...
有
10
亿个
浮点
数
,
找出
一
万个
最大
的
数
给
一个
基于最小二叉堆的方案: 第一阶段,向最小二叉堆中插入前一
万个
浮点
数
; 第二阶段,从第一万零
一个
浮点
数
开始,将之与最小二叉堆顶部的最小值比较。如果小于这个最小值,把最小值弹出并将新值插入到二叉堆中。...
面试-从
10
亿个
浮点
数
中
找出
最大
的1
万个
从一道笔试题谈
算法
优化出处引子每年十一月各大IT公司都不约而同、争后恐后地...这两天在网上淘到一道笔试题目(注1),虽然真假未知,但的确是道好题,题目如下: 从
10
亿个
浮点
数
中
找出
最大
的1
万个
。这是一道似易实难
C++ 语言
64,682
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章