与线性搜索相比,我需要了解以下代码的效率:
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 ; - 这是正确的吗?
答案 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 ...你看到模式?