社区
数据结构与算法
帖子详情
今天面试的一道算法题,求解
LAST_MAN
2012-06-08 12:38:57
有10G 的日志文件 存储格式为 [cmd:from:abc@163.com,to:123@qq.com]
设计一个算法,求出由163域发出的邮件,接受最多的前50个域
如 abc@163.com 发到 123@qq.com 如果QQ邮箱接受是前50多的,则显示出来,并且显示有多少条是从163到QQ的
我想到的是用multimap容器来存储信息~~
求解答
...全文
424
15
打赏
收藏
今天面试的一道算法题,求解
有10G 的日志文件 存储格式为 [cmd:from:abc@163.com,to:123@qq.com] 设计一个算法,求出由163域发出的邮件,接受最多的前50个域 如 abc@163.com 发到 123@qq.com 如果QQ邮箱接受是前50多的,则显示出来,并且显示有多少条是从163到QQ的 我想到的是用multimap容器来存储信息~~ 求解答
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
BinaryTreeEx
2012-06-21
打赏
举报
回复
这种题目没什么水准吧
天下第一好大人
2012-06-10
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
接着 gogdizzy(天下第一好大人) 说:
也可以不对哈希表里所有的value排序,维护一个含有50个元素的最小堆,堆的元素就是value。每个value值同堆的第一个元素比较,若小于堆的第一个元素,继续下一个,若大于,替换堆的第一个元素。最后堆的50个元素就是前50多。如果要求有序,再对前50多排序
[/Quote]
我忘了只需要前50了。
可以用partial qsort。
nosort
2012-06-10
打赏
举报
回复
if (DictOfDomain.ContainsKey("key")) 这个应该是if (DictOfDomain.ContainsKey(key))
如果没有理解错误,题目应该不难做。不要被10G吓到了。
nosort
2012-06-10
打赏
举报
回复
不知道我理解对不对,题目是求前50个出现最多的收件人邮件域,即类似@XXX.com
那么我们可以假设,日志文件中的所有邮件域不是一个很大的数据,也许不超过一两万;
这样,你只要建立一个以邮件域为key,接收邮件次数为Value的dictionary
然后打开日志,一行一行地读这个文件,如果发件人是@163.com就处理,否则下一行;
将符合上述条件的收件人邮件域累计到dictionary中即可。
示例:
Dictionary<string, long> DictOfDomain=new Dictionary<string, long>();
//do(file!=eof)
string key = "@qq.com";//经过确认是163发出的收件人邮件域
if (DictOfDomain.ContainsKey("key")) { DictOfDomain[key] += 1; } else { DictOfDomain.Add(key, 1); }
//end do
最后对dictionary的value进行排序,就可以得到前50邮件域
AndyZhang
2012-06-10
打赏
举报
回复
读文件 + hash
bulver
2012-06-09
打赏
举报
回复
[Quote=引用 7 楼 的回复:]
引用 6 楼 的回复:
关注一下,10G的数据量还是很大的,lz的面的什么公司?
一个小公司……但是出的题很有水准%……
在校实习生的职位,我晕
[/Quote]
噢…多面面是好的…
freud.wy
2012-06-09
打赏
举报
回复
首先把由163发出的所有目的域记录下来,然后按照hash值划分成若干个文件,这样相同的必定在同一个文件中,再把每个小文件以此读入内存统计每个目的域的出现次数再排序。
LAST_MAN
2012-06-08
打赏
举报
回复
[Quote=引用 6 楼 的回复:]
关注一下,10G的数据量还是很大的,lz的面的什么公司?
[/Quote]
一个小公司……但是出的题很有水准%……
在校实习生的职位,我晕
bulver
2012-06-08
打赏
举报
回复
关注一下,10G的数据量还是很大的,lz的面的什么公司?
iamzhaiwei
2012-06-08
打赏
举报
回复
接着 gogdizzy(天下第一好大人) 说:
也可以不对哈希表里所有的value排序,维护一个含有50个元素的最小堆,堆的元素就是value。每个value值同堆的第一个元素比较,若小于堆的第一个元素,继续下一个,若大于,替换堆的第一个元素。最后堆的50个元素就是前50多。如果要求有序,再对前50多排序
天下第一好大人
2012-06-08
打赏
举报
回复
hashmap<string,int> domain_count;
统计从163发出的邮件,目的地作为key,每次将value+1
最后对哈希表里所有的value排序。
hnu_0720
2012-06-08
打赏
举报
回复
开10个线程 ,每个线程处理一部分数据,然后将数据汇总。然后在扫描一遍汇总数据,可以不?
IranCyberArmy
2012-06-08
打赏
举报
回复
前50多的啊,所有知名的邮箱域也想不出来50个,就把所有知名的邮箱写出来就行了。
baidu20008
2012-06-08
打赏
举报
回复
这样啊行?
10G文件先分成若干小于机器内存的文件,然后逐个读取一遍 判断那些由163发出的邮件 记下目的域
可以使用hash表存储 条数信息
C语言
求解
最长公共子字符串问
题
及相关的
算法
分析
题
目:如果字符串一的所有字符按其在字符串...分析:求最长公共子序列(Longest Common Subsequence, LCS)是
一道
非常经典的动态规划
题
,因此一些重视
算法
的公司像MicroStrategy都把它当作
面试
题
。 完整介绍动态规划将
8个
面试
应对
算法
题
小技巧
跟大家分享一些在处理
算法
题
时的技巧和方法,尤其是在
面试
或者是比赛的时候应付难
题
的技巧。说不定就可以在关键时刻起到作用。冷静 首先要说的就是冷静,越是一些重要的节点,越是要冷静。一旦心里慌乱,手足无措,...
常见的80道
面试
算法
题
数据结构与
算法
面试
题
80道 标签:
面试
算法
数据结构structgoogle微软 2011-12-14 15:11 99059人阅读 评论(5) 收藏 举报 本文章已收录于: 分类:
算法
与数据结构(37) ...
掌握这几个
算法
题
.NET初级
面试
算法
不发愁
它的基本思路是每次在未排序的元素中选择最小的...本文讲述了6种
面试
题
,主要是排序和查找类的
算法
题
,这也是
面试
中比较常见的一些
算法
题
。冒泡排序
算法
是一种简单的排序
算法
,它通过重复比较相邻的元素来实现排序。
面试
题
算法
总结--go实现
常见
面试
算法
题
总结
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章