首页
新闻
论坛
群组
Blog
文档
下载
读书
Tag
网摘
搜索
.NET
Java
游戏
视频
人才
外包
培训
数据库
书店
程序员
欢迎您:
游客
| 退出
| 登录
注册
帮助
我的帖子
我参与的帖子
我的空间
我的网摘
CSDN
CSDN社区
专题开发/技术/项目
数据结构与算法
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
生成帖子
置顶
推荐(加精)
取消推荐(加精)
锁定帖子
移动帖子
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
百度面试题 很有学习意义 各位讨论讨论哈。。。。
[已结贴,结贴人:wjc_hit]
加为好友
发送私信
在线聊天
wjc_hit
噶哈
等级:
发表于:
2008-05-21 23:59:43
楼主
1给你a、b两个文件,各存放50亿条url,每条url各占用64字节,内存限制是4G,让你找出a、b文件共同的url。、
2给你一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词。现在给你一个字典,用户输入一个单词,让你根据字典找出这个单词有多少个兄弟单词。 (这道题面试官说有O(1) 的解法,。。。。。)
3五桶球,一桶不正常,不知道球的重量和轻重关系,用天平称一次找出那桶不正常的球。
问题点数:
20
回复次数:
387
显示所有回复
显示星级回复
显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
oo
为了名副其实,努力学习oo技术ing
等级:
发表于:
2008-05-22 09:28:18
1
楼 得分:
0
2,可以对字典做预处理吗?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
tailzhou
幸福的尾巴
等级:
发表于:
2008-05-22 09:49:13
2
楼 得分:
0
2肯定需要预处理;
兄弟单词的每个字母的个数是一样的;每个字母的个数一样的单词互为兄弟;
兄弟单词的数目以 “ 每个字母的个数”为key 使用hash来保存,就可以做到o(1)
3能有解?
文字游戏?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
oo
为了名副其实,努力学习oo技术ing
等级:
发表于:
2008-05-22 10:16:14
3
楼 得分:
10
把单词里的字母排序后的串做HASH也可以
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
yatobiaf
yatobiaf
等级:
发表于:
2008-05-22 11:32:23
4
楼 得分:
0
1也是要预处理的。
一个比较笨的方法:
先对a,b分别进行外排序,然后顺序遍历比较a和b……
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
yatobiaf
yatobiaf
等级:
发表于:
2008-05-22 11:35:00
5
楼 得分:
0
1,如果用hash的话,4G的内存不够啊,怎么搞?一个url我们认为是128个字节,那4G内存就只能存1024*1024*1024/128=800万条url
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
oo
为了名副其实,努力学习oo技术ing
等级:
发表于:
2008-05-22 13:05:26
6
楼 得分:
0
1,内存放不到,可能需要借助外存
(1),读取文件,计算HASH,按HASH值分段放入不同的文件,文件数可以比较多,两个文件的URL,分开不同的文件放(a1,a2,...,b1,b2,...),保存时可以把HASH值也保存进去,避免再次计算HASH值
(2),对每一个HASH段,读出两个文件中的一个,比如a1,对HASH值有冲突的放一个连表里,然后读b1文件,取HASH值和URL,如果HASH值在a1中有,则进一步判断URL是否相同。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
wjc_hit
噶哈
等级:
发表于:
2008-05-22 14:04:33
7
楼 得分:
0
你好啊 字典可以预处理
你说的 兄弟单词的每个字母的个数是一样的;每个字母的个数一样的单词互为兄弟;
兄弟单词的数目以 “ 每个字母的个数”为key 使用hash来保存,就可以做到o(1) 是什么意思 不是很明白。。。。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
bhujm
SR
等级:
发表于:
2008-05-22 14:16:43
8
楼 得分:
0
关注一下
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
wjc_hit
噶哈
等级:
发表于:
2008-05-22 15:08:00
9
楼 得分:
0
一般都会想到hash 像你这样分段 是否 a1 要和b1,b2,...bn 都比较看看是否有交集, a2 也要和b1,b2,...bn 都比较看看是否有交集, 。。。。
这样好像效率不是很高 百度的面试基本上都要求给出最优的方法。。。
各位 再想想哈 。。。
对你们表示感谢。。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
wjc_hit
噶哈
等级:
发表于:
2008-05-22 15:16:33
10
楼 得分:
0
什么意思??、
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
wjc_hit
噶哈
等级:
发表于:
2008-05-22 15:20:03
11
楼 得分:
0
我的想法是把 字典建成树(26种字母 26棵树) n个字母的单词有n! 中组合 遍历树。。。。。
不是很好。。。。 大家多提宝贵意见。。。。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
oo
为了名副其实,努力学习oo技术ing
等级:
发表于:
2008-05-22 15:30:16
12
楼 得分:
0
引用 9 楼 wjc_hit 的回复:
一般都会想到hash 像你这样分段 是否 a1 要和b1,b2,...bn 都比较看看是否有交集, a2 也要和b1,b2,...bn 都比较看看是否有交集, 。。。。
这样好像效率不是很高 百度的面试基本上都要求给出最优的方法。。。
各位 再想想哈 。。。
对你们表示感谢。。
a1只需要跟b1比较,因为a1和b1的HASH值在一个段,跟其他的HASH值不在一个段,肯定不会相同的。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
Vitin
卫亭
等级:
发表于:
2008-05-22 15:31:48
13
楼 得分:
0
分段的意思是说,根据同一个hash算法的结果来划分,比如采用0x0-0xFFFFF作为hash值,将a和b分别拆成1M个文件a_0-a_FFFFF和b_0-b_FFFFF个文件。如果a和b中有相同的url,它们必然处在相同的段里。这样只要a_0和b_0比较,a_1和b_1比较就可以了。平均每个文件包含5000个url,远远低于内存的限制,可以放在内存中运行。此时再使用什么方法,hash也好,排序也好,都不是问题了。该方法中,每个url在硬盘上读2次,写1次,是很高效的。
如果因为数据分布问题,造成某个段特别大、超出内存范围的话,可对该段再hash一次(当然得换一个hash算法)。如果还不行(比如数千万条相同的url),就对这部分采用硬盘排序等方法。因为它们仅占很小的比例,不会对整体效率造成大的影响。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
linlan999
linlan999
等级:
发表于:
2008-05-22 19:38:19
14
楼 得分:
0
mark
hash
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
wjc_hit
噶哈
等级:
发表于:
2008-05-22 21:01:41
15
楼 得分:
0
引用 12 楼 oo 的回复:
引用 9 楼 wjc_hit 的回复:
一般都会想到hash 像你这样分段 是否 a1 要和b1,b2,...bn 都比较看看是否有交集, a2 也要和b1,b2,...bn 都比较看看是否有交集, 。。。。
这样好像效率不是很高 百度的面试基本上都要求给出最优的方法。。。
各位 再想想哈 。。。
对你们表示感谢。。
a1只需要跟b1比较,因为a1和b1的HASH值在一个段,跟其他的HASH值不在一个段,肯定不会相同的。
哦 明白 高手 是否有更优的?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
crhacker
探索
等级:
发表于:
2008-05-23 09:30:58
16
楼 得分:
0
mark
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
ybConfi
等级:
发表于:
2008-05-23 10:31:45
17
楼 得分:
0
第二题不知用位图能否解决:
定义一个int型变量,将其初值设为0,26个字母,如果单词含有其中一个字母,就将对应位设为1,例如am,它对应的值就是0X1001,然后查找,对每个单词的对应的位图进行设置,如果结果和要查找的单词的位图相等,找到.
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
oo
为了名副其实,努力学习oo技术ing
等级:
发表于:
2008-05-23 10:41:15
18
楼 得分:
0
引用 17 楼 ybConfi 的回复:
第二题不知用位图能否解决:
定义一个int型变量,将其初值设为0,26个字母,如果单词含有其中一个字母,就将对应位设为1,例如am,它对应的值就是0X1001,然后查找,对每个单词的对应的位图进行设置,如果结果和要查找的单词的位图相等,找到.
一个字母在一个单词里可能有多个,只用一个int做位图的话无法表示
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
ybConfi
等级:
发表于:
2008-05-23 11:02:12
19
楼 得分:
0
谢谢楼上更正!
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
ybConfi
等级:
发表于:
2008-05-23 11:14:28
20
楼 得分:
0
可不可以用26个元素的int数组呢?那样性能差一些,应该能解决!
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
michaelwangwh
超级菜鸟
等级:
发表于:
2008-05-23 12:38:06
21
楼 得分:
0
ls的那种方法应该不是o1吧?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
wjc_hit
噶哈
等级:
发表于:
2008-05-23 15:38:10
22
楼 得分:
0
引用 17 楼 ybConfi 的回复:
第二题不知用位图能否解决:
定义一个int型变量,将其初值设为0,26个字母,如果单词含有其中一个字母,就将对应位设为1,例如am,它对应的值就是0X1001,然后查找,对每个单词的对应的位图进行设置,如果结果和要查找的单词的位图相等,找到.
am为什么对应0x1001 ????? 什么意思 请具体点
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
ybConfi
等级:
发表于:
2008-05-23 16:55:16
23
楼 得分:
0
引用 18 楼 oo 的回复:
引用 17 楼 ybConfi 的回复:
第二题不知用位图能否解决:
定义一个int型变量,将其初值设为0,26个字母,如果单词含有其中一个字母,就将对应位设为1,例如am,它对应的值就是0X1001,然后查找,对每个单词的对应的位图进行设置,如果结果和要查找的单词的位图相等,找到.
一个字母在一个单词里可能有多个,只用一个int做位图的话无法表示
该方法行不通
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
warghost
菜菜的小老鼠
等级:
发表于:
2008-05-24 11:31:55
24
楼 得分:
0
貌似第三题。。。。至少要称两次吧,不懂。。。。。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
longzhanyuye2008
Sawyer
等级:
发表于:
2008-05-24 15:57:24
25
楼 得分:
0
回答: 3五桶球,一桶不正常,不知道球的重量和轻重关系,用天平称一次找出那桶不正常的球
从五桶里分别取出1,2,3,4,5个球。重量如果是16说明是第一桶,如果17说明是第二桶。。。。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
dwtsteven
青苹果
等级:
发表于:
2008-05-24 23:32:14
26
楼 得分:
0
引用 25 楼 longzhanyuye2008 的回复:
回答: 3五桶球,一桶不正常,不知道球的重量和轻重关系,用天平称一次找出那桶不正常的球
从五桶里分别取出1,2,3,4,5个球。重量如果是16说明是第一桶,如果17说明是第二桶。。。。
注意:不知道球的重量和轻重关系
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
zhangxinfanglinmei
Athene
等级:
发表于:
2008-05-25 11:06:33
27
楼 得分:
0
3五桶球,一桶不正常,不知道球的重量和轻重关系,用天平称一次找出那桶不正常的球
从五桶里分别取出1,2,3,4,5个球。重量如果是16说明是第一桶,如果17说明是第二桶。。。。
怎么算出来的?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
liudianwai
liuyu8383
等级:
发表于:
2008-05-27 09:52:16
28
楼 得分:
0
第三个题如果有一桶全都不正常且重量一样就有戏
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
Seattle2006
等级:
发表于:
2008-05-27 16:51:59
29
楼 得分:
0
学习了
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
wuyi8808
空军
等级:
发表于:
2008-05-27 20:35:29
30
楼 得分:
0
引用 25 楼 longzhanyuye2008 的回复:
回答: 3五桶球,一桶不正常,不知道球的重量和轻重关系,用天平称一次找出那桶不正常的球
从五桶里分别取出1,2,3,4,5个球。重量如果是16说明是第一桶,如果17说明是第二桶。。。。
天平有砝码吗?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
Dancing_Sea
沧海之舞
等级:
发表于:
2008-05-27 22:05:11
31
楼 得分:
0
mark
第二题
不能够对字典做操作
求单词的全排列,通过字典查是否存在
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
shshsh_0510
雨下了4年11个月零2天
等级:
发表于:
2008-05-28 09:00:42
32
楼 得分:
0
1给你a、b两个文件,各存放50亿条url,每条url各占用64字节,内存限制是4G,让你找出a、b文件共同的url。
这个关键要减小IO次数,先排序再找需要遍历4次,是线性的,应该可以接受。具体实践时再考虑对4G的充分利用优化一下。
2给你一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词。现在给你一个字典,用户输入一个单词,让你根据字典找出这个单词有多少个兄弟单词。 (这道题面试官说有O(1) 的解法,。。。。。)
构造特征向量:v=II pi
II为连乘,pi为第i素数,i为字母序号
3五桶球,一桶不正常,不知道球的重量和轻重关系,用天平称一次找出那桶不正常的球。
造币厂问题,5太小了,easy.
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
rayleigh_z
CodeRay
等级:
发表于:
2008-05-28 09:21:22
33
楼 得分:
0
mark
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
Vitin
卫亭
等级:
发表于:
2008-05-28 20:05:18
34
楼 得分:
0
第三题真的是造币厂问题吗?请注意“不知道球的重量”。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
shshsh_0510
雨下了4年11个月零2天
等级:
发表于:
2008-05-29 12:09:16
35
楼 得分:
0
引用 34 楼 Vitin 的回复:
第三题真的是造币厂问题吗?请注意“不知道球的重量”。
呵呵,没看清题。
3五桶球,一桶不正常,不知道球的重量和轻重关系,用天平称一次找出那桶不正常的球。
天平称一次,可以有两种情况:
1、平衡 ;2;不平衡
平衡时,如想鉴别异常球,只有一种可能,即正常的4桶均有球参与了称重,而异常的没有球参与称重。
所以称重时,天平上至少有来自4个桶的球。
不平衡时,无妨设同一桶只在一侧。至少有一侧有两种以上球。故无法判别。
即使知道球的轻重,一次应该也无法判别
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
zjfhgdx