zoukankan      html  css  js  c++  java
  • 博弈论

    博弈论

    推荐网址

    巴什博奕

    巴什博奕

    只有一堆n个物品,两个人从轮流中取出(1~m)个;最后取光者胜。
    考虑到 若n=m+1 那么 第一个人不论如何取都不能取胜。
    进一步我们发现 若 n=k(m+1)+r; 先取者拿走 r 个,那么后者再拿(1~m)个
    n=(k-1)
    (m+1)+s; 先取者再拿走s 个 最后总能造成 剩下n=m+1 的局面。
    因此,此时先手有必赢策略。
    相对应的,若n=k*(m+1) 那么先取者必输。

    NIM游戏

    当有N堆,每堆有Mi>0个物品,依旧是两个人来取该怎么判断?
    考虑当所有堆中的石子数都为0,那么先手必败;
    当所有堆中石子数都为0是异或和为0的情况;
    会发现每次有方法把异或和不为0的状态转变成异或和为0的状态,
    而每次异或和为0的状态只能转化为异或和不为0的状态;
    所以呢,如果初始状态异或和不为0,先手必胜,否则先手必败;
    有1堆n个的石子,每次只能取{ 1, 3, 4 }个石子,先取完石子者胜利,那么各个数的SG值为多少?

    SG定理: 游戏和的SG函数等于各个游戏SG函数的Nim和/异或和。

    SG[0]=0,f[]={1,3,4},
    x=1 时,可以取走1 - f{1}个石子,剩余{0}个,所以 SG[1] = mex{ SG[0] }= mex{0} = 1;
    x=2 时,可以取走2 - f{1}个石子,剩余{1}个,所以 SG[2] = mex{ SG[1] }= mex{1} = 0;
    x=3 时,可以取走3 - f{1,3}个石子,剩余{2,0}个,所以 SG[3] = mex{SG[2],SG[0]} = mex{0,0} =1;
    x=4 时,可以取走4- f{1,3,4}个石子,剩余{3,1,0}个,所以 SG[4] = mex{SG[3],SG[1],SG[0]} = mex{1,1,0} = 2;
    x=5 时,可以取走5 - f{1,3,4}个石子,剩余{4,2,1}个,所以SG[5] = mex{SG[4],SG[2],SG[1]} =mex{2,0,1} = 3;

    void get_SG(int n){
    	for(int i=1;i<=n;i++){
    		for(int j=1;f[j]<=i;j++){
    			ok[SG[i-f[j]]]=i;
    		}
    		for(int j=0;;j++){
    			if(ok[j]!=i){
    				SG[i]=j;
    				break;
    			}
    		}
    	}
    }
    

    威佐夫博弈

    有两堆石子,两个顶尖聪明的人在玩游戏,
    每次每个人可以从任意一堆石子中取任意多的石子
    或者从两堆石子中取同样多的石子,不能取得人输
    由于证明复杂且没有演变所以知道结论即可
    结论:
    emmmm 先留个坑

  • 相关阅读:
    [转]理解java的三大特性之多态
    [转]java:IO流学习小结
    Base64 加密之中文乱码
    piwik优化之定时任务生成统计数据
    php统计中英文混合的文章字数
    Linux常用命令之定时任务
    skype在线状态代码详解
    php+google/baidu翻译接口
    php限制文件下载速度的代码
    PHP破解wifi密码(wifi万能钥匙的接口)
  • 原文地址:https://www.cnblogs.com/Aswert/p/13604692.html
Copyright © 2011-2022 走看看