用Java计算一个程序的Big-O

用Java计算一个程序的Big-O,java,time,big-o,complexity-theory,Java,Time,Big O,Complexity Theory,我只是想问一下,这个项目的大O是什么。我想是n/2,但我不确定 public static boolean isPrime(int k) { if (k <= 1) return false; else if (k > 2 && k%2 == 0) return false; else { for(int i = 3;i<=k/2;i+=2) if (k %

我只是想问一下,这个项目的大O是什么。我想是
n/2
,但我不确定

public static boolean isPrime(int k) {
    if (k <= 1)
        return false;
    else if (k > 2 && k%2 == 0)
        return false;
    else 
    {
        for(int i = 3;i<=k/2;i+=2)
            if (k % i == 0)
                return false;
    }
    return true;
}
公共静态布尔值isPrime(int k){
如果(k2&&k%2==0)
返回false;
其他的
{
对于(inti=3;i而言,复杂性为
O(k)
,即线性时间

以最坏的执行情况为例,其中
k
prime。然后您的算法将执行所有行,直到
返回true;

特别是您完全执行
for
循环,该循环产生
(k/4)-3次迭代:

for (int i = 3; i <= k/2; i += 2)

对于(inti=3;i)一个带有“简单”边界条件和增量的循环=>O(n)(=O(n/2))“我认为它是n/2”-常量在大O表示法中被忽略,并且由于
n/2=1/2*n
,它实际上是
=O(n)
虽然没有错,“正确的表示法”应该是
f(k)=k/2∈ O(n)
=)(根据使用的定义或约定,您可以替换
=
好吧,
O(k/2)=O(k)
是正确的。两者都表示相同的集合。但是我得到了你想要说的:)只检查k/4个元素,而不是k/2。@A.H.你是正确的,没有看到
I+=2
编辑。正如@Zabuza所暗示的,每个
f(x)=c*x
都有
c∈ ℝ⁺O
-函数时,code>映射到相同的函数集。因此
O(k/4)=O(k/2)=O(k)
^^