我知道我的朴素矩阵乘法算法的时间复杂度为 O(N^3)...但是我如何通过我的值表证明这一点?大小是矩阵的行或列长度。对于完整的矩阵大小,请平方。
尺寸 = 100 垫。多。经过时间:0.0199 秒。
尺寸 = 200 垫。多。经过时间:0.0443 秒。
尺寸 = 300 垫。多。经过时间:0.0984 秒。
尺寸 = 400 垫。多。经过时间:0.2704 秒。
尺寸 = 800 垫。多。经过时间:6.393 秒。
这就像查看值表并估计函数图......这些数字和 N^3 之间必须存在某种关系。我怎么理解它呢?
我在下面提供了我的算法。通过计算循环,我已经知道它是 O(N^3) 。我怎么能把它和我上面的值表联系起来呢?
/**
* This function multiplies two matrices and returns the product matrix.
*
* @param mat1
* The first multiplier matrix.
* @param mat2
* The second multiplicand matrix.
* @return The product matrix.
*/
private static double[][] MatMult(double[][] mat1, double[][] mat2) {
int m1RowLimit = mat1.length, m2ColumnLimit = mat2[0].length, innerLimit = mat1[0].length;
if ((mat1[0].length != mat2.length))
return null;
int m1Row = 0, m1Column = 0, m2Row = 0, m2Column = 0;
double[][] mat3 = new double[m1RowLimit][m2ColumnLimit];
while (m1Row < m1RowLimit) {
m2Column = 0;
while (m2Column < m2ColumnLimit) {
double value = 0;
m1Column = 0;
m2Row = 0;
while (m1Column < innerLimit) {
value += mat1[m1Row][m1Column] * mat2[m2Row][m2Column];
m1Column++;
m2Row++;
}
mat3[m1Row][m2Column] = value;
m2Column++;
}
m1Row++;
}
return mat3;
}