[转载]两道题(简化的搜索提示系统+随机数发生器)

来源:互联网 发布:sql exists 怎么用 编辑:程序博客网 时间:2024/06/05 06:44
 

两道题(简化的搜索提示系统+随机数发生器)

一、实现一个简化的搜索提示系统。给定一个包含了用户query的日志文件,对于输入的任意一个字符串s,输出以s为前缀的在日志中出现频率最高的前10条query。

提示:

1、可以预处理日志。

2、假设query不超过10亿条,每个query不超过50字节。

3、考虑在大查询量的情况下如何实现分布式服务。          

思路1:

因为可以预处理,所以先日志分析,对query进行外排序,只保留每个待搜索字符串(这个字符串可以从所有关键字中得到) 的top10 记录。然后对结果进行索引,比如用apache的lucene,或者更进一步的solr。

思路2:

搜索一般都不是即时的,即不会即时就搜索出网络上出现的新内容,也不会即时删除已经过是的内容。

日志就是一个文件,在这里就是被搜索的文件。

预处理就是有程序定时的去处理文件,按照常用的搜索关键字去完整的搜索文件,并建立索引文件,当用户搜索时,可以直接通过索引文件返回给用户。

分布式,就是拆分了,比如每个服务器分别处理不同的站点,或是一个文件中不同的区段,将处理的结果返回给主服务器,合并后返回给用户。

            

二、假设某一随机数发生器,产生0的概率为p,产生1的概率为1-p。

问,如何用这种随机数发生器产生各占一半的0和1?

思路1:

一个以概率p<1产生0,1-p的概率产生1。则按n重贝努利概率公式可知,连续产生两次,一共有4种可能:

    组合                概率

    00                   p*P

    01                   p*(1-p)

    10                   (1-p)*p

    11                   (1-p)^2

可见01和10的概率是一样的,因此当产生01时输出0,产生10时输出1,其它情况不输出。这样输出的0和1的概率是一样的。

思路2:

用两个这样的随机数发生器,产生两组随机数,每组中0占的比例为p,1占的比例为1-p。将其中一组的0和1互换,则该组中1占的比例为p,0占的比例为1-p。合并两组,则0和1各占一半。

From:http://hi.baidu.com/tangsu2009/blog/item/f0c2a1ca6c39140fbe09e6fe.html