二进制搜索方法需要更高效

时间:2014-03-26 19:22:01

标签: java boolean binary-search

   int i = 0;
    int finalVal = 0;
    while (i < this.maxQuestions) {
        if (this.isGreaterThan(average(lowerLimit, upperLimit))) {
            lowerLimit = average(lowerLimit, upperLimit);
            finalVal = upperLimit;
        } else {
            upperLimit = average(lowerLimit, upperLimit);
            finalVal = lowerLimit;
        }
        i++;
    }
    System.out.println("The number you picked was: " + finalVal);

基本上我使用布尔值isGreaterThan,进行二元搜索,要求是大于x的数字<?em>,你可以回答是或否。通过使先前的平均值成为新的lowerLimit或upperLimit,从lowerLimit到upperLimit的值数组每次迭代减半。

问题是,一旦它将数组缩小到只有两个或三个值,它会多次询问是多于x?的数字,例如:

Is it greater than 56?是的

Is it greater than 57?没有

Is it greater than 56?没有

这个数字是56。

我很确定它是因为平均值是作为int向下舍入的。它完美地工作到最后,我只是无法弄清楚如何缓解这个最后的小问题。

1 个答案:

答案 0 :(得分:0)

我认为你应该有一个基本情况,其中lowerLimit == upperLimit,如果它只是返回那个数字,如果没有调用isGreaterThan函数。