威佐夫博奕

7人阅读 评论(0) 收藏 举报
分类:

转自:https://blog.csdn.net/y990041769/article/details/21694007
威佐夫博弈是博弈中的另一个经典模型。

问题:首先有两堆石子,博弈双方每次可以取一堆石子中的任意个,不能不取,或者取两堆石子中的相同个。先取完者赢。

分析:首先我们根据条件来分析博弈中的奇异局势

第一个(0 , 0),先手输,当游戏某一方面对( 0 , 0)时,他没有办法取了,那么肯定是先手在上一局取完了,那么输。

第二个 ( 1 , 2 ),先手输,先手只有四种取法,

1)取 1 中的一个,那么后手取第二堆中两个。

2)取 2 中一个,那么后手在两堆中各取一个。

3)在 2 中取两个,那么后手在第一堆中取一个。

4)两堆中各取一个,那么后手在第二堆中取一个。

可以看出,不论先手怎么取,后说总是能赢。所以先手必输!

第三个 ( 3 , 5 ),先手必输。首先先手必定不能把任意一堆取完,如果取完了很明显后手取完另一堆先手必输,那么

假如看取一堆的情况,假设先手先在第一堆中取。 取 1 个,后手第二堆中取4个,变成(1 ,2)了,上面分析了是先手的必输局。

取 2 个,后手第二堆中取3个,也变成( 1 , 2)局面了。

假设先手在第二堆中取,取 1 个,那么后手在两堆中各取 2 个,也变成 ( 1 , 2 )局面了。

取 2 个 ,那么后手可以两堆中都去三个, 变成 ( 0 , 0)局面,上面分析其必输。

取 3 个,后手两堆各取 1 个 ,变成( 1 , 2)局面了。

取 4 个,后手在第一堆中取一个,变成( 1 , 2)局面了。

可见不论先手怎么取,其必输!

第四个(4 , 7),先手必输。

自己推理可以发现不论第一次先手如何取,那么后手总是会变成前面分析过的先手的必输局面。

那么到底有什么规律没有呢,我们继续往下写。

第四个 ( 6 ,10 )

第五个 ( 8 ,13)

第六个 ( 9 , 15)

第七个 ( 11 ,18)

会发现他们的差值是递增的,为 0 , 1 , 2, 3, 4 , 5 , 6, 7…..n

而用数学方法分析发现局面中第一个值为前面局面中没有出现过的第一个值,比如第三个局面,前面出现了 0 1 2,那么第三个局面的第一个值为 3 ,比如第五个局面,前

面出现了 0 1 2 3 4 5 ,那么第五个局面第一个值为6。

再找规律的话我们会发现,第一个值 = 差值 * 1.618

而1.618 = (sqrt(5)+ 1) / 2 。

大家都知道0.618是黄金分割率。而威佐夫博弈正好是1.618,这就是博弈的奇妙之处!

下面来看看威佐夫博弈常见的三类问题:

1)给你一个局面,让你求是先手输赢。

有了上面的分析,那么这个问题应该不难解决。首先求出差值,差值 * 1.618 == 最小值 的话后手赢,否则先手赢。(注意这里的1.618最好是用上面式子计算出来的,否则精

度要求高的题目会错)
hdu1527

#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
        double k=(double)max(n,m)-min(n,m);
        int term=(int)(k*(sqrt(5)+1)/2);
        if(term==min(n,m))
            printf("0\n");
        else
            printf("1\n");
    }
    return 0;
}

2)给你一个局面,让你求先手输赢,假设先手赢的话输出他第一次的取法。

首先讨论在两边同时取的情况,很明显两边同时取的话,不论怎样取他的差值是不会变的,那么我们可以根据差值计算出其中的小的值,然后加上差值就是大的一个值,当

然能取的条件是求出的最小的值不能大于其中小的一堆的石子数目。

加入在一堆中取的话,可以取任意一堆,那么其差值也是不定的,但是我们可以枚举差值,差值范围是0 — 大的石子数目,然后根据上面的理论判断满足条件的话就是一种合理的取法。

查看评论

利用Office 365 建立类威客式任务系统

这次我们主要讲一些关于Office 365 架设类威客式管理系统,协助您的企业管理任务分配模式,提高员工生产效率,间接提升KPI
  • 2016年08月11日 14:25

博弈---威佐夫博奕(Wythoff Game)

威佐夫博奕(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同 时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。     这种情况下是颇为复杂的...
  • u011644423
  • u011644423
  • 2014-07-16 09:18:48
  • 479

博弈之威佐夫博弈详解

威佐夫博弈是博弈中的另一个经典模型。 问题:首先有两堆石子,博弈双方每次可以取一堆石子中的任意个,不能不取,或者取两堆石子中的相同个。先取完者赢或输(首先讨论赢)。 分析:首先我们根据条件来分...
  • y990041769
  • y990041769
  • 2014-03-21 10:40:20
  • 8512

博弈论(巴什博奕,威佐夫博弈,尼姆博弈,斐波那契博弈)

一.  巴什博奕(Bash Game)   A和B一块报数,每人每次报最少1个,最多报4个,看谁先报到30。这应该是最古老的关于巴什博奕的游戏了吧。 其实如果知道原理,这游戏一点运气成分都没有,只和先...
  • AC_Gibson
  • AC_Gibson
  • 2014-11-30 18:37:55
  • 6749

三个博弈-巴什博奕、威佐夫博弈、尼姆博弈。acm博弈算法笔记HDU 2149,1850,1527

博弈论 (一)、acm博弈基础算法 Bash Game,Nim Game和Wythoff Game(即 巴什博奕、尼姆博弈、威佐夫博弈) Bash    Game:   同余理论 Ni...
  • winter2121
  • winter2121
  • 2017-05-13 15:17:35
  • 263

hdu 2177 取(2堆)石子游戏(威佐夫博奕(Wythoff Game))

取(2堆)石子游戏 题目大意:有两堆石子,两人轮流取石子,对于取石子有两种取法,1、从两堆石子中同时取出相同数量的石子,2、只从一堆中取任意数量的石子,另外一堆不变,直至不能取的人为输。 解题思路: ...
  • qiqi_skystar
  • qiqi_skystar
  • 2015-12-14 14:28:33
  • 1633

关于博弈基础知识的总结:巴什博弈(Bash Game)、威佐夫博奕(Wythoff Game)、尼姆博奕(Nim Game)

文章PDF文档:http://www.kuaipan.cn/file/id_32020291156705322.html 博弈论是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策略,达到取...
  • chao1983210400
  • chao1983210400
  • 2013-08-24 20:24:08
  • 3413

巴什博奕,威佐夫博奕,尼姆博奕,斐波那契博弈模板

1.巴什博奕 只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。  显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能...
  • lz161530245
  • lz161530245
  • 2017-08-21 17:46:39
  • 136

Wythoff’s Game (威佐夫博弈)

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://www.blogbus.com/yjq24-logs/42826226.html 大致上是这样的:有两堆石子,不妨...
  • wusuopuBUPT
  • wusuopuBUPT
  • 2013-11-01 12:11:19
  • 1228

hdu 2177 取(2堆)石子游戏 (威佐夫博弈)(考虑如何变成奇异局势)

取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...
  • Ice_Alone
  • Ice_Alone
  • 2014-08-19 17:42:24
  • 829
    动漫

    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 4万+
    积分: 2289
    排名: 2万+
    博客专栏
    最新评论