专栏文章
愚妄——如果想在 10 道中对上 7 道
算法·理论参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mimxxu5f
- 此快照首次捕获于
- 2025/12/01 17:22 3 个月前
- 此快照最后确认于
- 2025/12/01 17:22 3 个月前
问题不十分大,但很细。
有 10 道没有题面的判断题。A 和 B 在俩小黑屋中,只能和主持人对话。主持人首先告诉 A 这 10 题按顺序的答案,接着对于每道题,两人各自告诉主持人自己的选择,主持人再告诉两人正确答案与对方的选择,之后方可回答下一题。若两人的选择均与正确答案相同,称此题“答对了”。假设 A 与 B 被关进小黑屋前已经约定好了策略,求在任意情况下至少答对 7 题的策略。
不妨拓展一下,假使试图在 题中对的题尽可能多,该怎么办?
设 表示在 题中对至少 题的情况下答案集合的最大大小,此处 且 。
于是可以写出转移:
为何是“”呢?因为这只是一个上界而已。(就我个人而言,我压根不知道如何构造方案逼近该上界。)
但显然如果 ,则根本不存在策略满足任意情况下 n 题对 m 题。而计算可知 。所以 10 道根本对不了 7 道嘛!
(之后供题人就被我们联合声讨了,严肃反省之后改成了 9 对 6。)
将上面转移中的“”替换为“”,“”替换为“”,然后考虑一下上界 的性质。
那么会首先注意到如下几点:
- ;
- 时 ;
- 。
由此可以预见其存在两条分界线对应两个 的临界值。
然而事情没这么简单,不妨写个代码看看前几个 的取值:(这里为了方便写的 GNU C)
Cg[15][15],i,j;
#define min(x,y)({int a=(x),b=(y);(a<b?a:b);})
main()
{
for(i=0;i<15;i++)
{
g[i][0]=1<<i,g[i][i]=1;
for(j=1;j<i;j++)
g[i][j]=min(1<<i-1,g[i-1][j-1]+g[i-1][j])+min(1<<i-1,g[i-1][j]<<1);
for(j=0;j<i;j++)
if(g[i][j]==1<<i)
printf("-\t");
else
printf("%d\t",g[i][j]);
puts(i?"1":"-");
}
}
只看见了一条分界线。(其实中间并非没有,仔细看能看见一个 一个 等。)
为何会如此呢?
答案也十分显然:分界线左侧都是指数级增长的,而右侧却是多项式级别增长的,因此两条分界线中间的区域几乎不存在,才只能看见一条分界线。
分界线右侧的多项式如下:
| 普通幂 | 下降幂 | |
|---|---|---|
暂时还看不出规律。
不过很容易可以看出这个错误数量的量级大概是 。
这实在是令人汗颜。因为这比某乎上一些人求出的低很多。
剩下的待会再写。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...