1. 程式人生 > 實用技巧 >增量矩陣相乘 Java演算法實現

增量矩陣相乘 Java演算法實現

題目描述:

增量矩陣是一個元素為初始值initialValue的遞增值的矩陣
// 例如,如果初始值initialValue=1,且維度為rows=3 和 columns =3,
// 則增量矩陣為:
// 1 2 3
// 4 5 6
// 7 8 9
// 寫一個演算法,將原始增量矩陣與其轉置陣相乘。

// 輸入
// 函式/方法的輸入包括三個引數:一個表示初始值的正整數 initialValue,表示增量矩陣中行數的正整數,和表示增量矩陣中列樹的正整數。
// 輸出
// 返回由增量矩陣和其轉置矩陣相乘得到的一個二維矩陣

// 示例
// 輸入:
// initialValue =1 rows = 3 columns = 3
// 輸出:
// 14 32 50
// 32 77 122

// 20 122 194
// 解釋 對於
// for initialValue =1 rows = 3 columns = 3的情況,增量矩陣為
// 1 2 3
// 4 5 6
// 7 8 9
// 其轉置矩陣為
// 1 4 7
// 2 5 8
// 3 6 9
// 因此,將由此產生的乘積矩陣為
// 14 32 50
// 32 77 122
// 50 122 194

// case1: 3 4 2 | case2: 4 3 2
// 25 39 53 67 |
// 39 61 83 105 | 41 59 77
// 53 83 113 143 | 59 85 111
// 67 105 143 181 | 77 111 145

java 核心程式碼

static void tranposeMultMatrix(int firstValue, int rows, int columns) {
int temp = firstValue;
int newColums = 0;
int newRows = 0;
//處理不是標準矩陣的相乘演算法
if (rows > columns) {
newColums = rows;
newRows = rows;
} else if (rows < columns) {
newRows = columns;
newColums = columns;
} else {
newColums = columns;
newRows = rows;
}


int[][] oldArr = new int[newRows][newColums];
int[][] newArr = new int[newRows][newColums];
int[][] result = new int[newRows][newColums];

//存入原來的矩陣數字
for (int i = 0; i < newRows; i++) {
for (int j = 0; j < newColums; j++) {
oldArr[i][j] = temp;
if (i >= rows || j >= columns)
oldArr[i][j] = 0;
else
temp++;
}
}

//存入轉化之後的矩陣
temp = firstValue;
for (int i = 0; i < columns; i++) {
for (int j = 0; j < rows; j++) {
newArr[i][j] = temp;
temp += columns;
}
temp = newArr[i][0] + 1;
}

//新舊矩陣相乘
for (int i = 0; i < oldArr.length; i++) {
for (int j = 0; j < oldArr[i].length; j++) {
result[i][j] = 0;
for (int k = 0; k < newArr[i].length; k++) {
result[i][j] += oldArr[i][k] * newArr[k][j];
}
}
}

//輸出矩陣
for (int i = 0; i < result.length; i++) {
for (int j = 0; j < result[i].length; j++) {
System.out.print(result[i][j] + " ");
}
System.out.println();
}
}

呼叫
public static void main(String[] args) {
tranposeMultMatrix(4, 3, 2);
}

經過測試 ,上面的三個用例均無問題。

如有優化或者問題,請及時指出。