一尘不染

猜数字时仅知道所提议的数字是较低还是较高?

algorithm

我需要猜一个数字。我只能看到我建议的数字是较低还是较高。性能非常重要,因此我想到了以下算法:

假设我要猜测的数字是600。

  • 我从数字1000开始(或者为了获得更高的性能,它是先前数字的平均结果)。

  • 然后,我检查1000是否高于或低于600。

  • 然后,我将数字除以2(现在是500),并检查它是否小于或大于600。它是否小于600。

  • 然后,找到差异并将其除以2,以以下方式检索新的数字:(1000 + 500)/2。结果为750。然后检查该数字。

等等。

这是最好的方法,还是有更聪明的方法呢?就我而言,每次猜测大约需要500毫秒,因此我需要在尽可能短的时间内猜测出很多数字。

我可以粗略地假设先前猜测的平均结果也接近即将到来的数字,因此我可以利用一种模式来发挥自己的优势。


阅读 454

收藏
2020-07-28

共1个答案

一尘不染

binary search的,这样做是最有效的方法。Binary Search是你所描述的 对于1到N之间的数字Binary SearchO(log(n))时间会运行。

所以这是找到1-N之间的数字的算法

int a = 1, b = n, guess = average of previous answers;

while(guess is wrong) {

    if(guess lower than answer) {a = guess;}
    else if(guess higher than answer) {b = guess;}

    guess = (a+b)/2;

} //Go back to while
2020-07-28