一、只用2GB内存在20亿个整数(32位)中找到出现次数最多的数

解题思路:

想要在很多整数中找到出现次数最多的数,通常的做法是使用哈希表对出现的每一个数做词频统计,哈希表的key是某一个整数,value是这个数出现的次数。就本题来说,一共有20亿个数,哪怕只是一个数出现了20亿次,用32位的整数也可以表示其出现的次数而不会溢出,所以哈希表的key占用4B,value占用4B,因此一条记录占用8B,在极端情况下,有20亿条记录,需要20亿*8B=16GB>2GB。

解决办法是把包含20亿个数的大文件用哈希函数分成16个小文件,根据哈西函数的性质,用一种数不可能被哈希到不同的小文件上。然后对每一个小文件中用哈希表来统计其中每种数出现的次数没这样我们就得到了16个小文件中各自出现次数最多的数,还有各自的次数统计。接下来只要选出这16个小文件各自的第一名中最大的数即可。

二、海量日志数据,提取出某日访问某网站次数最多的那个IP

首先是这一天,并且是访问指定网站的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个^32个IP。同样可以采用映射的方法, 比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大 的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。
算法思想:分而治之+Hash

1.IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理;
2.可以考虑采用“分而治之”的思想,按照IP地址的Hash(IP)%1024值,把海量IP日志分别存储到1024个小文件中。这样,每个小文件最多包含4MB个IP地址;
3.对于每一个小文件,可以构建一个IP为key,出现次数为value的Hash map,同时记录当前出现次数最多的那个IP地址;
4.可以得到1024个小文件中的出现次数最多的IP,再依据常规的排序算法得到总体上出现次数最多的IP;

转载于:https://www.cnblogs.com/xiaomoxian/p/5161428.html

[算法]海量数据问题之一相关推荐

  1. 算法——海量数据(5%)

    1,有一个很大很大的输入流,大到没有存储器可以将其存储下来, 而且只输入一次,如何从这个输入流中随机取得 m个记录. 2,大量的URL字符串,如何从中去除重复的,优化时间空间复杂度 3, 设计一个系统 ...

  2. 推荐 Python 十大经典练手项目,让你的 Python 技能点全亮!

    前言:如果有人问:"Python还火吗?""当然,很火.""哪能火多久呢?""不知道." 技术发展到现在衍生出许多种编程 ...

  3. 推荐Python十大经典练手项目,让你的Python技能点全亮!

    前言:如果有人问:"Python还火吗?""当然,很火.""哪能火多久呢?""不知道." 技术发展到现在衍生出许多种编程 ...

  4. Tag Archives: 海明距离

    在前一篇文章 <海量数据相似度计算之simhash和海明距离> 介绍了simhash的原理,大家应该感觉到了算法的魅力.但是随着业务的增长 simhash的数据也会暴增,如果一天100w, ...

  5. 揭秘特斯拉自动驾驶雄心:最大优势非算法或技术而是海量数据

    来源:腾讯科技  审校:金鹿 腾讯科技讯 9月20日消息,对于电动汽车制造商特斯拉来说,实现全自动驾驶始终是其优先议程之一.与其他竞争对手相比,该公司的最大优势并非技术或算法,而是目前上路的40多万辆 ...

  6. 万变不离其宗之海量数据下的算法问题处理思路

    本文介绍 万变不离其宗之海量数据下的算法问题处理思路 万变不离其宗之海量数据下的算法问题处理思路 本文由在当地较为英俊的男子金天大神原创,版权所有,欢迎转载,但请保留这段版权信息,多谢合作,有任何疑问 ...

  7. java token redis生成算法_如何访问 Redis 中的海量数据,服务才不会挂掉?

    来源:www.toutiao.com/i6697540366528152077 一.前言 有时候我们需要知道线上的Redis的使用情况,尤其需要知道一些前缀的key值,让我们怎么去查看呢?并且通常情况 ...

  8. 几道和「黑洞照片」那种海量数据有关的算法问题

    昨晚被一则新闻刷屏:北京时间 4 月 10 日今晚 9 点,人类首张黑洞照片正式发布. 看到这张图片,小吴心里是极为震撼的:爱因斯坦太太太太太牛逼了!!! 同时,看新闻的时候小吴还注意到里面有个细节, ...

  9. 大数据与算法系列之海量数据查找算法

    在某些时候,可能会涉及在海量数据中的查找,如果采用通常的做法,则很难达到一定的效果,在实际工程实践中,海量数据的查找性能很肯恩鬼成为整个系统的性能瓶颈,在海量数据中的查找包括基于布隆过滤器的方式,以及 ...

  10. 海量数据搜索、存储、查询、排序算法

    http://hi.baidu.com/bellgrade/item/ac4febc7befd657089ad9eaa 海量数据库的应用,如国家的人口管理系统,户籍档案管理系统,在这样的海量数据库应用 ...

最新文章

  1. 类加载过程中几个重点执行顺序整理
  2. 快速排序算法图解分析
  3. 云炬WEB开发笔记 第2章小结回顾
  4. 小游戏掉帧卡顿启动慢运行内存不足……这些问题有解吗?
  5. OpenGL实现3D立体显示
  6. docker 目录 挂载
  7. 模型图像ASM(Active Shape Model) 主动形状模型总结
  8. mate30后续用鸿蒙系统,mate30可以升级鸿蒙不?升级后还能退回原系统吗?
  9. vc实现文件的打印--BOOL Print_html(const char *sURL)
  10. CSS基础学习-10.CSS伸缩盒(老版本)
  11. 三星安卓手机刷linux,三星galaxy nexus刷ubutun系统的详细步骤
  12. landesk 卸载_landesk怎么卸载,软件卸载不了怎么办
  13. 去掉office 2010在标题前就会出现小黑点。
  14. 商标注册过程中,如何避免字体侵权?
  15. SAP SD MM PP HR FI CO EWM 等PA认证考试报名/指南/题库
  16. fatal: Authentication failed
  17. swfobject1.5
  18. 反射-获取信息详细(转)
  19. GitBlit使用说明书
  20. K8S之ReplicaSet详解

热门文章

  1. Google搜索命令语法大全
  2. 陶哲轩实分析 习题 12.5.4,12.5.5
  3. 我叫金三顺的经典爱情名言
  4. 在java EE版本eclipse下如何查看tomcat部署的位置 。版权声明:本文为博主原创文章,未经博主允许不得转载。...
  5. Junit介绍与实现
  6. 新商业模式 私下销售 Private Sales Gilt Groupe年营收1.5亿
  7. HTML的form表单标签
  8. JavaSE入门学习10:Java修饰符
  9. JS调用WebService
  10. PHP Filesystem