矩阵的确定

dat*_*ili 2 c# java algorithm

假设有二维数组

int a[][]=new int[4][4];
Run Code Online (Sandbox Code Playgroud)

我试图寻找矩阵的行列式请帮助我知道如何找到它的数学,但我试图找到它在programaticaly我使用的语言Java和C#,但在这种情况下,我认为C++也将是有益的

pol*_*nts 8

如果你被固定为4x4,最简单的解决方案就是硬编码公式.

public double determinant(int[][] m) {
  return

  m[0][3] * m[1][2] * m[2][1] * m[3][0] - m[0][2] * m[1][3] * m[2][1] * m[3][0] -
  m[0][3] * m[1][1] * m[2][2] * m[3][0] + m[0][1] * m[1][3] * m[2][2] * m[3][0] +
  m[0][2] * m[1][1] * m[2][3] * m[3][0] - m[0][1] * m[1][2] * m[2][3] * m[3][0] -
  m[0][3] * m[1][2] * m[2][0] * m[3][1] + m[0][2] * m[1][3] * m[2][0] * m[3][1] +
  m[0][3] * m[1][0] * m[2][2] * m[3][1] - m[0][0] * m[1][3] * m[2][2] * m[3][1] -
  m[0][2] * m[1][0] * m[2][3] * m[3][1] + m[0][0] * m[1][2] * m[2][3] * m[3][1] +
  m[0][3] * m[1][1] * m[2][0] * m[3][2] - m[0][1] * m[1][3] * m[2][0] * m[3][2] -
  m[0][3] * m[1][0] * m[2][1] * m[3][2] + m[0][0] * m[1][3] * m[2][1] * m[3][2] +
  m[0][1] * m[1][0] * m[2][3] * m[3][2] - m[0][0] * m[1][1] * m[2][3] * m[3][2] -
  m[0][2] * m[1][1] * m[2][0] * m[3][3] + m[0][1] * m[1][2] * m[2][0] * m[3][3] +
  m[0][2] * m[1][0] * m[2][1] * m[3][3] - m[0][0] * m[1][2] * m[2][1] * m[3][3] -
  m[0][1] * m[1][0] * m[2][2] * m[3][3] + m[0][0] * m[1][1] * m[2][2] * m[3][3];
}
Run Code Online (Sandbox Code Playgroud)

对于一般的N×N ,问题是相当硬,在顺序的各种算法O(N!),O(N^3)等等.

参考

相关问题

  • 你很疯狂 (2认同)
  • 至少对于'小'矩阵来说,这并不像人们想象的那么苛刻,特别是如果你考虑代码生成器; 对于"大"矩阵,应该使用一种更复杂的算法,因为渐近时间复杂度变得更加重要 (2认同)