社区
C#
帖子详情
[求助]一道笔试试题,请大家近来试试:)
renchao
2006-02-13 01:37:11
搜索引擎的日志要记录所有查询串。
假设有一千万条查询,但不重复的不超过三百万条,现要统计最热门的10条查询串。
注:内存<1G,字符串长为0-255。
请写出主要解决思路,并分析算法复杂度。
...全文
537
18
打赏
收藏
[求助]一道笔试试题,请大家近来试试:)
搜索引擎的日志要记录所有查询串。 假设有一千万条查询,但不重复的不超过三百万条,现要统计最热门的10条查询串。 注:内存<1G,字符串长为0-255。 请写出主要解决思路,并分析算法复杂度。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dxy1982
2006-02-13
打赏
举报
回复
看不明白呢
HopeInDark
2006-02-13
打赏
举报
回复
mark
JOYCE_WEI
2006-02-13
打赏
举报
回复
不会
renchao
2006-02-13
打赏
举报
回复
有效率更高的做法吗?
谢谢大家帮忙了!
LGame
2006-02-13
打赏
举报
回复
强,帮你顶
chsl918
2006-02-13
打赏
举报
回复
另外,我考虑到搜索引擎的日志可能没有保存在数据库中,所以我充分使用出题者给出的条件,进行回答。毕竟是比试,和实际工作还是有区别的。
chsl918
2006-02-13
打赏
举报
回复
先循环将1千万条数据汇总变成三百万条以下数据。并在循环过程中将每一条出现的次数统计出来。
因为三百万数据量所占用空间为:3,000,000*255=765000000字节=729.56085205078125M。说明在内存中能够放下。
在内存中建立一个具有两个字段的DataTable,分别放置这300,0000个查询,和查询出现的次数。
下一步,找出这3,000,000条数据中出现最多的前十条查询。
就是做一个有十行数据的DataTable,先把前十条数据保存到此DataTable中,然后做排序,后边的只要有比第十名查询次数多就把第十名挤出去。然后和第九名比,依次类推。
好像叫做冒泡循环。
此方式复杂程度低,效率也低。要对一千万数据循环一遍,三百万数据循环一遍,十条数据,循环上百万遍。
如果用矩阵我想应当可以提高效率,但是用矩阵实现麻烦,我也不熟悉,就懒得查资料了。有兴趣的朋友可以补充进来。
伴老思源
2006-02-13
打赏
举报
回复
300百万数据已测试,速度还可以,
伴老思源
2006-02-13
打赏
举报
回复
然后再建一个虚表,取top 10就可以了,建议写成存储过程来处理,
伴老思源
2006-02-13
打赏
举报
回复
select
distinct Recorder ,
'重复记录'= ( A.Recorder ),
'所占数量' = ( select count(*) from Table where Recorder = A.Recorder )
from Table A
order by '所占数量' desc
hexinyu2005
2006-02-13
打赏
举报
回复
......
luoboqingcai
2006-02-13
打赏
举报
回复
支持一下。
aimcy
2006-02-13
打赏
举报
回复
给你顶
frank_necsthz
2006-02-13
打赏
举报
回复
好难阿,没有思路,关注中
Ivony
2006-02-13
打赏
举报
回复
实际中绝对没有这么干的……
一定要弄一个字段保存行数据的哈希值,或者别的可以表示数据唯一性的东西,然后再对这个字段进行分组即可。哪里可能每一行逐字段比较看看是不是重复的……
renchao
2006-02-13
打赏
举报
回复
谢谢chsl918(Stroy Book)!
chsl918
2006-02-13
打赏
举报
回复
用循环汇总实现。
DataTable dt一千万;
//将一千万查询项目保存到dt一千万中
DataTable dt三百万=new DataTable();
//初始化dt三百万具有“数据”和“出现次数”字段。
for (long i;i<dt一千万.Row.Count;i++)
{
DataView dv=new (dt三百万,"数据="+dt一千万.Row[i]["数据"].Tostring(),null,CurrentRows);
if (dv.count!=0)
{
//向dt三百万中添加数据,将出现次数置为1
}
else
{
//将dt三百万中相应的出现次数加一
}
}
虽然用程序实现确实麻烦了一些,但实际上数据库中也是用类似算法实现的。不过数据库因为程序作的底层,运行效率比较高。而且此功能封装好了,我用distinct等参数可以调用这些功能。
renchao
2006-02-13
打赏
举报
回复
chsl918(Stroy Book)说:
“先循环将1千万条数据汇总变成三百万条以下数据。并在循环过程中将每一条出现的次数统计出来。”具体怎么实现呢?也用SQL吗?
那还不如象abandonship(eagles of wind)那样直接order一下?
阿里巴巴2014
笔试
题(客户端)DOC文档
阿里巴巴2014
笔试
题(客户端)
最全的C和C++语言
笔试
面
试题
汇总
最全的C和C++语言
笔试
面
试题
汇总,我大四时候找工作时候他帮上了很多忙,里面的题目经常考到。希望对大家有帮助。
C/C++程序设计员应聘常见面
试试
题深入剖析
C/C++程序设计员应聘常见面
试试
题深入剖析,不看会后悔!!!!!!!!!
微软面试100题系列之高清完整版PDF文档[带目录+标签]by_July
本微软面试100题系列,共计11篇文章,300多道面
试题
,截取本blog索引性文章:程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦:http://blog.csdn.net/v_july_v/article/details/6543438,中的第一部分编辑而成,涵盖了数据结构、算法、海量数据处理等3大主题。 闲不多说,眼下九月正是校招,各种
笔试
,面试进行火热的时节,希望此份微软面试100题系列的PDF文档能给正在找工作的朋友助一臂之力! 如果读者发现了本系列任何一题的答案有问题,错误,bug,恳
请
随时不吝指正,你可以直接评论在原文之下,也可以通过私信联系我。 祝诸君均能找到令自己满意的offer或工作,谢谢。July、二零一二年九月二十日
大疆嵌入式
笔试
试题
整理最全(附超详细知识点整理与详解)
刚刚结束了大疆的嵌入式工程师
笔试
考试,考的是A卷,答的不好,考试之前在网上找了很多往年的
试题
,确实是有很多往年考过的知识点,下面是我整理的往年的
试题
并按照这些
试题
顺序整理的知识点。下面是我按照文章中
试题
顺序整理的知识点PDF文件截图,左侧有目录方便复习时查看。题型:单选、多选、判断(新增)、填空、简答、编程。大疆嵌入式
笔试
试题
整理。知识点PDF文件私信我。.....................
C#
110,537
社区成员
642,576
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章