菜单

矩阵运算

相关源文件

本文档提供了 Java 算法仓库中实现的矩阵操作的技术文档。矩阵操作包括对数字的二维数组进行转换、计算和算法处理。

矩阵表示

在此代码库中,矩阵以 Java 的二维数组形式表示

  • 整数矩阵:int[][]
  • 双精度矩阵:double[][]

大多数实现都包含输入验证,以检查空矩阵或空矩阵。

来源:src/main/java/com/thealgorithms/matrix/MatrixTranspose.java31-45 src/main/java/com/thealgorithms/matrix/MirrorOfMatrix.java23-35

矩阵操作概述

来源:src/main/java/com/thealgorithms/matrix/MatrixTranspose.java src/main/java/com/thealgorithms/matrix/MirrorOfMatrix.java src/main/java/com/thealgorithms/matrix/RotateMatrixBy90Degrees.java src/main/java/com/thealgorithms/matrix/InverseOfMatrix.java src/main/java/com/thealgorithms/matrix/MedianOfMatrix.java src/main/java/com/thealgorithms/matrix/matrixexponentiation/Fibonacci.java

基本矩阵变换

矩阵转置

转置操作将矩阵沿其对角线翻转,交换行与列。

实现细节

  • 函数:MatrixTranspose.transpose(int[][] matrix)
  • 创建一个新矩阵,其维度已交换(行变为列)
  • 遍历原始矩阵并用交换的索引赋值:transposedMatrix[i][j] = matrix[j][i]

来源:src/main/java/com/thealgorithms/matrix/MatrixTranspose.java31-45 src/test/java/com/thealgorithms/matrix/MatrixTransposeTest.java12-33

矩阵镜像

镜像操作通过反转每一行来创建矩阵的反射。

实现细节

  • 函数:MirrorOfMatrix.mirrorMatrix(double[][] originalMatrix)
  • 保留原始维度
  • 使用 MatrixUtil.reverseRow() 实用方法反转每一行

来源:src/main/java/com/thealgorithms/matrix/MirrorOfMatrix.java23-35 src/test/java/com/thealgorithms/matrix/MirrorOfMatrixTest.java9-52

矩阵旋转

将方阵顺时针旋转90度。

实现细节

  • 函数:Rotate.rotate(int[][] a)
  • 两步过程
    1. 转置矩阵(交换主对角线上的元素)
    2. 反转行(水平翻转矩阵)
  • 该操作是原地执行的(修改原始矩阵)

来源:src/main/java/com/thealgorithms/matrix/RotateMatrixBy90Degrees.java49-72

复杂矩阵操作

矩阵逆

使用高斯消元法计算方阵的逆矩阵。

实现细节

  • 函数:InverseOfMatrix.invert(double[][] a)
  • 使用部分主元高斯消元法
  • 实现步骤
    1. 初始化单位矩阵
    2. 通过 gaussian() 辅助方法执行高斯消元
    3. 执行反向代入法计算逆矩阵
    4. 返回结果逆矩阵

来源:src/main/java/com/thealgorithms/matrix/InverseOfMatrix.java12-103 src/test/java/com/thealgorithms/matrix/InverseOfMatrixTest.java8-27

统计操作

矩阵中位数

计算矩阵中所有元素的中位数。

实现细节

  • 函数:MedianOfMatrix.median(Iterable<List<Integer>> matrix)
  • 进程
    1. 将矩阵展平为一维列表
    2. 使用 Collections.sort() 对列表进行排序
    3. 找到中间元素并将其作为中位数返回

来源:src/main/java/com/thealgorithms/matrix/MedianOfMatrix.java16-31 src/test/java/com/thealgorithms/matrix/MedianOfMatrixTest.java10-34

矩阵应用

用于斐波那契数列的矩阵幂运算

使用矩阵幂运算高效计算斐波那契数列。

实现细节

  • 函数:Fibonacci.fib(int n)
  • 利用数学性质,即矩阵 [[1,1],[1,0]] 的 n 次方会得到包含斐波那契数列的矩阵
  • 实现分治法以进行高效的矩阵幂运算
    • 对于偶数 n:F(n) = F(n/2)²
    • 对于奇数 n:F(n) = F(n/2)² × [[1,1],[1,0]]

来源:src/main/java/com/thealgorithms/matrix/matrixexponentiation/Fibonacci.java10-42

常见实现模式

代码库中的大多数矩阵操作遵循类似模式

  1. 输入验证:

    • 检查输入矩阵是否为空
    • 验证矩阵是否非空
    • 必要时验证矩阵维度
  2. 处理方法:

    • 某些操作创建并返回新矩阵(转置、镜像、逆)
    • 其他操作原地修改原始矩阵(旋转)
  3. 迭代模式:

    • 行优先处理(首先遍历行)
    • 列优先处理(首先遍历列)
    • 逐单元格操作

来源:src/main/java/com/thealgorithms/matrix/MatrixTranspose.java31-34 src/main/java/com/thealgorithms/matrix/MirrorOfMatrix.java23-24 src/main/java/com/thealgorithms/matrix/RotateMatrixBy90Degrees.java49-72 src/main/java/com/thealgorithms/matrix/InverseOfMatrix.java12-47