Java 嵌套循环递归的大O复杂性

Java 嵌套循环递归的大O复杂性,java,big-o,complexity-theory,Java,Big O,Complexity Theory,准备考试我在一次旧考试中遇到了这个问题: 此函数的最坏情况/big-O复杂性是什么: float foo(float[] A) { int n = A.length; if (n == 1) return A[0]; float[] A1 = new float[n/2]; float[] A2 = new float[n/2]; float[] A3 = new float[n/2]; float[] A4 = new float[n/2];

准备考试我在一次旧考试中遇到了这个问题:

此函数的最坏情况/big-O复杂性是什么:

float foo(float[] A) {
    int n = A.length;
    if (n == 1) return A[0];
    float[] A1 = new float[n/2];
    float[] A2 = new float[n/2];
    float[] A3 = new float[n/2];
    float[] A4 = new float[n/2];

    for (i = 0; i <= (n/2)-1; i++) {
        for (j = 0; j <= (n/2)-1; j++) {
            A1[i] = A[i];
            A2[i] = A[i+j];
            A3[i] = A[n/2+j];
            A4[i] = A[j];
        }
    }

    return foo(A1)
         + foo(A2)
         + foo(A3)
         + foo(A4);
}
float foo(float[]A){
int n=A.长度;
如果(n==1)返回[0];
浮动[]A1=新浮动[n/2];
浮动[]A2=新浮动[n/2];
浮动[]A3=新浮动[n/2];
浮动[]A4=新浮动[n/2];

对于(i=0;i好的,我终于明白了

每次递归时,我们执行的函数调用是上次的4倍,因此,如果我们将递归级别定义为
m
,则每个级别的函数调用数为

每次递归时,我们也会将数组大小减半,因此每个函数调用的工作量是

在每个递归级别,总共完成的工作量为:

事实上,
4^m
(2^m)^2
相同:

因此,工作量可以写为
n^2

logn
递归级别

因此总工作量是
O(n^2*logn)
,这是因为有4个递归调用。

如果只有两个递归调用,那么每个级别的工作量将是


我们不能很好地减少(但如果我的数学正确的话,结果是在
O(n^2)

好的,我终于找到了答案

每次递归时,我们执行的函数调用是上次的4倍,因此,如果我们将递归级别定义为
m
,则每个级别的函数调用数为

每次递归时,我们也会将数组大小减半,因此每个函数调用的工作量是

在每个递归级别,总共完成的工作量为:

事实上,
4^m
(2^m)^2
相同:

因此,工作量可以写为
n^2

logn
递归级别

因此总工作量是
O(n^2*logn)
,这是因为有4个递归调用。

如果只有两个递归调用,那么每个级别的工作量将是


我们不能很好地减少(但如果我的数学正确的话,结果是在
O(n^2)

好的,我终于找到了答案

每次递归时,我们执行的函数调用是上次的4倍,因此,如果我们将递归级别定义为
m
,则每个级别的函数调用数为

每次递归时,我们也会将数组大小减半,因此每个函数调用的工作量是

在每个递归级别,总共完成的工作量为:

事实上,
4^m
(2^m)^2
相同:

因此,工作量可以写为
n^2

logn
递归级别

因此总工作量是
O(n^2*logn)
,这是因为有4个递归调用。

如果只有两个递归调用,那么每个级别的工作量将是


我们不能很好地减少(但如果我的数学正确的话,结果是在
O(n^2)

好的,我终于找到了答案

每次递归时,我们执行的函数调用是上次的4倍,因此,如果我们将递归级别定义为
m
,则每个级别的函数调用数为

每次递归时,我们也会将数组大小减半,因此每个函数调用的工作量是

在每个递归级别,总共完成的工作量为:

事实上,
4^m
(2^m)^2
相同:

因此,工作量可以写为
n^2

logn
递归级别

因此总工作量是
O(n^2*logn)
,这是因为有4个递归调用。

如果只有两个递归调用,那么每个级别的工作量将是


我们不能很好地减少它(但是如果我的数学是正确的,结果是在
O(n^2)

如果你解决这个递归关系,你就能够确定复杂性

T(n) = 4T(n/2) + O(n²)


如果你解决了这个递归关系,你就能确定它的复杂性

T(n) = 4T(n/2) + O(n²)


如果你解决了这个递归关系,你就能确定它的复杂性

T(n) = 4T(n/2) + O(n²)


如果你解决了这个递归关系,你就能确定它的复杂性

T(n) = 4T(n/2) + O(n²)


函数返回什么?它不返回任何东西。它只是一个理论试题的无意义函数。函数返回什么?它不返回任何东西。它只是一个理论试题的无意义函数。函数返回什么?它不返回任何东西。它只是一个理论试题的无意义函数这个函数返回什么?它什么都不返回。它只是一个理论试题的无意义函数。