繁体   English   中英

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

[英]Binary search method needs to be more efficient

   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,进行二进制搜索isGreaterThan,这个数字是否大于x? 您可以回答是或否。 通过使先前的平均值成为新的lowerLimit或upperLimit,可以将每次迭代从lowerLimit到upperLimit的值切成两半。

问题在于,一旦将数组缩小到仅两个或三个值,它将问该数字是否大于x? 多次重复相同的数字,例如:

Is it greater than 56?

Is it greater than 57? 没有

Is it greater than 56? 没有

数字是56

我很确定这是因为平均值被四舍五入为整数。 它可以完美地工作到最后,我只是想不出如何缓解最后一个小问题。

我认为您应该有一个lowerLimit == upperLimit的基本情况,如果它只是返回该数字,并且不调用isGreaterThan函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM