百度实习生笔试题

hackbuteer1 2012-05-06 03:51:38
1、给一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么b是a的兄弟单词,比如的单词army和mary互为兄弟单词。
现在要给出一种解决方案,对于用户输入的单词,根据给定的字典找出输入单词有哪些兄弟单词。请具体说明数据结构和查询流程,要求时间和空间效率尽可能地高。

2、系统中维护了若干数据项,我们对数据项的分类可以分为三级,首先我们按照一级分类方法将数据项分为A、B、C......若干类别,每个一级分类方法产生的类别又可以按照二级分类方法分为a、b、c......若干子类别,同样,二级分类方法产生的类别又可以按照是三级分类方法分为i、ii、iii......若干子类别,每个三级分类方法产生的子类别中的数据项从1开始编号。我们需要对每个数据项输出日志,日志的形式是key_value对,写入日志的时候,用户提供三级类别名称、数据项编号和日志的key,共五个key值,例如,write_log(A,a,i,1,key1),获取日志的时候,用户提供三级类别名称、数据项编号,共四个key值,返回对应的所有的key_value对,例如get_log(A,a,i,1,key1)。
请描述一种数据结构来存储这些日志,并计算出写入日志和读出日志的时间复杂度。

3、C和C++中如何动态分配和释放内存?他们的区别是什么?

算法与程序设计、
网页爬虫在抓取网页时,从指定的URL站点入口开始爬取这个站点上的所有URL link,抓取到下一级link对应的页面后,同样对页面上的link进行抓取从而完成深度遍历。为简化问题,我们假设每个页面上至多只有一个link,如www.baidu.com/a.html链接到www.baidu.com/b.html再链到www.baidu.com/x.html,当爬虫抓取到某个页面时,有可能再链www.baidu.com/b.html,也有可能爬取到一个不带任何link的终极页面。当抓取到相同的URL或不包含任何link的终极页面,即完成爬取。爬虫在抓取到这些页面后建立一个单向链表,用来记录抓取到的页面,如:a.html->b.html->x.html...->NULL。
问:对于爬虫分别从www.baidu.com/x1.html和www.baidu.com/x2.html两个入口开始获得两个单向链表,得到这两个单向链表后,如何判断他们是否抓取到了相同的URL?(假设页面URL上百亿,存储资源有限,无法用hash方法判断是否包含相同的URL)
请先描述相应的算法,再给出相应的代码实现。(只需给出判断方法代码,无需爬虫代码)

系统设计题
相信大家都使用过百度搜索框的suggestion功能,百度搜索框中的suggestion提示功能如何实现?请给出实现思路和主要的数据结构、算法。有什么优化思路可以使得时间和空间效率最高?
...全文
8299 63 打赏 收藏 转发到动态 举报
写回复
用AI写文章
63 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingqingcao22009 2012-11-09
  • 打赏
  • 举报
回复
路过Mark一下~
孙峰90 2012-05-12
  • 打赏
  • 举报
回复
有难度啊
kingjo001 2012-05-12
  • 打赏
  • 举报
回复
今天还投简历了 早看到就不投了 好好多看看书再投
jacson8408 2012-05-11
  • 打赏
  • 举报
回复
第一题思路(假定目标单词为WordA,找WordA的兄弟单词)
前提:无论如何找兄弟单词的过程中无论如何是要便利一遍词典的,所以时间复杂度至少为o(n)
1、从词典中取出单词存在一个临时字符串WordX中
2、比较wordA与该字符串WordX的长度,若长度相等,继续下面的步骤,否则取下一个进行比较
3、取WordA中第一个字符,在临时字符串WordX中查找,若找到了将WordX中的这个字符置为任意一个非法字符(例如0xcc)若没有找到,则比较结束,取下一个进行比较
4、若一直循环到WordA的所有字符都取出来比较了,且都在WordX中找到了相对应的,则这个单词就是WordA的兄弟单词

假设平均每个单词为10个字母,在最糟糕的情况下,时间复杂度为o(100n)

请大家给意见

frogoscar 2012-05-11
  • 打赏
  • 举报
回复
好像不是很简单啊~~~~~~~~~~~~~~~~
w74839520 2012-05-10
  • 打赏
  • 举报
回复
去笔试了,就会第三题。。

自动化研发工程师的。。。。

自动化每天玩模电 数电 没Hold住
kanaverdet 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 51 楼 的回复:]

