bigdecimal取小数部分_组合博弈(4) - 取棋子游戏和半加运算

3e84d222924ff1dcb8537c2b727ee62e.png

上期回顾:

Shigma:组合博弈(3) - 简单正则博弈​zhuanlan.zhihu.com
3630156ff4e4508bda7897af1acdc322.png

可能说了这么多, 大家对简单正则博弈仍然没有什么直观的认识, 那么这次我们就用一个实际的游戏来试一试手. 假设桌上摆有若干排棋子, 左右玩家轮流从中取走棋子, 其中左玩家只能取走黑子, 右玩家只能取走白子. 每当一枚棋子被取走, 其右侧的棋子也会随之消失. 先无法取子者输.

上图便是一种博弈的情形. 显而易见, 这是一个简单博弈. 不仅如此, 每个人的操作都会使得剩下的可操作棋子减少, 从而可以想见”每次操作都使得局面向着不利于自己的方向发展”. 我们将在后面严格地证明这是一个正则博弈. 先让我们看一些简单的情况, 其中我们用

表示”什么都没有”的状态, 即博弈的零点, 它是一个后手胜局. 接下来, 让我计算一排连续黑子的值, 它由下面的表达式给出:

显而易见这就是正整数的定义, 从而一排

个黑子对应的值为
, 从而一排
个白子对应的值就是
.

考虑一般情况的下的多排棋子, 由游戏规则可知此时的状态相当于各排状态相加而成. 而考虑一般情况下的一排棋子 (比如

), 任意将其分为两部分 (比如
), 则
的值可以完全由
的值决定. 我们把这种关系称为半加, 记做
. 由游戏的规则, 我们可以自然地给出半加的定义:

下面就让我们来简单分析一下这个运算的性质.

定理2.11

是正则数, 则有
  1. .
  2. .
  3. .
  4. .

证明 (1) 对

归纳. 若
, 则显然有
. 若结论对
成立, 则当
时,
, 结论得证.

(2) 由(1)得

.

(3) 对

归纳.
显然. 假设结论对
成立, 则当
时, 由归纳假设, 我们有

从而结论得证.

(4) 对

归纳.
显然. 假设结论对
成立, 则当
时, 由归纳假设, 我们有

从而结论得证. ∎

用这个定理, 我们就可以计算开头的局面了:

于是整个局面的值则为

, 从而是一个后手必胜局.

从这个计算过程中我们可以获得更多有关半加运算的信息. 如果从

开始, 每次进行与
之间的半加运算, 则得到的新的数一定是处于自身和自身的左右集合之间. 利用这个性质, 这个游戏的正则性就呼之欲出了.

定理2.12

是一排
个棋子对应的值, 则
是正则数.

证明

归纳. 当
时显然有
, 从而得证. 若结论对
时成立, 则当
时, 必存在正则数
使得
, 其中
. 此时自然有
. 我们分别讨论这两种情况.
  • , 结合
    可知
    也是正则数.
  • , 结合
    可知
    也是正则数. ∎

推论 上述取棋子游戏是一个简单正则博弈.

证明 我们已经证明了每排棋子都是正则的, 又因为正则数对加法封闭, 故任意状态都是正则的, 从而该博弈是简单正则博弈. ∎

这个定理深刻地刻画了取棋子游戏与简单正则博弈的关系. 由于

个棋子共有
种不同的排列方式, 因此上面的定理也可以用来证明定理2.5. 但是从另一方面来说, 天数是一个基于构造式的概念, 因此这个定理也无疑暗示着半加运算或许不是良定的 (因为相等的数显然不一定有着相同的天数). 举个例子, 我们已经知道了
, 我们取
, 这里
是任意正数, 则
的左右集合必将分别包含有
, 因此
如果正则, 必将落在
之间, 这显然不合理. 不过尽管不良定听起来不是很妙, 但对于有限正则数来说, 半加运算依旧有着不错的性质. 下面的一些性质对于半加运算也颇为重要, 我们把它们留给读者.

定理2.13 有关半加运算, 我们有下面的性质:

  1. , 则
    .
  2. , 则
    .

下面我们尝试建立此游戏一般状态的非递归求解方法. 先让我们看一个引理.

引理2.14 对取棋子游戏的任意有限状态

, 我们有

证明

归纳. 我们仅证明第一个式子, 第二个同理可得. 分三种情况讨论.

(1) 若

, 则取
中的最大值
代替
, 必有
, 其中
是非负整数且满足
(否则由化简原理可知,
才是出现在
之间的天数最小的数, 从而矛盾). 由归纳假设知

(2) 若

, 则由归纳假设知

(3) 若

, 则取
中的最大, 最小值
代替
, 必有
(原因同上). 此时必有
, 再由归纳假设可知

综上, 结论得证. ∎

下面给出一般状态的一种快速算法.

定理2.15 对于取棋子游戏中的任意一排棋子, 下列方法给出它所对应的值:

  1. 如果这排棋子只有
    个黑子, 则它的值为
    .
  2. 如果这排棋子以
    个黑子打头, 之后是白子, 则将
    作为结果的整数部分, 将这枚白子之后的所有棋子, 黑子为
    , 白子为
    , 并在最后加上一个
    作为结果小数部分. 这便是要求的结果的二进制表示.
  3. 如果这排棋子以白子打头, 则将黑白互换后求出结果, 其相反数便是所求的值.

证明 对棋子的个数

(也就是天数)进行归纳.
的情况是显然的. 下面将在
的基础上证明
时的结论. 设去掉第一个棋子后的状态为
.

(1) 如果这排棋子以至少

个黑子开头, 则所求结果为
. 又因为
, 由引理可知结果为
, 相当于整数部分加
而小数部分不变. 由此可证明第一个结论. 同时在第二种情况中我们只需要考虑以
个黑子和至少
个白子打头的情况即可.

(2) 如果这排棋子以

个黑子和
个白字打头, 且再之后不是白子, 则
, 从而由引理可知
. 由归纳假设, 可以将
记为

其中

表示第
枚棋子的颜色, 黑色为
, 白色为
.
. 从而有

(3) 由定理2.11(3), 这个结论是显然的. ∎

由定理 2.15 不难发现, 不同的局面给出不同的二进制数, 得到不同的结果, 因此存在上述博弈的所有有限状态到全体有限正则数的一一对应. 当然这个定理并不是只能处理有限的情况. 让我们先承认无限小数的存在, 那么利用这个定理便可以得到一些令人意外的结果来, 比如:

这似乎暗示着我们正则博弈的体系, 可以进一步向着更大的范围内扩充. 至于如何理解这些”分数”, 就得看之后的章节了.

习题 2.2

  1. 证明定理2.13.

2. 计算下列状态的值:

3. 构造某个只含一排棋子的状态, 使得其值为

.

4. 本节的最后介绍了一些值为分数的状态. 除了直接使用定理 2.15 以外, 引理 2.14 同样提供了一种通过解方程来计算的思路. 考虑

尝试通过解方程的方法求出

的值并通过定理 2.15 加以验证你的结果.

5. 对于一个含有多排棋子的状态, 我们有时不仅需要计算出哪位玩家有必胜策略, 还需要知道这个必胜策略究竟是什么. 对于状态

, 任取
, 表示将第
枚棋子取走后得到的状态. 令
, 称为操作
的贡献度. 用
表示第
枚棋子的颜色, 黑色为
, 白色为
. 证明:

(1) 无论是否有必胜策略, 左右玩家的最优策略是使得

最小的操作.

(2)

恒正且单调递减,
恒负且单调递增.

(3) 如果一排共有

枚棋子且不全同色, 且
, 则有

这次的习题是我编的最用心的一次. 很多结论也是在实际使用中取得的, 对于深入了解半加运算与二进制表示应该有不错的作用. 感兴趣的同学可以来尝试一下.

下一篇:

Shigma:​组合博弈(5) - 正则数的乘除法​zhuanlan.zhihu.com
348625b6b278fa565e785201c246d2f3.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值