10亿个整数中找出前10万个数
2010-12-01 15:50 Sun Yongyue 阅读(709) 评论(0) 编辑 收藏 举报-)
先考虑另一个问题:2000个乱序的32位整数中取出前10个。直接修改后的快排上。
二)
现在的问题是10亿个,假设32位int,单个数字占用4个byte,10亿个数字就大概是4G的空间。目前普通的个人电脑达不到这个要求,无法做到一次load进内存进行修改后的快排。为了更明显点,不妨放大到1000亿数据取前10万个,明显大多数的服务器也做不了一次load内存-___-。
如果我有这个问题,我会问:单台机?多台机(或已经有map-reduce方式的计算集群)?
1) 单台机,
最小堆(或最大堆,看要求)。乖,不用争,排好队,一个一个来。
忘了写上复杂度,如果总个数是N(比如说10亿),要的个数是M(比如说10万),那复杂度是N*log(M)。比快排弱一点,但是这个场景还好。
2) 多台机map-reduce
先分成N份(比如10份、100份),各自先找出前10万个,再从结果的N*10万个里找出前10万个。
三)
还没完,如果数据量是前边所说的1000亿,甚至10000亿个呢?
看看,32位的整数撑死也就2^32=4G个,小于40亿,那10000亿个数是不是可以考虑Hash呢?
大概想法,大概想法,想太多了,异想天开。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步