引用 2 楼 的回复:

笔试面试除了算法还是算法,对于应届生来说。。。

一,每个单词对应char[127]的数组,char[n]表示字母ASCII字母n的出现次数,于是查找的时候就可以memcmp高效的去比较了。

二,三个方案:
1,随便把5个key用各种变化+Hash算出个值开散列一下就行了。
2,也多级哈希,先按A+key散列,如果冲突那么进入2级哈希,用a+key散……
[/Quote]
并不是两个链表是否相交,如果是因为循环中止的,那么进入循环的页面可能是不一样的,末节点不一定一样,但是会存在相同的url,举个例子
a-b-c-d-e-(a)
x-b-c-d-e-a-(b)
zhouxiang6 2012-05-10
  • 打赏
  • 举报
回复
第一道先比较长度,长度一样,再比较两个单词转化成int的和,一样,就是
zhaohai_1988 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

笔试面试除了算法还是算法,对于应届生来说。。。

一,每个单词对应char[127]的数组,char[n]表示字母ASCII字母n的出现次数,于是查找的时候就可以memcmp高效的去比较了。

二,三个方案:
1,随便把5个key用各种变化+Hash算出个值开散列一下就行了。
2,也多级哈希,先按A+key散列,如果冲突那么进入2级哈希,用a+key散列,再冲突进入i+key散列,一……
[/Quote]

关于第四题,确实是不让用辅助空间或者工具,但是题目可以简化成 判断两个链表是否相交。 其实就判断两个链表的末尾节点的URL是否一样即可。一样则说明 抓到过相同的URL。。。
kacy16 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 的回复:]
第一题你们的答案和谷歌给的答案 将近慢了一半还要多...而且占得空间也更大....
我第一次听到真实的答案的时候,惊讶的合不上嘴
[/Quote]
q598162221兄能否介绍一下google的答案思路,谢谢!
nice_cxf 2012-05-10
  • 打赏
  • 举报
回复
第一题用素数大概是不行的,排序如何?先将输入的单词排序,然后在字典里顺序查找,先判断字符串长度是否相同,相同则对该单词排序后比较,如相同则输出
q598162221 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 的回复:]
引用 19 楼 的回复:

第一个貌似老问题。a-z设置成前26个素数,乘法,hash/set。

不太好,还是2L的好点吧,这乘法都超过__int64了...
[/Quote]
如果不止是A-Z甚至有256种可能啊....
自己写个BIGNUMBER 就可以了...好多老外的开源都是这样搞得
q598162221 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 的回复:]
引用 19 楼 的回复:

第一个貌似老问题。a-z设置成前26个素数,乘法,hash/set。

不太好,还是2L的好点吧,这乘法都超过__int64了...
[/Quote]
如果不止是A-Z甚至有256种可能啊....
自己写个BIGNUMBER 就可以了...好多老外的开源都是这样搞得
q598162221 2012-05-10
  • 打赏
  • 举报
回复
首先 我们假设这不是宽字符查找的问题..那么总共每个字符只有256个可能.....
首先由小到大取256个素数 3 7 11 13 17 23 ......
然后256个字符对应256个素数
字典中的每个单词 全部转换成相应素数 然后得出一个积....
比如 abcd =3*7*11*13;
然后把这些大数保存到一个数组中...甚至这里再用hash或者什么的 ....
然后每次得到一个单词只需要去找相应的大数就可以.....
Quester-King 2012-05-10
  • 打赏
  • 举报
回复
这些都是要mark下来慢慢看的!
q598162221 2012-05-10
  • 打赏
  • 举报
回复
第一题你们的答案和谷歌给的答案 将近慢了一半还要多...而且占得空间也更大....
我第一次听到真实的答案的时候,惊讶的合不上嘴
wzjd123 2012-05-10
  • 打赏
  • 举报
回复
发挥程序员超能力逻辑思维的时刻降临!!!!!!!!!
Joller 2012-05-10
  • 打赏
  • 举报
回复
考得我心都碎了。。。。都没怎么学过算法,只能明年再来了
fishion 2012-05-10
  • 打赏
  • 举报
回复
第一题用素数标识就行了,像这样的题出过不少了
pupingpp 2012-05-10
  • 打赏
  • 举报
回复
也去笔试了。没有面试的飘过!题目大致一致,但还是有一些不同。。。。唉。。。
加载更多回复(37)

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