请帮助我找到以下功能的复杂性:
proc (int n)
{
for (i=0 ; i<n ; i++)
{
x = g(n)+f(n) ;
for (j=0 ; j<n ; j++)
{
y=h(j)*g(j) ;
}
}
return x+y ;
}
当f = O(n ^ 2),g = O(n),h =Θ(log(n))。
我不确定的事情:
谢谢!
答案 0 :(得分:1)
内循环的复杂度(h*g
的总和)
由于h(j) = Θ(log(j))
和g(j) = O(j)
,h(j).g(j)
的复杂度为O(j.log(j))
,对于K> 0,则为<= K.j.log(j)
。因此,内部循环产生>
K.(1.log(1) + 2.log(2) + ... + (n-1).log(n-1))
<= K'.n^2.log(n)
对于精心选择的常量K'
,内部循环会带来复杂性O(n^2.log(n))
。
g + f
的复杂度
g = O(n)
和f = O(n^2)
,因此f + g
的复杂度为O(n^2)
。
总体复杂性
A: n
的{{1}}项O(n^2)
的总和为f+g
。
B: O(n^3)
的{{1}}项之和为j^2log(j)
。
因此,您的方法的复杂度为0 <= j < n
。
答案 1 :(得分:0)
Big O of x = O(n^2) Big O of y = O(n log(n))
现在要计算整个算法的Big O,我们必须看一下最里面的循环。在这种情况下,最里面的循环包含在y = h(j)* g(j)中。 Big O可以从最低点开始向上计算。 x的Big O不会相加,因为它与内部for循环处于同一级别。
Big O = O(n log(n)) * O(n) * O(n) + O(n^2) It can be written as: Big O = O ((n log(n) * n * n) + (n * n^2)) Big O = O((n^3 log(n) + n^3) Neglecting smaller terms would give us: Big O = O(n^3 log(n))