首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内
[问答题]
在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可。
添加笔记
求解答(3)
邀请回答
收藏(8)
分享
纠错
3个回答
添加回答
1
代码受虐者
10G的整数找出中位数,限制内存2G,假设数都是int型占4B,2G内存一次性能读入5亿个int,10G整数int总共有25亿个int,分5次读入?nono,这样只能判断某位数是否存在。延申:找第k个数,可以先分批读入排序,再多路归并,得到有序序列找第k个数。
但找中位数可以有另一个思路,不用全部排序,4B * 512MB = 2G,可以把int的取值范围32bit位的空间分为512MB个取值范围,即内存中0~512M的位置表示,对每个取值范围内的数进行统计,遍历一次后知道每个范围内出现了多少个数,便可以得出中位数在那个范围内出现,再对这个范围内出现的整数进行排序,
找到中数。
发表于 2021-04-28 12:30:25
回复(0)
0
短尾矮袋鼠
10G个乱序整数,求中位数:基于桶排序的思想。每次读入1G的文件,根据整数的最高8bit写入到文件中,分到2^8=256个桶里,同时在内存中记录每个桶的count。根据每个桶的数量确定中位数在哪个桶里。假设数据分布比较均匀,每个桶的大小大概在10G/256=40MB, 可以读入内存。用O(NlogN)的排序方法即可得到结果。
发表于 2017-09-17 19:47:21
回复(0)
0
牛客116800号
0-ffff分成多分,比如十份,分别统计出每一份的个数,找其中位数在的某份里面。进行递归。效率不知道好不好
发表于 2016-07-13 22:34:45
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
微软
高级算法
上传者:
李煜sunny
难度:
3条回答
8收藏
10789浏览
热门推荐
相关试题
编写实现链表排序的一种算法。说明为...
微软
链表
排序
评论
(2)
假定一个待哈希存储的线性表为(32...
哈希
评论
(1)
5.下列判断正确的是( )
资料分析
言语理解与表达
资料分析
评论
(1)
《拳皇97》最后BOSS是谁?
游戏常识
评论
(1)
《魔兽世界》中,下列不属于玩家可以...
游戏常识
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题