Python 以最少的尝试次数查找未知号码

Python 以最少的尝试次数查找未知号码,python,python-2.7,python-3.x,math,Python,Python 2.7,Python 3.x,Math,我正在尝试编写一个python脚本,该脚本以尽可能少的尝试次数查找未知数字 我所知道的是这个数字

我正在尝试编写一个python脚本,该脚本以尽可能少的尝试次数查找未知数字

我所知道的是这个数字<10000

每次我输入错误都会得到一个“错误”响应。 当我找到正确的号码时,我得到了“成功”的回答

让我们假设在这种情况下,数字是124

您将如何用Python解决这个问题


谢谢你的帮助。我真的被困在这个问题上了:(

如果你只知道
<10000
的数字,你必须尝试
1
9999
(包括)之间的所有数字。注释中建议的二进制搜索算法没有帮助,因为未命中不会告诉你是过高还是过低

for i in range(1, 10000):
    if i == number_you_are_looking_for:
        print("found it")
        break

如果您只知道
<10000
,则必须尝试
1
9999
(包括)之间的所有数字。注释中建议的二进制搜索算法没有帮助,因为未命中不会告诉您是过高还是过低

for i in range(1, 10000):
    if i == number_you_are_looking_for:
        print("found it")
        break

我相信最快的方法是使用二进制搜索,它以O(logn)给出答案


我相信最快的方法是使用二进制搜索,它以O(logn)给出答案



到目前为止,您尝试了什么?这称为二进制搜索算法:二进制搜索只有在未命中时告诉您您是高于还是低于数字时才有帮助。正如问题所写,我们没有这些信息。只有“命中”或“未命中”,没有别的。我们必须尝试每一个数字。这是一个P=NP问题吗?问题显然在P中,因为尝试所有数字的最天真的解决方案是在
O(n)上
,其中
n
是需要尝试的最大数字。到目前为止,您尝试了什么?这称为二进制搜索算法:二进制搜索仅在未命中时才有帮助,如果未命中则会告诉您是高于还是低于该数字。正如问题所述,我们没有此信息。只有“命中”或“未命中”,没有别的。我们必须尝试每一个数字。这是一个P=NP问题吗?问题显然在P中,因为尝试所有数字的最天真的解决方案是在
O(n)上
,其中
n
是需要尝试的最大数字。我认为这是唯一可能的解决方案。呵呵,办公室里的慢一天。我认为这是唯一可能的解决方案。呵呵,办公室里的慢一天。因此,在您的特殊情况下,
二进制搜索(124,0,10000)
在13次尝试中给出答案。“但是如果你知道这个数字,就像你的例子124一样,我相信最快的方法是使用二进制搜索"-你能解释一下这个逻辑吗?知道数字就没有意义了。-这个答案是1。@Alex.S当然。假设有一个小游戏,数字来自用户输入,然后计算机必须猜测这个数字。然后二进制搜索应该是非常合适的快速算法。我明白。我不明白“你知道数字”和“最快的方法是二进制搜索”之间的逻辑联系。查看你的代码,我发现你为函数提供了数字。因此,使用任何搜索算法都毫无意义。你可以立即
打印n
,就是这样!尝试次数为零,几乎不可能更少;)因此,在您的特定案例中,
binary\u search(124,0,10000)
通过13次尝试给出答案。“但是如果您知道数字,就像您的案例124一样,我相信最快的方法是使用二进制搜索”-您能解释一下这个逻辑吗?知道数字会使搜索变得毫无意义-1.这个答案是肯定的。假设有一个小游戏,其中数字来自用户输入,然后计算机必须猜测该数字。那么二进制搜索应该是非常合适的快速算法。我理解这一点。我不明白“你知道数字”和“最快的方法是二进制搜索”之间的逻辑联系。查看您的代码,我看到您为函数提供了数字。因此,使用任何搜索算法都毫无意义。您可以立即
打印n
,就这样!尝试次数为零,几乎不可能少于;)
binary_search(7, 0, 10)
>> The number is: 7
>> Tries: 2

binary_search(667, 0, 1000)
>> The number is: 667
>> Tries: 8

binary_search(2**19, 2**18, 2**20)
>> The number is: 524288
>> Tries: 19