私の単純な行列乗算アルゴリズムの時間の複雑さは O(N^3) であることはわかっています... しかし、値の表を使用してそれを証明するにはどうすればよいでしょうか? サイズは、行列の行または列の長さです。完全なマトリックスサイズの場合は2乗します。
サイズ = 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;
}