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

 

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

一、实现一个简化的搜索提示系统。给定一个包含了用户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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值