const bool Test_Matrix_Submatrix() { const TMatrix4d kA4d{ 1.00, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00, 9.00, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0}; const TMatrix3d kB4d{ 1.00, 3.00, 4.00, 9.00, 11.0, 12.0, 13.0, 15.0, 16.0}; const TMatrix4f kA4f{ 1.00f, 2.00f, 3.00f, 4.00f, 5.00f, 6.00f, 7.00f, 8.00f, 9.00f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f}; const TMatrix3f kB4f{ 1.00f, 3.00f, 4.00f, 9.00f, 11.0f, 12.0f, 13.0f, 15.0f, 16.0f}; const bool kbPass4d = Equal(Submatrix(TMatrix3d(), kA4d, 2, 2), kB4d, s_kdEpsilon); const bool kbPass4f = Equal(Submatrix(TMatrix3f(), kA4f, 2, 2), kB4f, s_kfEpsilon); const TMatrix3d kA3d{ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0}; const TMatrix2d kB3d{ 1.0, 3.0, 7.0, 9.0}; const TMatrix3f kA3f{ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; const TMatrix2f kB3f{ 1.0f, 3.0f, 7.0f, 9.0f}; const bool kbPass3d = Equal(Submatrix(TMatrix2d(), kA3d, 2, 2), kB3d, s_kdEpsilon); const bool kbPass3f = Equal(Submatrix(TMatrix2f(), kA3f, 2, 2), kB3f, s_kfEpsilon); return( kbPass4d && kbPass4f && kbPass3d && kbPass3f); }
const bool Test_Matrix_FirstMinor() { const TMatrix4d kA4d{ 1.00, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00, 9.00, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0}; const double kB4d = Determinant(Submatrix(TMatrix3d(), kA4d, 3, 4)); const TMatrix4f kA4f{ 1.00f, 2.00f, 3.00f, 4.00f, 5.00f, 6.00f, 7.00f, 8.00f, 9.00f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f}; const float kB4f = Determinant(Submatrix(TMatrix3f(), kA4f, 1, 2)); const bool kbPass4d = Equal(FirstMinor(kA4d, 3, 4), kB4d, s_kdEpsilon); const bool kbPass4f = Equal(FirstMinor(kA4f, 1, 2), kB4f, s_kfEpsilon); const TMatrix3d kA3d{ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0}; const double kB3d = Determinant(Submatrix(TMatrix2d(), kA3d, 2, 2)); const TMatrix3f kA3f{ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}; const float kB3f = Determinant(Submatrix(TMatrix2f(), kA3f, 3, 1)); const bool kbPass3d = Equal(FirstMinor(kA3d, 2, 2), kB3d, s_kdEpsilon); const bool kbPass3f = Equal(FirstMinor(kA3f, 3, 1), kB3f, s_kfEpsilon); return( kbPass4d && kbPass4f && kbPass3d && kbPass3f); }
Submatrix computeLargestSumSubmatrix(int **matrix, int n) { if ((matrix == nullptr) || (n == 0)) { return Submatrix(-1, -1, -1, -1); } Submatrix largestSumSubmatrix(-1, -1, -1, -1); std::unordered_map<Submatrix, int> submatrixSums; int largestSum = std::numeric_limits<int>::min(); computeLargestSumSubmatrix(matrix, 0, 0, n - 1, n - 1, largestSumSubmatrix, largestSum, submatrixSums); return largestSumSubmatrix; }