algorithm - 解决是非测试

标签 algorithm

有一个包含 N 个 YES 或 NO 问题的测试。你可以写测试,教授会告诉你有多少答案是正确的。通过考试最快的方法是什么? IE。以最少的试验次数正确回答所有问题。

UPD N+1 试验的解决方案很明显。在每次试验中,我们都会对一个问题给出正确答案。它是 1 比特的信息。但是教授每次给我们一个从0到N的数字,就是log2(N + 1)位信息。这就是为什么最好的解决方案具有 O(N/log(N)) 的复杂性。 我正在寻找具有次线性最差时间复杂度的任何解决方案。

最佳答案

相对于N+1方案的明显改进:

从所有 Y 的答案开始。

然后我们确切地知道有多少是/否。

p 为在任何给定位置上获得"is"的概率。 p >= 1/2 不失一般性。

然后我将平均尝试 2 - p^2 次来揭示两个第一个答案。

我更改了前两个问题的答案。 至少 p^2 的时候我会知道他们两个的确切答案。如果不是 - 那么我至少知道其中一个是 Y,另一个是 N,我需要再问一个问题。

所以在 p = 1/2 的最坏情况下,我需要 1 + N * 7/8

关于algorithm - 解决是非测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24449454/

相关文章:

c# - 什么是折叠一组潜在重叠范围的通用算法?

algorithm - 堆树 - 输出排序列表的复杂性

算法:旋转下的加权和

string - 在多个单词中匹配一个字符串

algorithm - 如何实现推荐引擎?

java - 计算文本文件中字母的出现次数

vb.net - 在 Visual Basic 中,如何确定一组 5 个数字加起来是否等于 15?

algorithm - 检测矩形(按钮)是否在 x 或 y 轴上重叠

.net - 海量数据快速可视化的方法

algorithm - 压缩具有特定顺序的正整数向量 (int32)