方法的复杂性分析
Complexity analysis of a method
需要分析递归函数的复杂度。函数如下
int hello(int n){
if(n==0)
return 0;
for(int i=0;i<n;i++){
for(int j=0;j<n * n;j++){
System.out.println("HELLO");
}
}
return hello(n-1);
}
我迷茫的步骤是hello(n-1)。我不知道如何评估像该代码这样的复杂性。如果你一步一步地告诉这个问题的解决方案,我将不胜感激。提前致谢。
设递归函数的 运行ning 时间用 T(n) 表示,其中 n 是输入的大小。在递归关系中,输入大小为 n 的递归函数的 运行ning 时间用 n 的较低值的 运行ning 时间表示。你的情况
T(n) = T(n-1) + n^3(嵌套循环 运行 for O(n^3))
= T(n-2) + (n-1)^3 + n^3
= T(n-3) + (n-2)^3 + (n-1)^3 + n^3
..... ...... .......
= T(0) + 1^3 + 2^3 + 3^3 + ...... + (n-2)^3 + (n-1)^3 + n^3
= 1^3 + 2^3 + 3^3 + ....... + (n-2)^3 + (n-1)^3 + n^3
=
= O(n^4)
我们可以知道它的复杂度为 O(n^4),因为一旦我们解决了它,我们将忽略方程中所有具有较低指数的常数和变量,而 n^4 将是 n 的最高次方。
以防万一你听说过求解递推关系的大定理。并想知道如何使用它来查找这种情况的时间复杂度。你不能,因为它不是 T(n) = a*T(n/b) + f(n)
.
的形式
如果您能够以某种方式将其转换为那种形式,它可能会起作用。不是最好的选择,因为我们已经有众所周知的身份可以在这种情况下使用。 Master Theorem 是一个工具而不是负担,尽可能使用它,否则使用最适合的方法。
需要分析递归函数的复杂度。函数如下
int hello(int n){
if(n==0)
return 0;
for(int i=0;i<n;i++){
for(int j=0;j<n * n;j++){
System.out.println("HELLO");
}
}
return hello(n-1);
}
我迷茫的步骤是hello(n-1)。我不知道如何评估像该代码这样的复杂性。如果你一步一步地告诉这个问题的解决方案,我将不胜感激。提前致谢。
设递归函数的 运行ning 时间用 T(n) 表示,其中 n 是输入的大小。在递归关系中,输入大小为 n 的递归函数的 运行ning 时间用 n 的较低值的 运行ning 时间表示。你的情况
T(n) = T(n-1) + n^3(嵌套循环 运行 for O(n^3))
= T(n-2) + (n-1)^3 + n^3
= T(n-3) + (n-2)^3 + (n-1)^3 + n^3
..... ...... .......
= T(0) + 1^3 + 2^3 + 3^3 + ...... + (n-2)^3 + (n-1)^3 + n^3
= 1^3 + 2^3 + 3^3 + ....... + (n-2)^3 + (n-1)^3 + n^3
=
= O(n^4)
我们可以知道它的复杂度为 O(n^4),因为一旦我们解决了它,我们将忽略方程中所有具有较低指数的常数和变量,而 n^4 将是 n 的最高次方。
以防万一你听说过求解递推关系的大定理。并想知道如何使用它来查找这种情况的时间复杂度。你不能,因为它不是 T(n) = a*T(n/b) + f(n)
.
如果您能够以某种方式将其转换为那种形式,它可能会起作用。不是最好的选择,因为我们已经有众所周知的身份可以在这种情况下使用。 Master Theorem 是一个工具而不是负担,尽可能使用它,否则使用最适合的方法。