提示:1、他们都是很聪明的人;2、他们的原则是先求保命,再去多杀人;3、100颗不必都分完,但要保证每人至少抓一颗;4、若有重复的情况,则也算最大和最小,一并处死。
这个算法题是在网上看到的,觉得很有趣,而且很多数学分析师做了很多分析见解,看完之后,觉得很有魅力。所以总结一下:
曾加的见解:
“他们的原则是先求保命,再去多杀人”。
我的理解是:
- 每个人采取方案,使得剩下的人在采取最佳方案的时候,自己的存活概率最大;
- 如果有多种方案使得自己的存活概率最大且相同,则采取杀死人最多的方案;
假设我的理解正确,那么, 这道题将会有一个可怕的答案。
定义:
引理 1:
当
则第
证明:
这个方案,可以确保自己不死,同时剩下未取豆子的人死亡概率最大。
其中:
是确保剩下的人至少有一颗绿豆可选,且自己至少取了 2 颗;
是确保自己取的绿豆数至少比前面取的最多的人少 1 ;
由于
- 如果
,他在确保自己存活的情况下,使得剩下的豆子数最少,这样可以杀更多的人;
- 如果
,他在确保自己存活的情况下,剩下的人每个人只能取 1 颗豆子,确保杀死剩下的所有人;
推论1:如果第 1 个人想要存活,那么他取的豆子数不能超过 20 颗,否则,后面的人只要采取引理1 的方案,将保证自己存活,且此时第 1 个人会因为取的绿豆数最多而死亡,而最后 1~3 个人(根据第 1 个人取的绿豆数)会因为自己取的豆子数最少而死亡;
引理 2:当
则第
(其中,
因为当且仅当在这种情况下,只要前面的人取的绿豆数的最大最小值之差不小于 2,自己就确保能存活(否则存活范围会变窄)
* 对于第 5 个人,这个条件可能不成立,比如见到前面四个人取了 62 颗, 可能是 14+16+16+16,也可能是 15+15+15+17,所以他无论取 15 颗还是 16 颗都有机会但不能确保自己存活。
而所有人取绿豆的最大最小值的差不大于 1,所有人都得死;
引理3: 当大家都极度自私的情况下,前 2 个人没有存活的可能
这是因为由引理2,如果第 3~5 个人都会采取对他们而言存活概率的方案,如果第 2 个人和第 1 个人取的绿豆数差超过 1 个,那前两个人就包揽了最大最小值,必须死,如果差不超过1,则所有人都得死;
既然第 1 个人没有存活概率,那他的目标就很耐人寻味了:
如果自己没有存活概率——
选择1:杀死尽可能多的人
选择2:尽可能拯救更多的人
按照我的假设,应该是前者。
既然第 1 个人没有存活概率,不妨让大家都死得干净些—— 取走 96 颗绿豆!
但如果,第 1 个人有点恻隐之心,做出了选择 2:
那,他会取走 21~33 的豆子数,根据 引理1, 第 2~4 个人会存活;
所以,本题根据对题意的不同理解,有两解:
- 所有人都死亡;
- 第 2~4 个人存活;
而对于第 1 个囚犯,他将面临一个哲学难题:
如果自己不可能活下去,你会选择让别人陪葬,还是让其他人好好活下去?
如果是你,会怎么选择呢?
在大家开始看答案之前,我必须指出:因为题目中没有“每个人都知道其他人也很聪明”这个条件,所以, 不会出现A选96颗豆子这种情形。
下面是分析:
假设有3个人ABC,10个豆子,其他条件不变。
一开始B是非常紧张的,他开始了思考。
对他来讲,有上中下三种策略
- 上策:自己活着
- 中策:全部死光光
- 下策:自己死了,但有其他人活着。
- A如果拿8颗豆子,B拿1颗豆子,C拿1颗豆子。全死。
- A如果拿7颗豆子,现在轮到B做选择了
- B如果拿1颗豆子,C不敢拿1颗,必然拿2颗。C独活。
- B如果拿2颗豆子,C只能拿1颗,B独活。
- 因为B是个理性人,B这个小婊砸一定会拿2颗。AC死了。
- A如果拿6颗,B就拿3颗;A如果拿5颗,B就拿4颗。都是B独活,AC死。(我真的不是在黑A站)
- B已经找到了规律,那就是,让自己拿的数量在AC之间,就可以保证活。想到此处,他不由得笑出声来。A冷冷的看了他一眼。
- A如果拿4颗,现在轮到B做选择了。
- 如果B拿5颗,C只能拿1颗,A独活,BC死。
- 如果B拿4颗,C不论拿几颗,都是三人同死。
- 如果B拿3颗,C在得知前两人共拿7颗的情况下,选择拿3颗,三人同归于尽。
- 如果B拿2颗或1颗,C会选择拿3颗,C独活。AB死。
- B惊奇的发现,不管怎么选,自己都会死。他是不会选择让C这个小婊砸活着的。
- 于是B选择了拿3颗。
- A如果拿3颗,B略微思索了一下,也会选择三个人同归于尽。
- A如果拿2颗,B会拿3颗,但是C哈哈一笑(C已经习惯了在B的脑洞中死亡),他不拿5颗,也不拿4颗,也不会拿1颗,他拿了3颗。三人同归于尽。
- A如果拿一颗,那么(感谢 @胡昌俊 指正)
- B选1颗,3人同死
- B选2颗,CC会选择三人同归于尽。
- B选3颗或以上,C选AB的平均数。AC活,但B死,所以B不会做这个选择。
ABC卒。
我们归纳出一个定理: 如果3个人有n个豆子,
时光荏苒,有个变态又抓到了4个人,ABCD,然后给了他们20颗豆子。
我们继续从如果A拿20颗豆子开始分析。啊,不,还是直接写结论吧。
- 当A选择17个时,同归于尽。
- 当A选择16到6个时,B活着。A死。
- 当A选择5时,B选4,C选4,D选择4和大家同归于尽。
- 当A选择4时,B选5,C选4,D选择4和大家同归于尽。
- 。。。
- A发现自己必死。于是他拿了5颗豆子,他寄希望于其他人高尚一些。
- ABCD卒。
====程序员的分割线===
后来我又写了个程序,模拟了如下状况:
假设所有人都假设其他人的选择是随机的(可能是因为每个人都假设其他人可能是聪明人,笨的人,高尚的人,自私的人,抑郁症患者等),那么在所有的样本空间里(75287520种可能性),做出最有利于自己的选择:
100 left for A
A will chose 10
90 left for B
B will chose 11
79 left for C
C will chose 11
68 left for D
D will chose 10
58 left for E
E will chose 10
此题还有逻辑上的简便方法。以及,数学之外的思考。
(看我的答案前,最好先看过其他大牛的数学解答。才不至于对例子陌生。)
题干有个条件:“不能交流”。由于假定每个囚犯都无比聪明,所以交流与否,不影响最终决策。去掉“不能交流”,答案不会有任何变化。
当五个囚犯经过推理,都认定自己必死的时候,有人开始琢磨:
我的推理,都是建立在个人决策的基础上,假如可以结盟呢?我找两个人结盟,把剩下两个人搞死,不就可以了吗?
想到这里,a不禁沾沾自喜,看到了绝处逢生的希望,他对b、c、d、e说:我虽然不能让你们生,但保证能让你们死。(如果我给你们每人留1个,你们都会死。)现在,上头要求至少提供两个死的名额,你们商量出个方案,只要保证我100%不死,我就配合。如果不能保证,谁也活不了。
b听了,扭头对c、d、e说:上头要求至少提供两个死的名额,a不能死,我也不能死,你们仨商量具体操作方案,如果谁能让我、a、他都100%不死,同时,又让其他二人无论如何选择都无法左右我们三人的结盟,我和a就照办。如果不存在,你们仨都会死(给你们都留1个)。
c对d、e说:上头要求至少提供两个死的名额,a、b、我,都不能死……
d、e说:开什么玩笑,你的意思不是让我俩死吗?你们爱谁死谁死!
a、b、c恍然发现,结盟的可能并不存在。
不存在一种结盟可以保证某人必活。
这个结论可以推广:
100个囚犯先后从10000颗绿豆中抓绿豆,抓得最多和最少的人将被处死——
结果一样:所有人都会死。
10000个囚犯先后从100000000颗绿豆中抓绿豆——
仍然一样:所有人都会死。
围观者曰:开玩笑吧?只是从10000人里挑最少和最多的,竟然每个人都会死,太可怕了吧?
答曰:是的。为什么如此残酷?在于假定前提——
“每个人都利己,即便不利己,也要损人,损人意味着局部利己。”
这样的假定下,唯一的结果就是大家都死。假如世界上每个人都是先求利己,利己不成的情况下求损人的话,世界马上就完蛋,谁也活不了。
既然如此,为什么我们现在活得好好的呢?
因为真实的世界放松了假定。放松的第一处是:并不是每个人都绝顶聪明。第二处是:每个人也许都想利己,但不是必然要求损人。
现在考虑,其他条件不变,一点点放松第二处假定,看结果如何变化:
a想:唉,我这么聪明的人,竟然必有一死,既然横竖都是死,别人死不死关我鸟事,随便抓一把,去他娘的!
抓了一把,一看:5个。
轮到b,b一摸,发现a抓了5个,心想:
哟,这家伙居然不是心黑到顶。我最利己的抓法是几个呢?4个。(分析略,可见楼上诸答。)
如果我抓4个,c、d、e会抓几个?都是4个。
(5、4、4、4、4)
结果是,大家都死掉。
想到这里,b倒吸了一口冷气:想不到我这么聪明的人,即便a不陷害,也逃不了一死,真是天命、天命啊!随便抓吧。
抓了17个。
剩下c、d、e,没得选了,出于利己优先的原则,都选平均数,抓11个。
(5、17、11、11、11)
a、b都死了,后三人活了。
这意味着,只要前面两人不存心害人,后面人就能活得很好。但先行者的牺牲是难免的。
原始人问现代人:凭啥我们茹毛饮血你们吃香喝辣?
现代人说:凭你投胎早啊。
原始人说:老子得不到的,孙子们也别想得到。——不繁殖了。就没有现代人了。
但要注意:b的死亡跟a还不一样。a的死亡,在放松假定后很容易避免。b的死亡,则难以避免,并有最大的悲剧意义。
在a随机抓了5个的情况下(假定a抓5个是为保证剩下的绿豆够前人的平均数,正因为有不够平均数的可能,b有能力拯救a,详论见后):假如b抓的比a多,他一定是因为抓得最多而死掉。假如b抓得比a少,他一定是因为抓得最少而死掉。后来者仅仅出于利己,就会都选平均数。哪怕cde只为利己,不为害人,b都非死不可。
a的死看起来和b类似,其实有重要不同。a可以用他的死彰显自己的高尚或卑劣:
轮到b时,b发现a抓了96个,破口大骂:王八蛋,自己死就死了,还要拉上俺们垫背!真是烂人!
轮到b时,b发现a只抓了1个,感慨万千:好人呐,好人。脱离了低级趣味的人。
但是,a抓1个,虽然给其他人留了活命机会,但无论如何救不了b。b最利己的抓法,是抓2个,那么接下来,c、d、e、会毫不犹豫地都抓2个,同时破口大骂:b这个王八蛋!
因为(1,2,2,2,2),所有人都要死。如果前两人只抓3个,无论如何,后三人死的责任都在b头上,哪怕a抓2、b抓1,c、d、e也是必死,他们的死,都是b导致的。(如果b抓50个就不会令他们都死。)
b不管怎么抓,自己都得死。而且,没有办法证明自己是个好人。b出于利己抓2反而损害了自己:非但不能活,还招来一堆唾骂。
b叹了一口气:既然横竖是死,与其死了挨骂,不如死了有人记得我的好。
抓了50个。
轮到c,发现筐里剩下45个,掐指一算,ab的平均数是27.5,他毫不犹豫地抓27。
轮到d,发现还剩18个,他想抓平均数27,不够了,只好抓了17个。心里对e说,兄弟,对不住了,不是有意要害你,哥哥自身保命要紧。
(5、50、27、17、1)
b救了a、c、d,牺牲了自己。
c并不知道,自己的命是b救的,他抓的时候还怀疑ab分别抓了(28、27)。d也不知道b救了他。e就更不知道了。
b的善意没人知道。——除了a。
当a发现自己最终没死的时候,被b感动得痛哭流涕:好兄弟!
换言之,如果a足够聪明,他会想到,他的生死,可能决定在b手里。
比如:a抓5个,b有办法让a必活(抓90个)。
但是,这种决定,需要一个前提,即:b有报恩心态。
我们定义一下报恩心态:
弱报恩心态:如果别人表现出对我好,在不影响自利的前提下,我选择对他好。
强报恩心态:如果别人在可以对我坏的情况下,选择不对我坏,在不影响自利的前提下,如果我可以对他坏或不对他坏,则选择不对他坏。
由于报恩心态在世间是真实存在的,所以a存活的几率很大。
a只要不杀b,放b一马,b虽知必死,只要有强报恩心态,a就必活。
但世间存在的弱报恩心态比较普遍,强报恩心态相对较少。——如果我活着,让我对你好当然可以,我都死了,对你好不好我才不在乎呢。
换言之,a的存活取决于b是否具备强报恩心态。而bcde是否必死,取决于a是否追求损人。
如果,a是个平庸但不卑鄙的人(只追求利己,不追求损人),则在后继者b有强报恩心态的情况下,会享受到先行者的红利。否则,a会成为死在沙滩上的前浪。
所以,在真实的社会模型中(利己但未必损人的假定下),a一定不会选择抓96,让所有人都死掉。
而b,无论如何,既无法享受先行者的红利,也无法避开后继者的迫击,后人仅仅出于自利就会把他弄死,除了先行者感谢他的不杀之恩外,没有人念他的好。
我们可以把这叫做:“老二的悲剧”。
现在假定,a是高尚的人。
先给高尚一个定义:
弱高尚:如果可以自利,就自利。如果不能自利,利人也好。(这个定义并不严密,因为有时候自利牵涉到损人,严密的定义太复杂,故从略。另外,报恩心态,也算是弱高尚的一个具体例子。)
强高尚:利人和自利无区别。
强高尚在世人身上鲜少存在,一般只存在于有血缘关系的近亲或有宗教信仰的人身上。弱高尚则相对普遍。
假定a是弱高尚的人,他意识到,在世界上不存在其他高尚的人的情形下,自己难逃一死。既然横竖都是死,不如,做个高尚的人。
a选择只抓1个。
这就意味着,a以一己之力,让全世界牺牲的概率最小。
但,这仅仅是概率。a的力量有限,他还需要另一个人的成全。
假如b是庸俗的人,会选抓2个。
c、d、e都是庸俗的人,都只抓2个。
(1,2,2,2,2)
全都死掉。a虽然愿意拯救世界,但落空了。
但只要,b、c、d、e里,有一个人,愿意抓50个,就能救所有的人,除了自己和a。
a的死,是求仁得仁。自己的死,是舍生取义。
因为有两人选择主动牺牲,其他人都可以得救。
假如70亿人,先后从1000亿绿豆中抓绿豆,最多的和最少的会死掉的话,
只要存在2个以上高尚的人,世界就会得救。
地藏菩萨云:地狱不空,誓不成佛。我们所处的世界并非不险恶,不逐利。但之所以没有塌陷,还能支撑许多庸凡的人平静地生活,正因为有聪明绝顶的人,在觉悟了世界的冰冷和绝望之后,自甘做出牺牲来消融世界的冰。
原文链接:http://www.zhihu.com/question/19912025/answer/45715210
一个问题能够这么详细的去阐述,确实是很有魅力!!!