楼主: newkid

[精华] 趣味SQL:微软面试题:过河

[复制链接]
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
111#
 楼主| 发表于 2012-4-4 22:11 | 只看该作者
对109楼的补充:
关于X的计算有这么一个上限:在N和“慢”组的组数+1 中取较小的那个。
随着“慢”组一批批过河,X的上限也会发生变化,从而影响到X的值,所以X在这个过程中是可能变化的,但可以事先算好。

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
112#
 楼主| 发表于 2012-4-5 00:56 | 只看该作者
109的X求法还不够严密,将F(X+1)和F(X)+F(2)比较还不够,还得考虑F(X-1)+F(3) ......等等

使用道具 举报

回复
论坛徽章:
8
玉兔
日期:2015-11-16 10:18:00铁扇公主
日期:2015-10-27 21:47:42九尾狐狸
日期:2015-12-11 22:31:15
113#
发表于 2012-4-5 10:07 | 只看该作者
56楼即使2人过河的结论也是错误的啊,比方经典24点题目 1,5,5,5

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
114#
 楼主| 发表于 2012-4-5 22:15 | 只看该作者
lugionline 发表于 2012-4-5 10:07
56楼即使2人过河的结论也是错误的啊,比方经典24点题目 1,5,5,5

呃!你真是找茬大师!
修改我的算法:
X不一定从2开始,可以是从1..N的数;
“快”组的人数不限于X, 可以是2..N, 这就不得不逐个尝试,事先计算的希望破灭了。算法复杂度又上升为指数级。但是 1..X-1的快组可以不考虑。
确定X的意义还在于快慢组要如何交替,当对岸没有1..X的人才需要再次输送快组。
问题是确定X的算法到底有木有?

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
115#
发表于 2012-4-6 00:25 | 只看该作者
靠,兔子按耐不住给射了呀

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
116#
发表于 2012-4-6 00:26 | 只看该作者
lugionline 发表于 2012-4-5 10:07
56楼即使2人过河的结论也是错误的啊,比方经典24点题目 1,5,5,5

印象中原题有限制条件,就是大家的速度各不一样

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
117#
 楼主| 发表于 2012-4-6 02:18 | 只看该作者
lastwinner 发表于 2012-4-6 00:26
印象中原题有限制条件,就是大家的速度各不一样

换成1,98,99,100 也足以推翻56的算法。

56 算法:
1+98,1,99+100,98,1+98 用时 395

最优解:
1+98,1,1+99,1,1+100 用时 299

可见让猪结伴过河不一定是最好办法。

使用道具 举报

回复
论坛徽章:
10
CTO参与奖
日期:2009-02-20 09:44:20ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30迷宫蛋
日期:2012-05-07 10:55:58茶鸡蛋
日期:2012-04-19 16:08:262012新春纪念徽章
日期:2012-01-04 11:54:462011新春纪念徽章
日期:2011-01-04 10:24:02数据库板块每日发贴之星
日期:2010-12-19 01:01:02数据库板块每日发贴之星
日期:2010-12-13 01:01:012009日食纪念
日期:2009-07-22 09:30:00优秀写手
日期:2014-02-08 06:00:12
118#
发表于 2012-4-6 08:53 | 只看该作者
本帖最后由 tree_new_bee 于 2012-4-6 08:54 编辑
newkid 发表于 2012-4-6 02:18
换成1,98,99,100 也足以推翻56的算法。

56 算法:

之前的帖子我曾怀疑过是否应该考虑让第三个、第四个人充当摆渡人的角色。
从最后这几个例子来看, 第二个人是否充当摆渡人的角色都要权衡。

这样,也许算法应该改成:
1. 计算确定摆渡人的数目 (如何计算是个问题?)
2. 让摆渡人都过去, 有空位的话让最大的跟着一起过去
3. 让对岸最小的回来
4. 如果摆渡人都在出发地,则摆渡人都过去(有空位的话让最大的跟着一起过去), 否则让最大的N个人过去
5. 让对岸最小的回来
。。。

这里有两个大的问题:
1. 摆渡人的数目如何计算是个难题
2. 是否存在那种传输过程中一半路程需要某个数量的摆渡人,另一半路程需要不同数目的摆渡人,想不清楚。

使用道具 举报

回复
论坛徽章:
10
CTO参与奖
日期:2009-02-20 09:44:20ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30迷宫蛋
日期:2012-05-07 10:55:58茶鸡蛋
日期:2012-04-19 16:08:262012新春纪念徽章
日期:2012-01-04 11:54:462011新春纪念徽章
日期:2011-01-04 10:24:02数据库板块每日发贴之星
日期:2010-12-19 01:01:02数据库板块每日发贴之星
日期:2010-12-13 01:01:012009日食纪念
日期:2009-07-22 09:30:00优秀写手
日期:2014-02-08 06:00:12
119#
发表于 2012-4-6 09:13 | 只看该作者
本帖最后由 tree_new_bee 于 2012-4-6 10:19 编辑

对于容量为2的时候进行评估:
假设是4人, t1-t4
那么2个摆渡人时:
t1+t2
t1
t3+t4
t2
t1+t2
总和为s2= (t2+t1+t4) + 2t2+t1
1个摆渡人时(为了容易与上面对比,略微调整顺序但不影响结果):
t1+t2
t1
t1+t4
t1
t1+t3
s1=(t2+t1+t4)+2t1+t3
两者都消去同样的项目后, s2-s1 = 2t2 - (t1+t3)
也就是说如果t2大于t1和t3的平均值,则用一个摆渡人更优, 反之则是2个摆渡人好。


5个人的时候同样:
2个摆渡人时:
t1+t2
t1
t4+t5
t2
t1+t2
t1
t1+t3

s2= (t2+t1+t5)+2t2+t1+t3
1个摆渡人时:
t1+t2
t1
t1+t5
t1
t1+t4
t1
t1+t3

s1=(t2+t1+t5)+ 2t1+t4+t3

s2-s1 = 2t2 - (t1+t4)


同样的方法, 分析6-8个人, 可以得到:
6个人
s2-s1 = 4t2 - (2t1 + t3 + t5)
7个人
s2-s1 = 4t2 - (2t1 + t6+t4)
8个人
s2-s1 = 6t2 - (3t1 + t7+t5+t3)

这样,似乎找到了规律:
假设n个人的s2-s1为diff(n),则:
diff(n) = (n|2) * 2 - ((n|2) t1 + t(n-1) + t(n-3) + ... )
(n|2) 表示n整除2


对于给定的n, 计算diff(n),如果为正, 那么应该只用一个摆渡人, 如果为负,则用两个摆渡人, 为0则两种方法都可以。


使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
120#
发表于 2012-4-7 02:32 | 只看该作者
newkid 发表于 2012-4-6 02:18
换成1,98,99,100 也足以推翻56的算法。

56 算法:

嗯,之前我们都犯了一个错,没人去推演一下总让最快的回来和猪结伴过河,到底哪个更快
现在有了这些实例,可以推出这是不一定的,与具体的数值有关

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表