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

题目:

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

*系统每秒的查询数量可能上千次;

*词语的数量级为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-08-03 14:25:31

百度研发笔试题解析:设计一个系统处理词语搭配问题的相关文章

百度研发笔试题解析: 一串首尾相连的珠子(m个),有N种颜色(N<=10)

题目: 一串首尾相连的珠子(m个),有N种颜色(N<=10), 设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短. 并分析时间复杂度与空间复杂度. 分析: 使用一个额外的数组存储颜色计数: colors[N],并且定义一个颜色个数遍历int cn=0; 使用数组a[m]表示首尾相连的珠子. 遍历数组a,统计对应的颜色,如果等于颜色的个数等于N,记录下开始位置i,和结束位置j, 得到遍历的字符串长度j-i+1, 如果字符串的长度最小,则输出i,j. 更多精彩内容:http://www

【译】系统设计入门之面试题解答 —— 设计一个网页爬虫

本文讲的是[译]系统设计入门之面试题解答 -- 设计一个网页爬虫, 原文地址:Design a web crawler 原文作者:Donne Martin 译文出自:掘金翻译计划 译者:吃土小2叉 校对者:lsvih 设计一个网页爬虫 注意:这个文档中的链接会直接指向系统设计主题索引中的有关部分,以避免重复的内容.你可以参考链接的相关内容,来了解其总的要点.方案的权衡取舍以及可选的替代方案. 第一步:简述用例与约束条件 把所有需要的东西聚集在一起,审视问题.不停的提问,以至于我们可以明确使用场景

自己设计一个系统,怎么写对数据库的操作日志啊?日志这方面不太会,求帮助。

问题描述 求解答,谢谢各位前辈了 解决方案 解决方案二:一般是通过日志文件来记录操作的数据,日志文件可以是数据库表.解决方案三:就是建立一个表,每次做什么操作就把操作的信息写进去.也可以写到文件中.解决方案四:但愿你不是听说过"数据库操作日志"这个词儿就来问吧.技术上,数据库的日志跟你理解的完全是两回事,那是数据库系统软件开发的事情.也就是说,如果你今天想再次发明一个SQLServer软件并且卖给微软,那么你就需要设计这个"数据库操作日志"了.解决方案五:假设你要的

2014百度校招笔试题之动态链接库&amp;amp;静态链接库详解

1.什么是静态连接库,什么是动态链接库         静态链接库用通俗的话讲,静态库就是将代码编译到一个二进制文件下(通常扩展名为.LIB).然后客户端调用程序,只需要包含相关的.h文件及LIB库文件一起链接到exe文件中.可执行程序发布后,不再需要该.lib文件了. 动态链接库最终将编译出.lib与.dll文件. 注意.lib文件与上面的静态库虽然扩展名相同,但有本质的区别.动态库中的lib文件是动态库的引入库. 该引入库包含被DLL导出的函数和变量的"符号  名".而静态库中的.

设计一个只能在堆上或栈上实例化的类

一道C++笔试题:设计一个只能在堆内存上实例化的类和一个只能在栈内存上实例化的类 只能在堆内存上实例化的类:将析构函数定义为private,在栈上不能自动调用析构函数,只能手动调用.也可以将构造函数定义为private,但这样需要手动写一个函数实现对象的构造. 只能在栈内存上实例化的类:将函数operator new和operator delete定义为private,这样使用new操作符创建对象时候,无法调用operator new,delete销毁对象也无法调用operator delete

php面试笔试题一

* 请实现一个函数,输入一段文本,把文本解析到一个数组中,数组每行元素的key通过输入参数指定. 函数原型:function ExplodeLines($text, $columnNames) 例如,输入:  代码如下 复制代码 $text = " Apple,20,red Pear,10,yellow "; $columnNames = array('Fruit', 'Number', 'Color') 函数返回: array( array('Fruit'=>'Apple',

网页转换-请问设计了一套笔试题(word2007版),如何转换成网页格式并具备倒计时功能?

问题描述 请问设计了一套笔试题(word2007版),如何转换成网页格式并具备倒计时功能? 我设计了一套人格测试题,都是选择题,用的是word07版,希望将答题时间限定在15分钟内,在候选人点击进去时便开始倒计时,咨询了一位IT朋友,她说要转换成网页格式并下一个插件,请教各位大神,应该如何做才能实现计划功能?谢谢! 解决方案 http://www.officezu.com/a/word/6203.html 解决方案二: 网页的话,js有很多第三方计时库

设计一个智能客服系统

背景: 最近在设计一个公司的智能客服系统,通过对现有人工客服语料作为样本,通过训练样本完成整个QA过程或业务办理过程. 整体思路 AliceBot负责闲聊,这里用了开源的语料,也可以添加语料到DB,基于AIML. AbilityBot主要负责公司业务上的咨询和办理,它提供了不同的能力接口,供外系统交互. predict模块用于预测响应. train模块用于训练客服对话样本. 语音转换 由第三方语音识别服务提供转换成文本,比如讯飞. 语义处理 由于机器本来是无法理解文本的含义的,如果要真正做到语义

如何设计一个RPC系统

RPC是一种方便的网络通信编程模型,由于和编程语言的高度结合,大大减少了处理网络数据的复杂度,让代码可读性也有可观的提高.但是RPC本身的构成却比较复杂,由于受到编程语言.网络模型.使用习惯的约束,有大量的妥协和取舍之处.本文就是通过分析几种流行的RPC实现案例,提供大家在设计RPC系统时的参考. 由于RPC底层的网络开发一般和具体使用环境有关,而编程实现手段也非常多样化,但不影响使用者,因此本文基本涉及如何实现一个RPC系统. 认识RPC(远程调用) 我们在各种操作系统.编程语言生态圈中,多少