get complete
我有这个用java编写的算法,我需要在最坏的情况下根据输入参数n找到它的复杂性。我可以理解这个过程的基础知识,其中每个循环必须单独查看。这个算法的复杂性应该是n2 log n但我无法理解它是如何计算的。 有人可以向我解释一下吗?
答案 0 :(得分:1)
由于这是某种练习,我只会展示一些部分,其余部分供你使用。特别要看这段代码:
if(even(i/3))
for(j=n; j < n*n; j++)
c++
else
for(j=1; j < 900; j=j*3)
c++
从包含它的循环开始,我们知道大约一半的执行中even(i/3)
将为真,因此then和else部分对运行时的贡献相同。
让我们现在看看当时的部分:j
将从n
运行到n*n
,所以O(n * n)的顺序。循环体中的语句的运行时间为O(1),因此O(n * n)一起。
另一方面,else部分中的循环将执行log 3 (900)次,这是一个常量,并且正文的运行时也是常量。所以这个循环总共会贡献O(1)的运行时间。
因此总的来说,我们得到整个if
O(n * n)+ O(1)的运行时间,它只是O(n * n)。