如何计算此给定代码的Theta运行时:
void f(int n)
{
for (int i=3; i<n; ++i)
for (int j=0; j<i; ++j)
f(n-1);
}
到目前为止,我得到了这个,但我不知道它是否正确或如何将它带入Theta表示法。
f(n) = n^2 * f(n-1)
f(n) = n^2 * (n-1)^2 * f(n-2)
f(n) = n^2 * (n-1)^2 * (n-2)^2 * f(n-3)
...
答案 0 :(得分:2)
由于每个嵌套的for循环都是O(N ^ 2)复杂度,并且每次在另一个函数内部调用函数时,复杂性都会成倍增加,最终会得到O((N!)^ 2),其中{ {1}}也是你递归的次数。这当然是因为N
,并且用于创建阶乘的所有值都是平方的。
答案 1 :(得分:1)
如果我们用零替换3(这显然不会改变任何关于Θ的东西),我们可以非常容易地得出函数调用的确切数量:
Θ f ( 1 ) = 1
Θ f ( n ) = n 2 ⋅Θ f ( n -1)∀ n &gt; 0
所以,使用产品的交换性,
n n n
Θ f ( n ) =Π j 2 =Π j ⋅Π j = n ! ⋅ n !
i = 1 i = 1 i = 1
=( n !) 2功能
正如杰森所说。