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经过一些研究,我似乎对九年级代数一无所知。谢谢你的更正。