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

calculating big O for a while loop binary search

本文关键字:计算 搜索 二进制 while 循环      更新时间:2023-10-16

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

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)<-这是正确的吗?

O(n/2)O(n)完全相同。一般来说,对于n的任何函数,O(f(n)) == O(k*f(n))f和任何常数k

您发布的算法确实使用二进制搜索,即O(log(n))。如果你有8个项目,你的算法需要3次迭代才能运行。16要4,32要5…你看到模式了吗?