- 注册时间
- 2009-5-22
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 38516
- 在线时间
- 小时
|
发表于 2016-7-24 16:04:47
|
显示全部楼层
“已知:每个选手对其他各个选手的经验胜率”
这其实是一张$N\times N$的表格,记录了任意两位棋手对弈的胜负概率。
如果以这张表格作为此问题的输入数据,那么这是一个$NP$完全问题,
即不存在关于$N$的多项式时间复杂度的算法,对于任意的输入数据都能求出正确答案。
因此楼主不用煞费心机寻找又高效又能得出准确结果的算法了。
#####
实际上 ,并不是任意一张胜率表都是合理的。
每一位象棋、围棋等棋类选手,我们通常用一个数值来衡量他的“棋力”。
以围棋为例,这个数值称为"Elo"。围棋选手的世界排名就是根据"Elo"的大小进行排名的(参见 http://www.goratings.org 表格的最后一列)
每$400$点Elo就等于一个数量级,
即Elo为$3600$的选手与Elo为$3200$的选手对战,前者的胜率约为$90%$;
Elo为$3200$的选手与Elo为$2800$的选手对战,前者的胜率也是约为$90%$;
而Elo为$3600$的选手与Elo为$2800$的选手对战,前者的胜率约为$99%$。
有了Elo值作为度量,那么
知道了$A$大概率赢$B$以及$B$大概率赢$C$,就可以推出$A$会以更大概率赢$C$。
而如果$C$也大概率赢$A$就不合情理了。
也就是具有传递性的胜率表才是合理的。
#####
那么“合理的胜率分布”就应该是选手的夺冠概率与$10$的${Elo}/400$次方成正比。
为了达成这一分布,通常会把已知Elo很高的选手(种子选手)分在不同的分组,避免他们过早地撞上。
例如,一共有$16$名选手,他们的Elo都已知,从高到低排序后得到第$1$、第$2$、……、第$16$,那么合理的分组就是
{[(1,9),(5,13)],[(3,11),(7,15)]},{[(2,10),(6,14)],[(4,12),(8,16)]},
以确保各路高手能顺利晋级,避免过早被其他高手撞下去。 |
|