Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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 算法的复杂性_Java_Algorithm_Time Complexity - Fatal编程技术网

Java 算法的复杂性

Java 算法的复杂性,java,algorithm,time-complexity,Java,Algorithm,Time Complexity,我正在准备考试,看到了这个问题,所以我做了下面的,对吗 while循环在O(log3n)处运行 for循环在O((n-(一些数学))*log2n)左右运行,因为我有一个线性的减号,所以我说整个方法在O(nlogn)上运行,除非我错了,它类似于 O((n-(n/log3n))*log2n)while循环在O(logm)中运行 while循环完成后,i是第一个while循环在O(100*log_3(m))中运行。这应该很容易看到 对于的外部循环,请注意i最多为100(因为之前的while循环),而内

我正在准备考试,看到了这个问题,所以我做了下面的,对吗

while循环在O(log3n)处运行

for循环在O((n-(一些数学))*log2n)左右运行,因为我有一个线性的减号,所以我说整个方法在O(nlogn)上运行,除非我错了,它类似于


O((n-(n/log3n))*log2n)while循环在
O(logm)
中运行


while循环完成后,
i
是第一个
while
循环在
O(100*log_3(m))
中运行。这应该很容易看到


对于
的外部
循环,请注意
i
最多为100(因为之前的
while
循环),而内部循环为
O(100*log_2(n))
,因此总体渐近极限为
O(log_3(m)+log_2(n))
,为什么您关心负数?括号内的表达式apriori不能小于零,因此第一项大于等于第二项,因此您可以使用第一项,该项渐近变为O(nlogn)。除非你在计算时出错:
O((n-(n/log3n))*log2n)
你能解释一下为什么它不是-O((n/(n/100))*logn吗?m/(m/100)将为每m>100给出100(这是最糟糕的情况),并且我在log2n上循环m/(m/100)次。我想我回答了我自己的问题。。。如果m/(m/100)对于m>100总是100,我基本上是说bigO是O(100*logn),也就是O(logn),我能从你写的bigO中减去logn吗(因为log2n大于log3m)并使其为O(log3m)?@SethKeno第一次循环运行的次数取决于m。对于m>100,并不总是100。我不明白你为什么要除以m。由于第一个循环,增加m将增加总时间,因此它必须在最终表达式中。表示日志的基数在大O表示法中是多余的。@Dukeling我知道。这只是为了让OP的数学更清晰,让他知道它来自哪里。但是谢谢你的反馈。
public void foo (int n, int m)
{
    int i = m;
    while (i>100)
     i = i/3;
    for (int k=i; k>=0; k--)
    {
        for (int j=1; j<n; j*=2)
         System.out.print(k + "\t" + j);
        System.out.println();
    }
}