- 浏览: 5166881 次
- 性别:
- 来自: 天津
博客专栏
-
实战 Groovy
浏览量:29350
文章分类
- 全部博客 (639)
- 代码之谜 (6)
- JavaScript quirks (5)
- 程序员 (92)
- Java (93)
- BT编程 (7)
- html/css (64)
- Groovy&Grails (42)
- Android (20)
- C/C++ (5)
- PHP/Perl/Python (46)
- 经典文章 (51)
- CodeIgniter (14)
- JQuery (10)
- 笑话 (4)
- 其他 (32)
- javascript (69)
- 云计算 (0)
- html5 (7)
- 面试 (8)
- google (3)
- nosql (2)
- nodejs (11)
- go (5)
- erlang (1)
- 小常识 (3)
- 冷知识 (5)
- database (4)
- web (12)
- 架构 (12)
- Exception (0)
最新评论
-
jqw1992:
https://www.chromefor.com/libra ...
[福利] 开发者必备的 Chrome 插件——ChromeSnifferPlus -
litjerk:
初步算了一下,目前最最精简的Win98版是5M,他5个小时多敲 ...
让人目瞪口呆的三位世界级电脑大师 -
379855529:
。。似乎重点没说NIO啊,前面基础只是铺垫的很好的,可是我要的 ...
Java NIO与IO的详细区别(通俗篇) -
springmvc_springjpa:
spring mvc demo教程源代码下载,地址:http: ...
一步步开发 Spring MVC 应用 -
匡建武:
Good
四个程序员的一天
(本帖改编自《科学美国人》杂志中IanStewart的《凶猛海盗的逻辑》)
海盗,大家听说过吧。这是一帮亡命之徒,在海上抢人钱财,夺人性命,干的是刀头上舔血的营生。在我们的印象中,他们一般都瞎一只眼,用条黑布或者讲究点的用个黑皮眼罩把坏眼遮上。他们还有在地下埋宝的好习惯,而且总要画上一张藏宝图,以方便后人掘取。不过大家是否知道,他们是世界上最民主的团体。参加海盗的都是桀骜不驯的汉子,是不愿听人命令的,船上平时一切事都由投票解决。船长的唯一特权,是有自己的一套餐具——可是在他不用时,其他海盗是可以借来用的。船上的唯一惩罚,就是被丢到海里去喂鱼。
现在船上有若干个海盗,要分抢来的若干枚金币。自然,这样的问题他们是由投票来解决的。投票的规则如下:先由最凶猛的海盗来提出分配方案,然后大家一人一票表决,如果有50%或以上的海盗同意这个方案,那么就以此方案分配,如果少于50%的海盗同意,那么这个提出方案的海盗就将被丢到海里去喂鱼,然后由剩下的海盗中最凶猛的那个海盗提出方案,依此类推。
我们先要对海盗们作一些假设。
1) 每个海盗的凶猛性都不同,而且所有海盗都知道别人的凶猛性,也就是说,每个海盗都知道自己和别人在这个提出方案的序列中的位置。另外,每个海盗的数学和逻辑都很好,而且很理智。最后,海盗间私底下的交易是不存在的,因为海盗除了自己谁都不相信。
2) 一枚金币是不能被分割的,不可以你半枚我半枚。
3) 每个海盗当然不愿意自己被丢到海里去喂鱼,这是最重要的。
4) 每个海盗当然希望自己能得到尽可能多的金币。
5) 每个海盗都是现实主义者,如果在一个方案中他得到了1枚金币,而下一个方案中,他有两种可能,一种得到许多金币,一种得不到金币,他会同意目前这个方案,而不会有侥幸心理。总而言之,他们相信二鸟在林,不如一鸟在手。
6) 最后,每个海盗都很喜欢其他海盗被丢到海里去喂鱼。在不损害自己利益的前提下,他会尽可能投票让自己的同伴喂鱼。
现在,如果有10个海盗要分100枚金币,将会怎样?
要解决这类问题,我们总是从最后的情形向后推,这样我们就知道在最后这一步中什么是好的和坏的决定。然后运用这个知识,我们就可以得到最后第二步应该作怎样的决定,等等等等。要是直接就从开始入手解决问题,我们就很容易被这样的问题挡住去路:“要是我作这样的决定,下面一个海盗会怎么做?”
以这个思路,先考虑只有2个海盗的情况(所有其他的海盗都已经被丢到海里去喂鱼了)。记他们为P1和P2,其中P2比较凶猛。P2的最佳方案当然是:他自己得100枚金币,P1得0枚。投票时他自己的一票就足够50%了。
往前推一步。现在加一个更凶猛的海盗P3。P1知道——P3知道他知道——如果P3的方案被否决了,游戏就会只由P1和P2来继续,而P1就一枚金币也得不到。所以P3知道,只要给P1一点点甜头,P1就会同意他的方案(当然,如果不给P1一点甜头,反正什么也得不到,P1宁可投票让P3去喂鱼)。所以P3的最佳方案是:P1得1枚,P2什么也得不到,P3得99枚。
P4的情况差不多。他只要得两票就可以了,给P2一枚金币就可以让他投票赞同这个方案,因为在接下来P3的方案中P2什么也得不到。P5也是相同的推理方法只不过他要说服他的两个同伴,于是他给每一个在P4方案中什么也得不到的P1和P3一枚金币,自己留下98枚。
依此类推,P10的最佳方案是:他自己得96枚,给每一个在P9方案中什么也得不到的P2,P4,P6和P8一枚金币。
下面是以上推理的一个表(Y表示同意,N表示反对):
P1 P2
0 100
N Y
P1 P2 P3
1 0 99
Y N Y
P1 P2 P3 P4
0 1 0 99
N Y N Y
P1 P2 P3 P4 P5
1 0 1 0 98
Y N Y N Y
……
P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
0 1 0 1 0 1 0 1 0 96
N Y N Y N Y N Y N Y
现在我们将海盗分金问题推广:
1) 改变一下规则,投票中方案必须得到超过50%的票数(只得到50%票数的方案的提出者也会被丢到海里去喂鱼),那么如何解决10个海盗分100枚金币的问题?
2) 不改变规则,如果让500个海盗分100枚金币,会发生什么?
3) 如果每个海盗都有1枚金币的储蓄,他可以把这枚金币用在分配方案中,如果他被丢到海里去喂鱼,那么他的储蓄将被并在要分配的金币堆中,这时候又怎样?
通过对规则的细小改变,海盗分金问题可以有许多变化,但是最有趣的大概是1)和2)(规则仍为50%票数即可)的情况,本帖只对这两种情况进行讨论。
首先考虑1)。现在只有P1和P2的情形变得对P2其糟无比:1票是不够的,可是就算他把100枚金币都给P1,P1也照样会把他丢到海里去。可是P2很关键,因为如果P3进行分配方案的话,即使他一枚金币也不给P2,P2也会同意,这样一来P3就有P2这张铁票!P3的最佳方案就是:独吞100枚金币。
P4要3张票,而P3是一定反对他的,而如果不给P2一点甜头,P2也会反对,因为P2可以在P3的方案中得救,目前为什么不把P4丢到海里呢?所以要分别给P1和P2一枚金币,这样P4就有包括他自己1票的3票。P4的方案为:P1,P2每人1枚金币,他自己98枚。
P5的情况要复杂点,他也要3票。P4是会反对他的,所以不用给,给P3一枚金币就能使他支持自己的方案,因为在接下来的P4方案中他什么也得不到。问题是P1和P2:只要其中有一个支持就可以了。可是只给1枚金币是不行的,P4方案中他们一定有1枚金币可得,所以只要在他们中随便选一个,给2枚金币,另一个就对不起了,不给。这样P5的方案是:自己97枚,P3得1枚,P1或P2得2枚。
P6的方案建立在P5的上面,只要给每个P5方案中不得益的海盗1枚金币。要注意的是,P1和P2都应该看作在P5方案中不得益的:他们可能得2枚,可是也可能1枚不得,所以只要P6给他们1枚金币,根据“二鸟在林,不如一鸟在手“的原则,就可以让他们支持P6的方案。所以P6的方案是唯一的:P1,P2,P4每人1枚金币,P6自己拿97枚。
这样继续下去,P9的方案是:P3,P5,P7每人1枚金币,然后在P1,P2,P4,P6中任选一人给2枚金币,P9自己得95枚。最后,P10的方案是唯一的:P1,P2,P4,P6,P8每人1枚金币,P10自己得95枚。
2)是最有趣的(提醒:我们回到50%票即可的规则)。原题解中的推理过程直到200个海盗都是成立的:P200给每个偶数号的海盗1枚金币,包括他自己,其他海盗什么也得不到。从P201开始,继续推理就变得有点困难了:P201为了不被丢到海里去,必须什么也不留给自己,而给从P1到P199中所有奇数号海盗每人1枚金币,从而争取到100票,加上他自己1票,逃过一劫。P202也什么都得不到,他必须用这100枚金币买通100个从P201的方案中什么也得不到的海盗,要注意到现在这个方案不是唯一的:P201的方案中得不到金币的海盗是所有奇数号的海盗,有101个(包括P201),所以有101种方案。
P203必须得到102票,除了自己的1票外,他只有100枚金币,所以只能买到100票,所以可怜的家伙就被丢到海里喂鱼了。但是,P203是个很重要的角色,因为P204知道如果自己的方案不被通过,P203也一样会完蛋,所以他有P203的一张铁票。所以P204可以大出一口气:他自己一票,加上P203一票,然后加上用100枚金币买的确100票,他就得救了!100个有幸得到1枚金币的海盗,可以是P1到P202中任何100个:因为其中的偶数号的从P202的方案中什么也得不到,如果P204给他们中某个海盗1枚金币,这个海盗一定会赞同这个方案;而编号为奇数的海盗呢,只是有可能从P202的方案中得益罢了(可能性为100/101),所以根据“二鸟在林,不如一鸟在手“的原则,如果能得到1枚金币,他也会赞同这个方案。
接下去P205是不能把希望放在P203和P204这两张票上的,因为就算他被丢到海里去,P203和P204还可以通过P204的方案机会活下来。P206虽然可以靠P205的铁票,加上自己1票和100枚金币搞到的100票,只有102票,所以他也被丢到海里喂鱼。P207好不了多少,他需要104票,而他自己以及P205和P206的铁票加上100枚金币搞到的100票只有103票——只好下海。
P208运气比较好,他同样也要104票,可是P205,P206,P207都会投票赞成他的方案!加上他自己的1票和买来的100票,他终于逃脱了做鱼食的命运。
这样我们就有了一种可以一直推下去的新逻辑。海盗可以什么也不留给自己,买上100票,然后依靠一部分一定会被丢下海的海盗的铁票,从而让自己的方案通过。有这样运气的海盗分别是P201,P202,P204,P208,P216,P232,P264,P328和P456……我们看到这样的号码是200加上一个2的次幂。
哪些海盗是受益者呢,显然铁票是不用(不能)给金币的。所以只有上一个幸运号码及他以前的那些海盗才有可能得到1枚金币。于是我们得到500海盗分100枚金币的结论是:前44个最凶猛的海盗被丢进海里,然后P456给P1到P328中的100个海盗每人1枚金币。
就这样,最凶猛的海盗被丢进海里,而比较凶猛的什么也得不到,而只有最温柔的那些海盗,才有可能得到1枚金币。正如《马太福音》所说:“温柔的人有福了,因为他们必承受地土!”
评论
我也喜欢。
一起喜欢
我也喜欢。
这就是传说中的博弈。
发表评论
-
计算机神书『编码:隐匿在计算机软硬件背后的语言』
2013-04-28 11:08 261305在知乎回答了一个关 ... -
改良程序的11技巧
2012-02-23 13:34 1658有很多理由都能说明为 ... -
何时提炼函数 & 用查询取代临时变量
2012-02-16 11:34 2986拥有[短函数」(short methods)的对象会活得比较好 ... -
我喜欢出发 - 汪国真
2011-11-14 13:00 1562我喜欢出发 我喜欢出发。 凡是到达了的地 ... -
海边的遐思 - 汪国真
2011-11-14 12:58 1355海边的遐思 一排排涌浪涤荡着心头的尘埃,灵感被浪 ... -
数字签名是什么?
2011-11-29 17:32 57762今天,我读到一篇好文章。 它用图片通俗易 ... -
[转载]谈谈2011年度最佳代码
2011-08-08 16:24 9613原文: http://blog.zhaojie.me/ ... -
阿里巴巴零知识证明
2011-03-02 10:25 3964战争中你被俘了,敌人拷问你情报。你是这么想的:如果我 ... -
软件开发评估过程
2011-02-24 09:58 1696我很喜欢这个漫画,我做过的项目没有一个不是拖拖拉拉的,边开 ... -
互相叫对方起床
2011-02-24 09:05 2014和尚跟屠夫是好友。和尚早上要起来念经,而屠夫要起来杀猪。 ... -
寻找这十种人脉关系
2010-08-02 12:53 1989每个人的人脉关系是不一样的,但下面的这10种人是你的人 ... -
成功的12条黄金法则
2010-08-02 12:53 1495第1跳:1个目标一艘没有 ... -
信任=自信+他信+信他
2010-08-02 12:52 1682信任是为了简化人与人之间的合作关系。——卢曼 周金根 ... -
如何提高生活的幸福度?
2010-08-02 12:52 1345生活可以一天比一天幸福。感觉幸福不幸福全在我们 ... -
人生8大经典问题
2010-07-23 15:40 2497问题一, 如果你家 ... -
比较受用的一些习惯
2010-07-15 09:03 14531.长期的任务,要尽早开始 一般来说,长期任务总是比 ... -
当你疲倦时,当你想放弃时,看看这个吧!
2010-07-10 10:58 8365这篇东西转自一位有思想的研究生!她看到这篇漫画,觉得很 ... -
人生有三件事情不能等
2010-06-26 10:48 1485第一是“贫穷” 贫穷不能等———因为一旦长时间的贫 ... -
人生时间表. 如果您有了时间
2010-06-25 12:30 1282如果每天都有864 ... -
假设你的月收入只有2000元!(如何花、最大化价值)
2010-06-24 15:06 2109假设你的月收入只有2000元,你也可以过得很好。我帮你把钱 ...
相关推荐
经济学上有个“海盗分金”模型,是说5个海盗抢得100枚金币,他们按抽签的顺序依次提方案:首先由1号提出分配方案,然后5人表决,超过半数同意方案才被通过,否则他将被扔入大海喂鲨鱼,依此类推。“海盗分金”其实是...
#经济学上有个“海盗分金”模型:是说5个海盗抢得100枚金币,他们按抽签的顺序依次提方案:首先由1号提出分配方案,然后5人表决,投票要超过半数同意方案才被通过,否则他将被扔入大海喂鲨鱼,依此类推。 #假定“每...
博弈-海盗分金模型借鉴.pdf
这篇博客文章,作者"黑海盗"分享了关于Visual Basic (VB) 的一些实用技巧和深入理解,旨在帮助开发者更高效地利用VB进行编程。VB.NET是VB的一个重要版本,它基于.NET Framework,提供了丰富的功能和现代化的开发环境...
海盗分金的故事 5个海盗抢到了100个金币,每一颗都一样的大小和价值连城。 他们决定这么分: 1。抽签决定自己的号码(1,2,3,4,5) 2。首先,由1号提出分配方案,然后大家5人进行表决,当且仅当半数和超过...
【海盗分金问题】是一个经典的逻辑与算法问题,源自计算机科学中的博弈论。在这个问题中,一群海盗在海上找到了一定数量的黄金,并需要按照特定的规则来分配这些黄金。问题的关键在于,这群海盗遵循两个原则:一是每...
行业资料-交通装置-一种具有防海盗功能的船舶.zip
博弈-海盗分金模型.pdf
昨天整理移动硬盘,竟然翻出了五年前的小程序源码。记得当时是在中国人民大学边上的一个小公园里花了一个... 这里所说的复杂问题是指一个很古老的问题——海盗分金问题…… 详细内容请参考压缩包中《重要说明.doc》
主题分导航样式和文章样式,默认都是导航样式,如需文章样式,可在后台设置,根据需要可以编辑文章,更加有利于 SEO 优化。 导航四个颜色模块更加突出全站的重点,可以当成推荐位来使用,根据具体需求,可以设置导航...
标题中的“corsair.rar_corsair_海盗分金”似乎是指一个编程挑战或者算法问题,其核心是基于“海盗分金”(Pirate Gold)的经典逻辑难题。这个问题源自著名的计算机科学书籍《编程珠玑》(Programming Pearls),并...
【标题】:“asdf.rar_海盗分金”是一个与编程竞赛相关的压缩文件,其中包含了实现“海盗分金”问题的源代码。这个问题源自于算法竞赛,特别是ACM(国际大学生程序设计竞赛)训练中的经典题目。 【描述】:描述中...
行业资料-交通装置-一种海盗船.zip
海盗船M90鼠标驱动是专为Corsair Vengeance M90游戏鼠标设计的一款软件,它确保了鼠标的高效性能和个性化设置。这款驱动程序经过亲测,不仅适用于M90鼠标,据称也适用于M95型号,为这两款设备的用户提供了便捷的下载...
行业资料-交通装置-一种海盗船刹车装置.zip
行业资料-交通装置-一种海盗船驻车装置.zip
行业资料-交通装置-一种海盗船游艺机的压杆锁紧装置.zip
这个问题是一个经典的逻辑推理问题,通常被称为“海盗分宝石”或者“海盗分钻石”问题,源自博弈论中的纳什均衡概念。在这个问题中,我们需要考虑每个海盗的理性思考和自我保存的本能,以及他们对钻石的贪婪。我们...
《海盗分宝石》是一款基于C#语言开发的程序,它为用户提供了一种模拟解决海盗分宝石问题的平台。这个问题源自著名的逻辑与算法题目,通常在计算机科学和编程教育中被用作教学案例。在此程序中,我们可以看到C#语言的...
主题分导航样式和文章样式,默认都是导航样式,如需文章样式,可在后台设置,根据需要可以编辑文章,更加有利于SEO优化。 导航四个颜色模块更加突出全站的重点,可以当成推荐位来使用,根据具体需求,可以设置导航的...