35. 百度研发笔试题:设计一个系统处理词语搭配问题

题目:

设计一个系统处理词语搭配问题,比如说 中国 和人民可以搭配,
则中国人民 人民中国都有效。要求:

  *系统每秒的查询数量可能上千次;
  *词语的数量级为10W;
  *每个词至多可以与1W个词搭配

当用户输入中国人民的时候,要求返回与这个搭配词组相关的信息。


分析:

性能要求:每秒查询量达到上千次,意思就是QPS要达到1000以上。

搜索端使用多线程处理,现在服务器都是多核的,可以充分利用服务的资源。

数据结构:

      所有词语建一张大表,并给每个词语分配一个id. 存储结构如下:

id1,word1,id2,word2,...,idn,word2


     词语的检索使用hash,设计一个好的词语哈希算法,使得检索词语的性能达到O(1)

     再建一个词语间搭配关系表,词语id+词语id list(每个词语id+它对应搭配的词语id集)


检索算法:

     查询query --->使用分词,找到所有可能搭配,

     ---》使用哈希检索到对应的词语---》找他们之间可能的搭配关系,可以搭配的词组返回,不可以搭配的,返回空结果。


哦了,小型的搜索引擎就设计好了。


这个系统性能耗的最多的地方是找可能词组的搭配关系,每个词可能的搭配关系是1000次,每两个词之间的匹配次数为10000次

如果有 m 中可能词组组合,每个词组之间平均的词为n个,那匹配的最多次数为n*m*10000 。

性能维持再O(n),差不多的服务器,QPS 1000,性能达到几毫秒没问题。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值