ICG游戏:证明,先手不是必胜就是必败。
简介:
ICG游戏:Impartial Combinatorial Games,公平的组合游戏。
以下是定义,来自网络,可能不够严谨:
1、两名选手;
2、两名选手轮流行动,每一次行动可以在有限合法操作集合中选择一个;
3、游戏的任何一种可能的局面(position),合法操作集合只取决于这个局面本身;局面的改变称为“移动”(move)。
4、若轮到某位选手时,该选手的合法操作集合为空,则这名选手判负。
必胜和必败,指如果若按规定且可行的方法走,则必定胜利;必败,指无论怎么走必定失败。某些资料称为奇异非奇异态,PN态,等差不多。
来源:
写这篇文章,主要是源于巧克力游戏的证明(Strategy-stealing):
有个n*m的矩阵(巧克力块),两人轮流取一个点;每次取完后,需要把其右上方所有巧克力都吃了;吃到最左下方的输。先手是否必胜?
有证明如下:
如果后手存在必胜,则只要先手第一次取最右上方的,后手取的必包含最右上方的,那先手其实第一次就可以取后手取的那个。
即后手第二步走的,先手都可以在第一步就走。由此证明后手不存在必胜,先手必胜。
补充证明:
刚看到证明,觉得只是证明了后手不存在必胜,并不能说明先手必胜。
如果加上一个条件即可:在ICG游戏中,先手不是必胜就是必败,后手同理。
证明:
双方互相决策,有限步骤,可以用树来描述,树的叶子节点是胜或者败;
由于双方都是足够聪明,所以,如果某个叶子是胜,则其父节点也是胜,因为父节点必定会选择胜利的途径;如果某子树叶子全是败,则其父节点也是败;
一直往上递推,则最后,推到根节点有若干个叶子,如果有胜节点则根节点胜;如果全是败则根节点败;
则证明,先手不是必胜就是必败。
梳理:
回到刚才的反证法,梳理下:
后手有必胜=>先手必败=>推出矛盾。则先手不是必败,又由上面证明得知先手不是必胜就是必败,所以先手必胜。
扩展:
对于这种多走一步一定不是坏事,且决策对策的游戏(可能是非ICG),都可以用类似的方法证明后手没有必胜策略。但这不代表先手有。
ICG游戏:证明,先手不是必胜就是必败。的更多相关文章
- ICG游戏:尼姆游戏异或解法的证明
描述: 尼姆博奕(Nimm Game),有n堆石子,每堆石子有若干石子,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限.取走最后石子的人获胜. 标准解法: 判断: 先计算先手是必胜还是 ...
- ICG游戏:斐波那契博弈
描述: 有一堆个数为n(n>=2)的石子,游戏双方轮流取石子,规则如下: 1)先手不能在第一次把所有的石子取完,至少取1颗: 2)之后每次可以取的石子数至少为1,至多为对手刚取的石子数的2倍: ...
- {HDU}{2516}{取石子游戏}{斐波那契博弈}
题意:给定一堆石子,每个人最多取前一个人取石子数的2被,最少取一个,最后取石子的为赢家,求赢家. 思路:斐波那契博弈,这个题的证明过程太精彩了! 一个重要的定理:任何正整数都可以表示为若干个不连续的斐 ...
- Nim游戏变种——取纽扣游戏
(2017腾讯实习生校招笔试题)Calvin和David正在玩取纽扣游戏,桌上一共有16个纽扣,两人轮流来取纽扣,每人每次可以选择取1个或3个或6个(不允许不取),谁取完最后的纽扣谁赢.Cavin和D ...
- Nim游戏变种——取纽扣谁先取完
(2017腾讯实习生校招笔试题)Calvin和David正在玩取纽扣游戏,桌上一共有16个纽扣,两人轮流来取纽扣,每人每次可以选择取1个或3个或6个(不允许不取),谁取完最后的纽扣谁赢.Cavin和D ...
- Codeforces 455B A Lot of Games:博弈dp【多局游戏】
题目链接:http://codeforces.com/problemset/problem/455/B 题意: 给你n个字符串,然后进行k局游戏. 每局游戏开始有一个空串,然后双方轮流给这个串的末尾添 ...
- Ferguson游戏&&Ua12293——打表找规律
题意 有两个盒子分别有m颗糖果和n颗糖果,每次移动是将一个盒子清空而把另一个盒子里得一些糖果拿到被清空的盒子,使得两个盒子至少各有一个.无法移动者输. 分析 设初始状态为(m, n),显然(1, 1) ...
- 【BZOJ】【3404】【USACO2009 Open】Cow Digit Game又见数字游戏
博弈论 Orz ZYF 从前往后递推……反正最大才10^6,完全可以暴力预处理每个数的状态是必胜还是必败(反正才两个后继状态),然后O(1)查询……我是SB /******************** ...
- sg函数与博弈论
这个标题是不是看起来很厉害呢... 我们首先来看一个最简单的游戏.比如我现在有一堆石子,有p个,每次可以取走若干个(不能不取),不能取的人就输了. 现在假设有两个人要玩这个游戏,一个人先手,一个人后手 ...
随机推荐
- ZetCode PyQt4 tutorial Drag and Drop
#!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PyQt4 tutorial This is a simple ...
- java利用freemarker导出world
一.简单导出(不含循环导出) 1.新建一个word文件.如下图: 2.使用word将文件另存为xml的格式 3.编辑xml文件内容,将'用户名'替换成-> ${username}.'简介'替换成 ...
- test20181019 B君的第二题
题意 分析 快速子集和变换以及快速超集和变换的裸题. 用\(f(s)\)表示集合s的方案数,初始化为输入中s出现的次数. 做一遍快速子集和变换,此时f(s)表示s及其子集在输入中出现的次数. 对所有f ...
- Git核心概念
Git作为流行的分布式版本管理系统,用好它要理解下面几个核心的概念. 1.Git保寸的是文件完整快照,而不是差异变化或者文件补丁.每次提交若文件有变化则会指向上一个版本的指针而不重复生成副本. Git ...
- Firefox渗透插件—Web渗透必备工具
1:Firebug Firefox的 五星级强力推荐插件之一,不许要多解释 2:User Agent Switcher 改变客户端的User Agent的一款插件 3:Hackbar 攻城师们的必备工 ...
- windows默认文件浏览器大小
windows打开之后,发现默认窗口很小.
- vue-router和锚点冲突问题
传统的锚点定位会与vue-router中的路由设置存在冲突,都是使用'#'进行的,所以这里使用一直方法来模拟锚点跳转,并使用tween.js达到动态的过度效果 不使用原生锚点,使用这种方式解决 imp ...
- bzo j4825 [Hnoi2017]单旋
Description H 国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构.伸展树(splay)是一种数据 结构,因为代码好写,功能多,效率高,掌握这种数据结构成为了 H 国的 ...
- 面试总结之C/C++
source code https://github.com/haotang923/interview/blob/master/interview%20summary%20of%20C%20and%2 ...
- 在eclipse中使用mybatis-generator自动创建代码
1.eclipse中安装插件,地址:http://mybatis.googlecode.com/svn/sub-projects/generator/trunk/eclipse/UpdateSite/ ...