题目:
设计一个系统处理词语搭配问题,比如说 中国 和人民可以搭配,则中国人民 人民中国都有效。要求:
*系统每秒的查询数量可能上千次;
*词语的数量级为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,性能达到几毫秒没问题。
作者:csdn博客 hhh3h
更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/
时间: 2024-12-10 05:57:38