猜数字,允许说谎

时间:2011-04-15 17:57:54

标签: algorithm

我很确定你们都知道Guess the Number游戏(这里似乎有很多问题),Alice认为这是一个正整数,Bob试图猜测它。爱丽丝通过说“你得到它”,“低”,“高”来回应。 Bob可以做的通常策略是进行二进制搜索,猜测O(log n)猜测中的数字,其中n是Alice想到的数字。

我一直想知道允许爱丽丝撒谎的变种。

假设现在Alice被允许撒谎一定次数(事先知道Alice和Bob),但只有在响应“High”,“Low”时才被允许撒谎(即如果Bob正确猜测数字,她不得不承认)。

Bob是否仍然可以猜出O(log n)猜测中的数字?

如果Bob被允许进行其他查询,例如“你到目前为止有多少次撒谎?” (爱丽丝必须如实回应)? O(log n)查询是否仍然可能?

编辑:如果谎言的数量也允许为O(logn),并且其他查询是:你撒谎超过x次怎么办?爱丽丝被允许撒谎......

为编辑道歉。

2 个答案:

答案 0 :(得分:8)

运行常用的二进制搜索算法。要么得到答案,要么得到不一致(空候选集)。如果你出现不一致,Alice必须至少撒谎一次。重启二进制搜索。除非我遗漏了某些东西,否则在O(k * log(n))步骤之后你会得到答案(加上她撒谎多少次的下限)。你不需要事先了解k。

答案 1 :(得分:2)

我认为它仍然是O(log n),因为你指定Alice只能说谎一次。这意味着她最多可以将鲍勃所做的猜测量乘以常数。

想象一下,爱丽丝可以撒谎5次。 现在,无论爱丽丝何时撒谎,她最终都不得不自相矛盾。鲍勃会注意到这一点,并可以开始他的二分搜索。 Alice也被限制在O(log n)猜测范围内,否则Bob会正确地猜出这个数字而且Alice失去了机会。

所以,在最糟糕的情况下,爱丽丝躺五次,每次/就在之前/鲍勃得到答案,她只是让鲍勃的二进制搜索采取6 *(log n)猜测(五个谎言+一个正确答案) ,仍然是O(log n)。