猜猜 猜猜猜 猜猜猜猜猜
You got me crazy
I want you baby
猜猜 让你猜 答案 猜出来
猜猜猜 - 赵采儿 - 单曲 - 网易云音乐music.163.com相信读者都和我一样,了解过“1~100的猜数字游戏”——
(为简单起见先改为1~31之间的整数,其实道理上都是一样的)
(1) 甲悄咪咪地选择一个1~31之间的整数
(2) 乙猜测这个数是
(3) 甲(诚实地)告诉乙是“
问题:乙采用什么样的方法至多多少次一定可以猜中
这个问题很简单,就是采用“二分”的策略,我简单的用下图表示吧:
或者
那么如果是猜
(熟悉“基于比较的排序算法的复杂度下界”的朋友们一定清楚这个套路。)
可以把问题抽象为:
(1) 甲悄咪咪在集合
(2) 乙猜测这个数在
(3) 甲(诚实地)回答乙的猜测是正确的还是错误的;
(4) 乙可根据自己是否已经可以确定
问题:乙采用什么样的方法至多多少次一定可以猜中
那么乙的策略就是:
(1) 如果目前已确定
(2) 如果目前已确定
这时乙最多猜测
现在问题变化为:
假定集合
乙可以提出问题:“你选的数
甲可以回答“是”或者“否”;然而,甲并不诚实!甲可能说相反的结果(可以理解为“撒谎”,但不是“我哪知道你猜的对不对”这种撒谎),但是
约束(1) 甲不会连续两句话都说相反的结果。
然而这时候即使明知所在的集合中仅有2个元素,乙提问“它是么?”而甲回答“是”的时候,乙也不能确认真实的情况是什么;乙提问两次“它是么?”而甲回答“是”、“否”时,乙也不能确认真实的情况是什么;乙提问三次“它是么?”而甲回答“是”、“否”、“是”时,乙也不能确认真实的情况是什么;乙提问四次“它是么?”而甲回答“是”、“否”、“是”、“否”时,乙也不能确认真实的情况是什么……
所以有如下的 约束(2):
约束(2) 且假定:如果乙能够指出
那么这时乙的策略又是什么呢?
有人提出了以下的(至少让我很震惊的)方法(非本人所创,但目前我也查不到来源了):
(猜测策略1) 如果目前已确定
(猜测策略2) 如果目前已确定
下面分析一下乙的保证能够猜中的猜测次数吧:
- 如果满足(猜测策略1),那么至多需要猜测两次;
- 如果满足(猜测策略2),那么猜测2次后次就可以将“嫌疑数”的规模缩小到3/4。
用
倒推可以得到(有些许误差,但不影响复杂度):