将两个矩阵相乘的 Java 程序

2024年12月7日 | 阅读时长 10 分钟

矩阵乘法是编程中的核心概念。我们可以使用简单的嵌套 for 循环方法到高级方法在 Java 中执行矩阵乘法。嵌套 for 循环方法的时间复杂度为 O(n3)。

使用 Strassen 算法可以改进矩阵乘法的时间复杂度,其时间复杂度为 O(nlog7)。

有以下几种方法可以进行两个矩阵的乘法运算

  • 使用 for 循环
  • 使用 Scanner 类
  • 使用 Java 线程
  • 使用 Java Stream
  • 使用 Apache Commons Math 库

如何执行矩阵乘法?

要计算两个矩阵的乘积,我们首先需要检查以下两个事实,否则矩阵乘法是不可能的。假设我们有两个矩阵 A 和 B,它们的维度分别为 m×np×q

  1. 第一个矩阵 (A) 的列数必须等于第二个矩阵 (B) 的行数。这意味着条件 n=p 必须为真。
  2. 结果矩阵:第一个矩阵 (A) 的行数 * 第二个矩阵 (B) 的列数。因此,结果矩阵将是:m×q

例如,3×2 和 2×4 的乘法是可能的,因为它满足上述两个条件,但 3×3 和 2×4 的乘法是不可能的。

在矩阵乘法中,第一个矩阵的一行元素与第二个矩阵的所有列通过二元运算符 (*) 相乘。

  • 取两个要相乘的矩阵(例如 A 和 B)。
  • 检查这两个矩阵是否兼容进行乘法运算。
  • 创建一个新矩阵来存储两个矩阵的乘积(结果)。
  • 遍历两个矩阵的每个元素并进行乘法运算。将此乘积存储在新矩阵的相应索引处。
  • 打印结果矩阵。
Matrix Multiplication in Java

让我们看一个简单的例子,将两个 3 行 3 列的矩阵相乘。

使用 for 循环

文件名:MatrixMultiplicationExample.java

立即测试

输出

6 6 6 
12 12 12 
18 18 18 

使用 Java Scanner 类

文件名:MatrixMultiplicationScanner.java

输出

Enter Number of rows and columns for first matrix:
3 3
Enter elements of first matrix:
1 1 1
2 2 2
3 3 3
Enter Number of rows and columns for second matrix:
3 3
Enter elements of second matrix:
1 1 1
2 2 2
3 3 3
Product of the two matrices:
6 6 6 
12 12 12 
18 18 18

使用 Java 线程

文件名:ThreadedMatrixMultiplication.java

输出

First Matrix:
1 1 1 
2 2 2 
3 3 3 
Second Matrix:
1 1 1 
2 2 2 
3 3 3 
Resultant Matrix:
6 6 6 
12 12 12 
18 18 18

使用 Java Stream

文件名:MatrixMultiplication.java

输出

Matrix A:
[1, 1, 1]
[2, 2, 2]
[3, 3, 3]
Matrix B:
[1, 1, 1]
[2, 2, 2]
[3, 3, 3]
Product Matrix:
[6, 6, 6]
[12, 12, 12]
[18, 18, 18]

使用 Apache Commons Math 库

文件名:MultiplyMatricesUsingApache.java

输出

Matrix A:
1.0 1.0 1.0 
2.0 2.0 2.0 
3.0 3.0 3.0 
Matrix B:
1.0 1.0 1.0 
2.0 2.0 2.0 
3.0 3.0 3.0 
Matrix Product:
6.0 6.0 6.0 
12.0 12.0 12.0 
18.0 18.0 18.0

Java 程序:两个矩阵相乘的选择题

1. 标准矩阵乘法算法的时间复杂度是多少?

  1. O(n)
  2. O(n^2)
  3. O(n3)
  4. O(log n)

答案:C

解释:标准矩阵乘法算法的时间复杂度为 O(n^3),其中 'n' 是矩阵的行数或列数。


2. 以下哪项陈述最能描述高效地相乘两个矩阵的方法?

  1. 遍历矩阵的每个元素并执行乘法。
  2. 分而治之法。
  3. 使用动态规划优化乘法。
  4. Strassen 算法。

答案:D

解释:Strassen 算法是一种高效的分而治之算法,用于矩阵乘法。


3. 将一个 m x n 大小的矩阵与另一个 p x q 大小的矩阵相乘时,结果矩阵的维度将是多少?

  1. m x p
  2. n x q
  3. m x q
  4. p x n

答案:A

解释:矩阵相乘时,结果矩阵的维度将等于第一个矩阵的行数乘以第二个矩阵的列数。


4. 以下哪种 Java 数据结构通常用于表示矩阵?

  1. ArrayList
  2. LinkedList
  3. Array
  4. Stack

答案:C

解释:二维数组通常用于在 Java 中表示矩阵。


5. 考虑以下代码片段

结果矩阵的维度将是多少?

  1. 2 x 2
  2. 2 x 3
  3. 3 x 2
  4. 3 x 3

答案:A

解释:两个 2x2 矩阵相乘的结果矩阵的维度将是 2x2。


下一个主题Java 程序