Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算while循环二进制搜索的大O_Java_C++_Big O - Fatal编程技术网

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

Java 计算while循环二进制搜索的大O,java,c++,big-o,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),但是。。。如果我理解了上面的代码,它是一个二进制搜索(我想)

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

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),但是。。。如果我理解了上面的代码,它是一个二进制搜索(我想)现在我猜它的大O是:O(n/2)
O(n/2)
O(n)
完全相同。一般来说,
O(f(n))==O(k*f(n))
对于n的任何函数,
f
和任何常数
k


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

O(N/2)不是一个有效的大O。如果某个对象是O(N/2),你可以简单地称它为O(N)。这是二进制搜索,假设
isLessThanX
workOK,它是O(log Integer.MAX_VALUE)。它看起来就像你在猜测一个介于
0和max integer
之间的数字。没有像
O(n/2)
这样的事情。Big-O下的参数是
c.n
,通常我们忽略
c
。请注意
c>0
您确定数字不能小于0吗?@ElliottFrisch是的。Big-O是完成任务的操作数的近似值。如果它可以小于0,它将声明操作可以在小于0的操作中完成(这很难声明,因为它没有意义)
log
的基在big-O表示法中是无关的,只要它是一个常量>1。@fabian这与在类似
O(n^2)的东西中所说的完全相同
指数是不相关的,只要它是一个大于1的常数。对数基数是不相关的(有一些限制),因为
log_a(x)=log_b(x)*log_a(b)
@shmedfred是的,你想解释一下吗?@Nelxiost经过一些研究,我似乎对九年级代数一无所知。谢谢你的更正。