海量数据搜索、查询
2016-05-13 16:18
218 查看
1.有一篇英文文章(也就是说每个单词之间由空格分隔),请找出“csdn”这个单词出现的次数。
要求效率最高,并写出算法的时间级。方法一:
假设不区分大小写,由于英文字母有26个,因此,可以将单词映射为数字。csdn被映射成:
( ‘c ‘- ‘a ‘)*32*32*32+( ‘s ‘- ‘a ‘)*32*32+( ‘d ‘- ‘a ‘)*32+( ‘n ‘- ‘a ‘)
即:( ‘c ‘- ‘a ‘)(1 < <15)+( ‘s ‘- ‘a ‘)(1 < <10)+( ‘d ‘- ‘a ‘)*(1 < <5)+( ‘n ‘- ‘a ‘)
再将每个英文字母进行映射,定义循环,从第一个字符开始的映射开始,向后加四个并与CSDN的映射进行比较即可。
时间复杂度:O(n*len),n为单词个数,len是单词的平均长度。
方法二:
KMP算法,进行字符串匹配。时间复杂度度O(num+4).num指的是所有字符的个数。
2.从1亿个ip中找出访问次数最多的IP
算法思想:IP地址最多有2^32=4G种取值可能,所以不能完全加载到内存中。
可以考虑分而治之的策略;
map
按照IP地址的hash(IP)%1024值,将海量日志存储到1024个小文件中,每个小文件最多包含4M个IP地址。
reduce
对于每个小文件,可以构建一个IP作为key,出现次数作为value的hash_map,并记录当前出现次数最多的1个IP地址。
有了1024个小文件中的出现次数最多的IP,我们就可以轻松得到总体上出现次数最多的IP。
类似问题:
(1)假设有1kw个身份证号,以及他们对应的数据。身份证号可能重复,要求找出出现次数最多的身份证号。
(2)怎么在海量数据中找出重复次数最多的一个
3.百度每天都会接受数亿的查询请求, 如何在这么多的查询(Query)中找出高频的Query是一个不小的挑战.
而你的任务则更加艰巨, 你需要在极其有限的资源下来找出这些高频的Query.(使用内存不得多于1MB) 。输入文件是一行一个Query,以文件结束符结尾。每个Query字节数L(一个汉字两个字节)满足:0<=16. 输入大小不超过1GB(包括换行符)。 输出你认为最高频的100个query. 每行一个, 不能有重复, 不能多输出, 但可以少输出(见样例).hash,然后建立hash[103][100]的节点的表,每次找出出现次数最少的进行替换。???
相关文章推荐
- [LeetCode][JavaScript][Python]Reverse Vowels of a String
- 【cocos2d-x从c++到js】09:JS与C++的交互1——JS代码调用C++代码
- jvm优化堆大小设置
- scrapy-redis基础和介绍
- [Java视频笔记]day24
- 响应式web网站设计制作方法
- python中用的到奇淫技巧
- [主席树套堆 区间修改 标记永久化] BZOJ 3489 A simple rmq problem
- Android ViewPager放入多个XML如何监听其的控件_程序架构参考
- b/s常见漏洞
- gunzip -9代表什么
- [bzoj 2152] 聪聪可可 树上点分治
- PHP Jquery
- hdu 1546(dijkstra)
- Oracle 'no privileges on tablespace 表空间名称' 问题解决
- Tornado编译vxworks本质及过程
- appium之Context切换
- String类型 与 空指针
- appium 之Xpath使用
- 分段控件----UISegmentedControl