java - 该算法的时间复杂度是多少?

标签 java algorithm time complexity-theory

public static void Comp(int n)
{
    int count=0;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            for(int k=1;k<n;k*=2)
            {
                count++;
            }
        }
    }
    System.out.println(count);
}

有人知道时间复杂度是多少吗?

什么是 Big Oh()

请你一步步向我解释一下吗?

最佳答案

无论是谁给你提出这个问题,几乎肯定是在寻找答案 n^2 log(n) ,其原因已由其他人解释。

但是这个问题实际上没有任何意义。如果n > 2^30 , k将会溢出,使内部循环无限。

即使我们将此问题视为完全理论上的问题,并假设 n , kcount不是 Java int s,而是一些理论上的整数类型,答案n^2 log n假设操作 ++*=无论需要多少位来表示整数,都具有恒定的时间复杂度。这个假设实际上并不成立。

更新

有人在下面的评论中向我指出,根据硬件的工作方式,可以合理地假设 ++ , *=2<无论需要多少位,它们都具有恒定的时间复杂度。这使得我的答案的第三段无效。

关于java - 该算法的时间复杂度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29496256/

相关文章:

java - 尽管刷新了 OutputStream,新的 ObjectInputStream 仍会阻塞

java.lang.NoSuchMethodError : io. searchbox.action.Action.getURI()Ljava/lang/String

java - 二叉堆 Dijkstra 算法的反例(负权重图)

python - 在Python中比较unix时间戳

java - joda time plusDays forPattern ("dd/mm/yyyy") 不切换到下个月

java - @SqlResultSetMapping 和 @Embedded

java - 如何创建 Play heroku procfile?

algorithm - 是否存在仅通过每种颜色一次的路径?

java - Java从数组中删除项目

time - LibreOffice SUM 时间段,格式为 HH :MM:SS