计算大O进行while循环二进制搜索

时间:2014-09-04 15:35:12

标签: java c++ big-o

与线性搜索相比,我需要了解以下代码的效率:

int max = Integer.MAX_VALUE;
int min = 0;

while(min != max) {
    int check = (max + min) / 2;
    if(isLessThanX(check)) {
        min = check;
    } else {
        max = check;
    }
}

线性搜索是O(n),但是...如果我理解上面的代码,它是二进制搜索(我认为)现在我的GUESS是这个的大O是:O(n / 2)&lt ; - 这是正确的吗?

1 个答案:

答案 0 :(得分:-1)

O(n/2)O(n)完全相同。一般情况下,O(f(n)) == O(k*f(n))适用于n,f和任何常量k的任何函数。

您发布的算法使用二进制搜索,即O(log(n))。如果您有8个项目,则算法运行需要3次迭代。 16将需要4,32将采取5 ...你看到模式?