首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

矩陣乘法:Java 實現與邏輯解析

     編輯:關於C++

題目描述

輸入兩個矩陣 A (m×s) 和 B (s×n),計算其乘積 C = A × B (m×n)。

算法邏輯

矩陣乘法定義:C[i][j] = Σk=0s-1 A[i][k] * B[k][j]。
三重循環:外層遍歷 A 的行 i,中層遍歷 B 的列 j,內層遍歷公共維度 k 累加乘積。

Java 完整實現

import java.util.Scanner;

public class MatrixMultiplication {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int m = in.nextInt();
        int s = in.nextInt();
        int n = in.nextInt();
        
        int[][] A = new int[m][s];
        int[][] B = new int[s][n];
        int[][] C = new int[m][n];
        
        for (int i = 0; i < m; i++)
            for (int j = 0; j < s; j++)
                A[i][j] = in.nextInt();
                
        for (int i = 0; i < s; i++)
            for (int j = 0; j < n; j++)
                B[i][j] = in.nextInt();
        
        // 矩陣乘法核心
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                int sum = 0;
                for (int k = 0; k < s; k++) {
                    sum += A[i][k] * B[k][j];
                }
                C[i][j] = sum;
            }
        }
        
        // 輸出
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                System.out.print(C[i][j] + " ");
            }
            System.out.println();
        }
    }
}

優化方向

  • 緩存優化: 交換循環順序 (i, k, j) 利用 B 的行訪問局部性,或使用分塊算法。
  • 並行化: 外層循環可並行 (OpenMP / Java Stream)。
  • Strassen 算法: 大矩陣可用 O(n^2.807) 算法。

複雜度

  • 時間:O(m * s * n)
  • 空間:O(m*s + s*n + m*n)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved