论坛首页 招聘求职论坛

请教两道面试题

浏览 18413 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-02  

有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。请用5分钟时间,找出重复出现最多的前10条。
收藏了1万条url,现在给你一条url,如何找出相似的url。(面试官不解释何为相似)
   发表时间:2008-11-02  
hyxw5890 写道

有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。请用5分钟时间,找出重复出现最多的前10条。

这个…有点意思…
要我做的话就先排序,排完序按首字分成N个子任务,每个子任务里去掉首字,递归上述过程
除非这个数据是刻意做成有很多重复或者即使不重复也在前面有很多相似,只要是正常的数据一定能保证在5分钟里完成
0 请登录后投票
   发表时间:2008-11-02  
hyxw5890 写道

有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。请用5分钟时间,找出重复出现最多的前10条。
收藏了1万条url,现在给你一条url,如何找出相似的url。(面试官不解释何为相似)


找出重复:
sort text | uniq -c

相似 url 感觉比较复杂.
0 请登录后投票
   发表时间:2008-11-03  
这个类似串的查找,需要快速检索可以用KMP算法
0 请登录后投票
   发表时间:2008-11-03  
hash文件,这种题目现在考的太多了
0 请登录后投票
   发表时间:2008-11-05  
谁能详细说一些hash文件归类的算法啊?

看完上面的帖子,还是不怎么明白。
0 请登录后投票
   发表时间:2008-11-05   最后修改:2008-11-05
gigix 写道
hyxw5890 写道

有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。请用5分钟时间,找出重复出现最多的前10条。

这个…有点意思…
要我做的话就先排序,排完序按首字分成N个子任务,每个子任务里去掉首字,递归上述过程
除非这个数据是刻意做成有很多重复或者即使不重复也在前面有很多相似,只要是正常的数据一定能保证在5分钟里完成


难得gigix来玩算法。实际上你说的就是radix sort的过程,不过一次1个char有点吃亏了。反正都是多次hash,不如key选择大些,可以明显提高速度,减少遍历次数,考虑到1000万条,可以选择前2个char作为key,然后一直记录前十多大的key,然后对他们继续递归的做下去。前面红线去掉,全部hash
ps,第一次完事平均来看每个key有2^21/2^16=2^7=32个。没有仔细分析的情况下,大约平均来看这种效率最高。
0 请登录后投票
   发表时间:2008-11-05  
重复的意思应该就是两条完全一样吧.......
用string.equalus不就可以了么....
排完序之后再便历一遍就可以了吧..........
0 请登录后投票
   发表时间:2008-11-05  
ddandyy 写道
重复的意思应该就是两条完全一样吧.......
用string.equalus不就可以了么....
排完序之后再便历一遍就可以了吧..........

排序对于字符串来说本来就非常慢,equals按位比,也很慢,对所有的都做,非常慢。
0 请登录后投票
   发表时间:2008-11-05  
其实这个题目跟偶的一次c语言课程设计的题目雷同。

偶的思路是:
先建一个struct,里面存短信,并且内置一个计数器(int型)。

再建一个struct链表,用于存取排序后的短信列表。

下面开始读取整个短信文件(这一步省不掉的,算法复杂度是n),

遇到重复的短信,那么该短信的计数器加一并且跳过,在将该利用插入排序算法将该短信节点按计数器大小插入到struct链表中,读取文件结束后,就取链表的前十位,ok,结束!


已被评为好帖!
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics