教练让我学三周数论,然而数论多少还是无聊了点,所以浅学一下博弈论划划水。
(只是简单学了一下,不会记特别多。)
巴什博弈:
有两个聪明人玩游戏,有n个石子,两人轮流从这堆石子里取出一部分,每人一次可以取[1,m]个石子,最后不能拿的人输。两人都会选择最优策略的情况下,问:先手和后手谁赢?
当\(n<=m\)时,先手可以一次拿走所有的,先手胜。
当$n=m+1 $时, 无论先手怎么拿,后手都可以一次拿走所有的,后手胜。
当\(n=k*(m+1)\) $ $ $k\in Z $ 时,对于每个\(m+1\)个石子,先手取\(x\)个,后手一定可以一次将剩下的\(m+1-x\)个石子全部取走,后手胜。
当\(n=k*(m+1)+x\)且\(0<x<m+1\)时,先手第一步取走x个石子,接下来变成上一种情况,先手胜。
结论:
当n不能整除m+1时先手必定胜,能整除时后手必胜。
nim游戏:
nim游戏是对巴什博弈的升级。
有两个聪明人玩游戏,有\(n\)堆石子,第\(i\)堆有\(a[i]\)个,两人轮流取石子,每次每人可以选择一堆取任意多个石子,最后不能取的人输。两人都选择最优策略的情况下,问:先手和后手谁赢?
当\(n=1\)时,先手的人可以一次拿完,先手胜。
当\(n=2\)且\(a_1==a_2\)时,先手无论从一堆里取多少个,后手都可以选择在另一堆里取同样多个,最后后手胜。
当\(n=2\)且\(a_1!=a_2\)时,先手先在较多的那堆里取走\(|a_1-a_2|\)个,变成上一种情况。后手无论从一堆里取多少个,先手都可以再从另一堆里取同样多个,因此先手胜。
分析\(n=2\)时的两种情况,我们可以发现一个非常有用的策略,即选择在另一堆里取和对方相同数量的石子
当\(n<=3\) 时,情况变得复杂了起来。
先说结论:当\(a_1\)^ \(a_2\)^ \(a_3\)^\(……\) ^ \(a_n=0\)时,先手必败,反之先手必胜。
假设现在的局势时\(a_1\)^ \(a_2\)^ \(a_3\)^\(……\) ^ \(a_n=0\),先手选择其中一堆,取k个石子。
局势就变成了\(a_1\)^ \(a_2\)^ \(a_3\)^\(……\) ^ \(a_n=k\),也可以写成\(a_1\)^ \(a_2\)^ \(a_3\)^\(……\) ^ \(a_n\)^\(k\) \(=0\)
设\(k\)二进制的最高位1在第\(x\)位,此时一定有奇数个 \(a_j\)二进制的第\(x\)位为1
此时后手选择其中一个\(a_j\)从中取出\(a_j\) ^ \(k\)个石子,使全局的异或和再次变成\(0\),重复上述操作,后手一定能将局势变成:\(n=2\)且\(a_1==a_2\)的情况,后手必胜。
以后再记。