主题:一道微软面试题,想进微软的来看看(公布了答案,《编程之美》电子书火热下载)
wangxiaomi
[专家分:0] 发布于 2008-01-29 15:19:00
[color=FF00FF][size=4]公布答案了@-@
本题名为 “一撂烙饼的排序问题”,是[url=http://www.china-pub.com/38070]《编程之美——微软技术面试心得》[/url]中一道比较经典的题目。这个排序问题很有意思,解决问题的关键操作是——“单手每次抓几块饼,全部颠倒”。
电子书中给出了本道题的具体解法以及最优方案。书中还讲到比尔盖茨在上大学的时候也研究过这个问题,并且就此发表过论文。大家有没有兴趣知道盖茨研究这个题目的结果是怎样的呢?
电子书中还附有看了[url=http://www.china-pub.com/38070]《编程之美》[/url]后面试微软的小故事 :),大家快来下载吧。。。[/size][/color]
[url=http://www.china-pub.com/38070]《编程之美——微软技术面试心得》[/url] 中的一道题。作者是微软研发经理,主持过多次招聘。大家看看这道题怎么解?
星期五的晚上,一帮微软技术员在希格玛附近的“硬盘酒吧”多喝了几杯。程序员多喝了几杯之后谈什么呢?自然是算法问题。有个同事说:
我以前在烙饼店打工,顾客经常端非常多的烙饼。店里的饼大小不一,我习惯在到达顾客饭桌前,把一摞饼按照大小次序摆好——小的在上面,大的在下面。由于我一只手托着盘子,只好用另一只手,一次抓住最上面的几块饼,把它们上下颠倒个个儿,反复几次之后,这摞烙饼就排好序了。
我后来想,这实际上是个有趣的问题:假设有n块大小不一的烙饼,那最多/最少要翻几次,才能达到最后大小有序的结果呢?
话音刚落,吧台的酒保就开腔了:这太难了吧。我有个简单的问题。有一次我烙了三个饼,一个两面都焦了,一个两面都是金黄色,一个一面是焦的,一面是金黄色,我把它们摞一起,只能看到最上面一个饼的一面,发现是焦的,问最上面这个饼的另一面是焦的概率是多少?
不少喝酒的人脱口而出:1/2!
上面的说法对吗?你能否写出一个程序,对于n块大小不一的烙饼,输出最优化的翻饼过程呢?
最后更新于:2008-06-12 17:53:00
回复列表 (共10个回复)
沙发
CrashRain [专家分:420] 发布于 2008-02-08 19:30:00
靠,我知道错了,第二个错的,应该是1/3,第一个应该和冒泡差不多(最多步为2(n-1)),先选最大的,把它和上面的一起倒过来,然后和其他的一起倒回来,就在最下面,其他的依次类推。
板凳
wangxiaomi [专家分:0] 发布于 2008-02-22 18:35:00
转贴一个别人的答案:
这个问题其实就是一个数据结构中的排序问题
最少当然是0次(烙饼本来就是从大到小排好的)
最多应该是插入排序最坏情况下的次数 好像是N平方次
最优的话 应该用快速排序算法 算是最好的了
不知道对不对
3 楼
wangxiaomi [专家分:0] 发布于 2008-02-28 11:40:00
Maximum : 2*(n-2) + 1
O(n)
4 楼
wangxiaomi [专家分:0] 发布于 2008-03-03 12:07:00
本书3月中旬上市。
潘爱民倾力推荐《编程之美——微软技术面试心得》
我很早知道邹欣计划要写这样一本书,也能够预计到这本书定会广受欢迎,因为它符合当前大量求职人员的需求,毕竟于他们而言,谁不想知道微软亚洲研究院在招人时候问些什么问题呢。另一方面,把考察软件技术人员专业知识和相应技能的各种手段加以归纳和整理,这本身也是对业界的贡献,所以,我相信,一旦这本书如计划般完成,其对业界的影响将是深远的。
在我的面试经历中,通过一些具体的程序问题来考察人,往往是最有效的,即使是一些人所皆知的问题,也往往能够挖掘出被面试者的亮点或弱点,原因在于,每个问题都有不同层次的解答之辞,面试者总是可以刨根究底地问下去。我们在看一段程序的时候,思路固然重要,细节也是不可忽视的,比如整数是否越界、指针是否为空,等等。这些细节可以用于考察基本功,毫无疑问,基本功不扎实的人通常很难得到面试者的青睐。
当拿到这本书的样稿时,我迫不及待地放下手头工作,阅读起来。有些题目的内容会引起强烈的共鸣,尤其是那些自己非常熟悉并且又深知解答的题目;也有一些题目让我异常惊诧,原来除了我所知道的解答思路之外,还有更好的解答以及更深层次的原因。还有一些题目是从来没想到过的。阅读过程是一次愉快的享受,也是脑细胞持续活跃的过程。
充满好奇心的人们总是能从生活的点点滴滴中想到或找到各种优化的余地,比如说,楼宇中的电梯常常显得很“傻”(微软研究院所在的希格玛大厦的电梯是一个典型的例子),更智能或更有效的调度策略完全有可能;近距离内的交通灯联动可以有效地提高行车效率。程序员在玩电脑游戏的时候常常会想着怎么自动完成一些过程,比如说,本书中提到的俄罗斯方块游戏中如何有效地旋转和移动可快速地消除积木块、24点游戏如何自动求解、推箱子游戏如何自动求解,扫地雷游戏如何自动完成,等等。实际上,这些自然的疑问正是训练程序能力的好来源,本书采录了不少此类题目。因此,阅读本书可以满足很多人的好奇心,这也正是我自己的体会。
尽管作者在前言中声称“虽经过几轮审核,不少解法仍可能有漏洞或错误”,但事实上,在绝大多数题目的讲解中,作者已经由浅入深地把问题分析透了,而且,作者也为读者指出了进一步思考这些题目的方向。不同背景的人在看到这些题目的时候,可能会有不同的解法,甚至完全不同的思路。举例而言,邹欣曾经问过我如何控制CPU占用率曲线的问题,我当时的直觉是,直接截取Taskmgr调用的相关API函数,从而达到随意控制CPU占用率曲线的目的。显然这不是规范的做法,本书的分析揭示了这个问题背后的本质道理以及考问要点。另一种情况,即使有的问题你深知其理,但看过本书仍然很有收获。例如,在斐波那契数列问题中,我知道直接递归法的缺陷,也知道如何简化成迭代法来改进效率,还会推导通项公式,但是,书中的细致讲解仍然让我对这个问题有了更进一步的认识。这是本书的深度所在,如果读者更加在意所选题目背后的深层次道理,相信书中的讲解不会让你失望。
除了趣味性以外,本书中的题目讲解之中也融入了大量专业知识。这使得本书可以作为计算机数据结构课程或算法课程的辅助参考书。比如,有些问题的解答涉及到贪心算法或动态规划方法,算法的复杂度分析更是无处不在。数据结构教科书中介绍的链表(list)、队列、hash表和二叉树等常用数据结构也多有提及。因此,对于正在学习数据结构或算法课程的学生来说,本书中的问题正是对课程中所学知识的一次检阅,通过本书他们可以看到这些知识是如何用于解决实际问题的。从我自己的教学经验来看,这样的题解分析有助于提高学生的学习兴趣。另一方面,阅读本书也需要有必要的计算机算法和程序设计知识作为基础,否则阅读的效果会大打折扣。
我大致了解本书的成书过程,从策划阶段到题目收集,再到成稿和改稿,我能体会到邹欣和他的写作团队倾注了大量的精力来写作这本书。他们尽了最大的努力来编写这本书,无论是原创的题目,还是传统的题目,他们都努力把题目分析透彻并提供扩展思考的余地。邹欣在发送样稿给我的信中说道:“Our goal is to ship a top quality book. I can't say "world class", but definitely "best in China" level.”以我阅读这本书的体会来讲,他们做到了这一点。我相信,这本书的出版会符合我当初的预期,它会影响到很多人。
潘爱民
2008年2月
5 楼
lpf46261479 [专家分:970] 发布于 2008-03-08 23:02:00
1/2 就是对的。
因为发现一面是焦的,那么另一面出现焦的情况占50%。
因为看到焦的一面,那么这种饼是2个,问另一面出现的概率。当然要不焦,要不黄。
如果是问 出现这种情况另一面还是焦的话概率是多少,那就是1/3。因为三个饼,出现一焦一黄当然是1/3了。
上面的题,最好的情况是0次,本来就是好的。
最差情况是(n-1)*2+1次.(由上到下是最大,最小,次大,次小。。。。。这样排列。
除了第一个翻一次,余下的都要翻2次。
6 楼
webhost862 [专家分:190] 发布于 2008-03-22 22:33:00
难题哦!
7 楼
大智天空 [专家分:0] 发布于 2008-05-09 20:06:00
我觉得最上面这块屏的另一面焦的概率是2/3吧
8 楼
wanglie2000 [专家分:0] 发布于 2008-05-21 01:21:00
第一个的答案是最大次数 2n-3 最小次数0
先把从最上的到最大的翻一下,再整个翻一下,最大的就到了最下
依次把第二大,第三大,一直到第三小的翻到正确位置,
这时一共翻的次数是 2*(n-2)
只剩下最小的和第二小的 ,这两个最多翻一下 ,就完成了
所以再加一次 总共是 2*(n-2)+1=2n-3
最小次数0就不要说了吧
9 楼
jbo126 [专家分:40] 发布于 2008-06-07 23:59:00
[color=000080][size=3][size=2]
问题一:
除了最小的饼不用翻,次小的翻1次,其他的所有的饼都要翻2、1或0次,最坏的情况即除第一、二个外,其他的都翻了两次,即最大为2*(N-2)+1+0,最好的情况所有的饼都翻0次,即最小为0
问题二:我也赞同前面的某位同志,1/2[/size][/size][/color]
10 楼
riviere [专家分:0] 发布于 2008-08-31 14:35:00
我觉得第二题的答案应该是2/3
我来回复