代码之家  ›  专栏  ›  技术社区  ›  Faisal Alzahrani

用Java计算程序的Big-O

  •  -1
  • Faisal Alzahrani  · 技术社区  · 6 年前

    我只是想问一下这个项目的大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;
    }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Zabuzard Louis-Philippe Lebouthillier    6 年前

    复杂性是 O(k) 这是 线性时间

    在最坏的情况下执行 k 是一个 首要的 。然后您的算法将执行所有行,直到 return true;

    尤其是您完全执行 for 产生的循环 (k / 4) - 3 迭代次数:

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

    所以你得到 O((k / 4) - 3) 这是 O(k)