矩阵乘法Big O表示法

时间:2019-02-11 21:55:05

标签: java big-o computer-science

我有一个问题,关于这段代码的最佳情况和大O表示法的最坏情况。在我看来,这两种情况都应为O(n ^ 3),但有些人不同意。

public int [][] multiply (int [][] A, int 
 [][] B, int n) {   
int [][] C = new int[n][n]; - 1 ( ignored )
for(int i=0; i<n; i++) {        - n 
  for(int j=0; j<n; j++) {  - n 
     if(A[i][j ]!=0) {  - 1 ( ignored )
         for (int k=0; k<n; k++) {   - n
              C[i][k] += A[i][j]*B[j][k]; - 
        }
      }
     }
   }
 return C; 

}

1 个答案:

答案 0 :(得分:0)

在平均和最差情况下,矩阵乘法确实需要O(n ^ 3)时间才能运行。对于分别为m x n和n x p的2个矩阵,将总共进行m n p个计算(为简单起见,为n ^ 3个),在所得矩阵中的每个条目对应一个。最好的情况是,当程序看到至少一个矩阵为零矩阵(矩阵中的所有条目均为0)时,取决于程序执行的操作。如果可以找到零矩阵,则可以使程序短路。在这种情况下,运行时间将为O(n ^ 2)(最多只需扫描几个n x n矩阵),这是矩阵乘法可以实现的最佳时间。如果无法使用此优化,则无论如何该程序都将以O(n ^ 3)运行。无论哪种方式,由于Big-O表示法的定义,您仍然可以说最好的情况是O(n ^ 3),但这对大多数人来说并不重要。

相关问题