找回密码
 欢迎注册
查看: 20705|回复: 23

[分享] 百度HR算法设计题

[复制链接]
发表于 2010-6-1 11:48:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
1.给定如下的n*n的数字矩阵,每行从左到右是严格递增, 每列的数据也是严格递增

1 2 3

3 5 6

4 8 9

现在要求设计一个算法, 给定一个数k 判断出k是否在这个矩阵中。 描述算法并且给出时间复杂度(不考虑载入矩阵的消耗)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-6-1 12:02:48 | 显示全部楼层
题目应该很简单,我自己做的,不知道是不是log(n)*long(n)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-6-1 12:23:49 | 显示全部楼层
本帖最后由 qianyb 于 2010-6-1 12:29 编辑

先用二分查找到小于k的最大行,再用二分法查找,复杂度应该是$2log_2n$
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-6-1 13:00:41 | 显示全部楼层
我是按对角线进行二分查找,找出k所在的行或列m,然后分别对这个m行和m列余下的部分再进行二分查找,所以平均复杂度应该是O(logn*logn),
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-6-1 13:10:25 | 显示全部楼层
按你的方法,平均复杂度也是$2log_2n$,不过你的方法在编程上处理时比我的方法复杂
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-6-2 09:08:58 | 显示全部楼层
3# qianyb


最大行怎么找出来的?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-6-2 11:10:57 | 显示全部楼层
复杂度应该是O(n)的,就是一个杨氏矩阵的问题。2log2n做不到

评分

参与人数 1威望 +2 鲜花 +6 收起 理由
wayne + 2 + 6 多谢

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-6-2 11:53:35 | 显示全部楼层
本帖最后由 qianyb 于 2010-6-2 14:28 编辑

我题目理解错了,以为下一行的数据都比上一行大。就算上一行有的数据比下一行大,但复杂度还是$log_2n$不过代码的控制复杂了些
算法思路是

先从(1,1)开始按对角线查找小于k的最大行和大于k的最小行,即(x,x)>k,(x+1,x+1)<k,这是k可能的范围是矩形(x+1,1),(n,x)和矩形(1,x+1),(x,n)范围内,在这两个范围内再次以对角线方式进行查找小于k的最大行和大于k的最小行,最后缩小到每个矩形为1时结束
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-6-2 13:57:55 | 显示全部楼层
如果只简单的判断矩形中间元素,那么复杂度应该是$n*lg(n)$吧。
To litaoye:O(n)的法子是什么?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-6-2 14:29:15 | 显示全部楼层
是查找元素k在不在矩阵中
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-27 22:16 , Processed in 0.046235 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表