找回密码
 欢迎注册
楼主: medie2005

[转载] 一维反Nim游戏

[复制链接]
发表于 2008-9-11 19:07:25 | 显示全部楼层
可以看出4□4先手胜,4□4□1先手负。 很有可能除去这两个状态后我前面贴出的方法成立,不过现在我还没能够验证
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-9-11 19:34:24 | 显示全部楼层
(1, 1, 1)负 (1, 1, 2), (1, 1, 3)胜 (1, 2, 2)的子序列是 (1, 2)胜, (2, 2)负, (1, 1, 2)胜 所以(1, 2, 2)胜 同样(2,2,2)胜
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-9-11 19:39:02 | 显示全部楼层
(3, 4)子序列 (2, 4)胜,(1,4)胜,(3,3)胜,(2,3)胜,(1,1,4)负,(1,2,3)负 (1,1,4)子序列 (1,4)胜,(1,1,3)胜,(1,1,2)胜,(1,1,1,2)胜,(1,1,1,1)胜 (1,2,3)子序列 (2,3)胜,(1,3)胜,(1,1,3)胜,(1,2,2)胜,(1,1,2)胜,(1,1,1,2)胜 所以(3,4)胜
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-9-11 21:21:53 | 显示全部楼层
综合31# 41# 42# 43# 44# 9是先手负 所以10, 11先手胜 下一个是12
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-9-12 07:53:14 | 显示全部楼层
首先我们给一些更加方便的记号,比如 1*2+2*1可以简记为2+2*1(也就是所有1*可以省略),其次2*1也可以写成1*1+1*1=1+1 我们先考虑另外一个问题,其他规则都不变,但是允许拿最后一个子。轮到无子可拿的情况输(也就是拿到最后一颗的赢),对于这个情况,可以分析出一个比较好的结论,记: s[1]=1 s[2]=2 s[3]=3 s[4]=1 s[5]=4 s[6]=3 s[7]=2 s[8]=1 s[9]=4 s[10]=2 s[11]=6 s[12]=4 s[13]=1 s[14]=2 s[15]=7 s[16]=1 s[17]=4 s[18]=3 s[19]=2 s[20]=1 s[21]=4 s[22]=6 s[23]=7 s[24]=4 s[25]=1 s[26]=2 s[27]=8 s[28]=5 s[29]=4 s[30]=7 s[31]=2 s[32]=1 s[33]=8 s[34]=6 s[35]=7 s[36]=4 s[37]=1 s[38]=2 s[39]=3 s[40]=1 s[41]=4 s[42]=7 s[43]=2 s[44]=1 s[45]=8 s[46]=2 s[47]=7 s[48]=4 s[49]=1 s[50]=2 那么对于一个局面$x_1+x_2+...+x_k$,这个局面的状态数为$s[x_1]^^s[x_2]^^...^^s[x_k]$ 一个状态先手负的充要条件是其对应的状态数为0。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-9-12 08:20:31 | 显示全部楼层
对于初始局势 1*n ,拿最后子赢的游戏简单的很,只需分为两个等长的序列就行了。但对任意初始局势的判定也挺复杂。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-9-12 08:41:26 | 显示全部楼层
两位 9怎么判定的?能给我分析下么? 我怎么看9是输阿?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-9-12 08:58:59 | 显示全部楼层
切换到本问题,我们可以知道,除了状态1*1和1*2以外,所有其他状态能够转移到的状态同上面一个问题完全相同。 我们对于某个状态s,记上一个问题中对应的状态数为g(s),这个问题中对应的状态数为f(s) 所以我们知道,如果对于某个状态s,它经过一次变换能够达到的所有不同状态为$s_1,s_2,...,s_h$ 如果有$f(s_1)=g(s_1),f(s_2)=g(s_2),...,f(s_h)=g(s_h)$,那么我们必然可以有$f(s)=g(s)$。 而根据经验可以猜测除了少数状态以外,都会有$f(s)=g(s)$,我们的任务就是找出所有$f(s)!=g(s)$的状态s而且计算出其状态值. 第一步我们可以知道 $f(p*1)=0,f(o*1)=1$这两个状态不同于函数g, 所以所有可以到达p*1和o*1的状态都要重新计算状态数,也就是我们还需要计算状态 2+p*1,2+o*1,3+p*1,3+o*1,4+p*1,4+o*1 首先计算$f(2)=1!=g(2)=2$,所以,所有可以到达状态2的也需要重新计算,包括状态 3,4,2+1,2*2 其次计算$f(2+1)=2!=g(2+1)=3$ 然后我们可以得到$f(2+p*1)=2!=g(2+p*1),f(2+o*1)=3!=g(2+o*1)$ 所以所有可以到达这些状态的也都需要重新计算,也就是 2*2+p*1,2*2+o*1,3+p*1,3+o*1,4+p*1,4+o*1,5+p*1,5+o*1,3+2+p*1,3+2+o*1,4+2+p*1,4+2+o*1 加上前面列出的还需要添加状态3,4,2*2 都要重新计算 下一步需要计算2*2,2*2+o*1,2*2+p*1就是重复25#过程可以得到它们函数值同g函数值相同,所以不需要近一步考虑。 然后下一个需要计算状态3,3+p*1,3+o*1,3+2+p*1,3+2+o*1,根据27#的结果得到 $f(3)=2!=g(3)=3,f(3+p*1)=3!=g(3+p*1)=2,f(3+o*1)=2!=g(3+o*1)$ $f(3+2+p*1)=0=g(3+2+p*1),f(3+2+o*1)=1=g(3+2+o*1)$ 也就是只有f(3),f(3+p*1),f(3+o*1)不同于g,为此我们还需要验证所有可以到达状态3,3+p*1,3+o*1的状态,包含状态 4,5,3+1,3+2,4+p*1,5+p*1,4+o*1,5+o*1,2*3+p*1,2*3+o*1,3+2+p*1,3+2+o*1,5,6,5+o*1,6+o*1,5+p*1,6+p*1 其中最大为3的已经验证和g函数相同,因此余下还有状态 4,4+p*1,4+o*1,4+2+p*1,4+2+o*1,5,5+p*1,5+o*1,6,6+p*1,6+o*1 已经得出所有不同项为 $f(p*1)=0,f(o*1)=1,f(2)=1,f(2+p*1)=2,f(2+o*1)=3,f(3)=2,f(3+p*1)=3,f(3+o*1)=2$,其余最大数不超过3的都同g相同 然后我们计算状态4,可以到达状态3,2,2+1,1+1;对应f状态值分别为2,1,2,1,所以$f(4)=0!=g(4)=1$ 为此我们需要重新计算所有可以到达状态4的状态,包含状态6,5,4+1,4+2 其次计算4+1状态,可以到达状态4,3+1,2+1,2+2*1,3*1,所以对应f值为0,3,2,3,0 所以$f(4+1)=1!=g(4+1)=0$,所以我们需要重新计算6+1,5+1,4+2*1,6,7,4+2,4+3几个状态 4+2*1状态可以到达4+1,3+2*1,2+2*1,2+3*1,4*1,f值分别为1,2,3,2,1;所以得到$f(4+2*1)=0!=g(4+2*1)$ 4+3*1状态可以到达4+2*1,3+3*1,2+3*1,2+4*1,5*1,f值分别为0,3,2,3,0;所以得到$f(4+3*1)=1!=g(4+3*1)$ 同样可以得到4+o*1可以到达4+p*1,3+o*1,2+o*1,2+p*1,o*1,f值分别为1,2,3,2,1;所以得到$f(4+o*1)=0!=g(4+o*1)$ 同样可以得到4+p*1可以到达4+o*1,3+p*1,2+p*1,2+o*1,p*1,f值分别为0,3,2,3,0;所以得到$f(4+p*1)=1!=g(4+p*1)$ 到达它们的状态有5,6,5+o*1,5+p*1,6+o*1,6+p*1,7,7+o*1,7+p*1,4+2+o*1,4+2+p*1,4+3+p*1,4+3+o*1,2*4+o*1,2*4+p*1 到次我们已经知道同g不同的状态有 $f(p*1)=0,f(o*1)=1,f(2)=1,f(2+p*1)=2,f(2+o*1)=3,f(3)=2,f(3+p*1)=3,f(3+o*1)=2,f(4)=0,f(4+p*1)=1,f(4+o*1)=0$ 需要继续计算的状态有 4+2,4+3,4+2+p*1,4+2+o*1,4+3+p*1,4+3+o*1,2*4+o*1,2*4+p*1,5,5+p*1,5+o*1,6,6+p*1,6+o*1,7,7+p*1,7+o*1 我们先查看状态4+2可以到达4,4+1,3+2,2*2,2*2+1,2+2*1,对应f值0,1,1,0,1,3;所以$f(4+2)=2!=g(4+2)$ 到达4+2的状态有4+3,2*4,4+2+1,4+2*2,5+2,6+2,7,8 4+2+1可以到达4+2,4+2*1,4+1,3+2+1,2*2+1,2+3*1,2*2+2*1,对应f值2,0,1,0,1,2,0,所以$f(4+2+1)=3!=g(4+2+1)=2$ 4+2+2*1可以到达4+2+1,4+3*1,4+2*1,3+2+2*1,2*2+2*1,2+4*1,2*2+3*1,对应f值为3,1,0,1,0,3,1;所以$f(4+2+2*1)=2!=g(4+2+2*1)=3$ 同样我们可以得出$f(4+2+p*1)=3!=g(4+2+p*1)=2,f(4+2+o*1)=2!=g(4+2+o*1)=3$ 计算4+2*2,可以到达4+2+1,4+2,3+2*2,3*2,3*2+1,2*2+2*1,对应f值3,2,3,2,3,0,所以$f(4+2*2)=1=g(4+2*2)$ 类似估计其他4+x*2开头的都应该同g相同了。 其次计算4+3,可以到达4+1,4+2,4+2*1,2*3,3+2,3+2+1,3+2*1,对应f值为1,2,0,0,1,0,2;所以$f(4+3)=3!=g(4+3)$ 4+3+1,可以到达4+3,4+2+1,4+2*1,4+3*1,2*3+1,3+2+1,3+2+2*1,3+3*1,对应f值3,3,0,1,1,0,1,3;所以$f(4+3+1)=2!=g(4+3+1)$ 类似我们应该可以得到$f(4+3+o*1)=3!=g(4+3+o*1),f(4+3+p*1)=2!=g(4+3+p*1)$ 然后查看4+3+2可以到达4+3+1,4+3,4+2*2,4+2+1,4+2+2*1,2*3+2,3+2*2,3+3*1,3+2+2*1对应f值2,3,1,3,2,2,3,3,1; 所以$f(4+3+2)=0=g(4+3+2)$.类似我估计后面的f值都应该同g值会相同了 也就是我们找出了同g值不同的f有 $f(p*1)=0,f(o*1)=1,f(2)=1,f(2+p*1)=2,f(2+o*1)=3,f(3)=2,f(3+p*1)=3,f(3+o*1)=2$ $f(4)=0,f(4+p*1)=1,f(4+o*1)=0,f(4+2)=2,f(4+2+p*1)=3,f(4+2+o*1)=2,f(4+3)=3,f(4+3+p*1)=2,f(4+3+o*1)=3$ 对于其余的应该有$f(.)=g(.)$
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-9-12 09:05:25 | 显示全部楼层
状态9好像的确是先手输,前面分析还没有完,至少象f(2*4)我也没有分析到,这个计算一下又同g函数不同。不过如果得出f(9)=0,那么9以后的又会一堆同g函数不同,这种方法不能用下去了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-9-12 09:14:12 | 显示全部楼层
不过感觉我上面的算法可以让计算机来做,那样会好很多,只是需要解决里面一些类似数学归纳法方法的问题 如得出f(2+p*1)=2,f(2+o*1)=3,两者需要互相以对方为基础,而且开始通常需要先计算f(2),f(2+1),f(2+2*1)等,然后再使用归纳法(而且可能少数情况这个规律不一定成立,这时需要多推导几项)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-12-4 01:29 , Processed in 0.024894 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表