2010年8月8日 星期日

[ 資料結構 小學堂 ] 陣列結構 : 轉置矩陣


前言 :
- 假設 A 為 mxn 矩陣, 則 At 為 nxm 矩陣, 對每一個 A(i,j) = At(j,i) 則稱At 為 A 的轉置矩陣.
- 而AT之轉換矩陣很明顯的又是A. 所以對矩陣作兩次轉置會得到原來矩陣.
- 若矩陣C是兩矩陣A和B之乘積,則C的轉換矩陣會等於A和B之轉換矩陣調換順序後之乘積。也就是說,若 :


範例代碼 :
* ch02.h 代碼 :
  1. #include   
  2. using namespace std;  
  3.   
  4. /* 
  5. * As ch02_03.cpp 
  6. * Do matrix reverse. matrixA[MxN] -->Reverse-> matrixRA[NxM] 
  7. */  
  8. void MatrixReverse(int* matrixA, int* matrixRA, int M, int N);  
* ch02.cpp 代碼 :
  1. #include "ch02.h"  
  2.   
  3. void MatrixReverse(int* matrixA, int* matrixRA, int M, int N) {  
  4.     if(M<=0 || N <=0) {  
  5.         cout << "[ 錯誤:矩陣維數不可以小於等於0 ]" << endl;  
  6.     }  
  7.     for(int i=0;i
  8.         for(int j=0;j
  9.             matrixRA[j*M+i] = matrixA[i*N+j];  
  10. }  
* 設置與顯示矩陣內容代碼 :
  1. #include "ch02.h"  
  2. /* 
  3. * 設置矩陣 matrix[MxN] 
  4. */  
  5. void _setMatrix(int* matrix, int M, int N) {  
  6.     cout << "[ 請輸入矩陣內容 ]" << endl;  
  7.     for(int i=1; i<= M ; i++) {  
  8.         for(int j=1; j<=N ; j++) {  
  9.             cout << "m" << i << j << "=";  
  10.             cin >> matrix[(i-1)*N +(j-1)];  
  11.         }  
  12.     }  
  13. }  
  14.   
  15. /* 
  16. * 顯示矩陣 matrix[MxN] 並有前置訊息(message)顯示 
  17. */  
  18. void _showMatrix(char* message, int* matrix, int M, int N) {  
  19.     cout << message << endl;  
  20.     for(int i=0; i
  21.         for(int j=0; j
  22.             cout << matrix[i*N + j] << "\t";  
  23.         cout << endl;  
  24.     }  
  25. }  
* 呼叫矩陣轉置API 範例代碼 :
  1. //Do Matrix Reverse  
  2. int M,N;  
  3. cout << "[ 請輸入MxN 矩陣的維度 ]" << endl;  
  4. cout << "請輸入維度M: ";  
  5. cin >> M;  
  6. cout << "請輸入維度N: ";  
  7. cin >> N;  
  8. int *arrA = new int[M*N];  
  9. int *arrB = new int[M*N];  
  10. _setMatrix(arrA, M, N);  
  11. _showMatrix("[ 輸入矩陣內容為 ]",arrA, M, N);  
  12. //進行矩陣轉置  
  13. MatrixReverse(arrA, arrB, M, N);  
  14. _showMatrix("[ 轉置後矩陣內容為 ]",arrB, N, M);  

執行結果 :
請輸入維度M: 4
請輸入維度N: 3
[ 請輸入矩陣內容 ]
m11=1
m12=2
m13=3
m21=4
m22=5
m23=6
m31=7
m32=8
m33=9
m41=10
m42=11
m43=12
[ 輸入矩陣內容為 ]
1 2 3
4 5 6
7 8 9
10 11 12
[ 轉置後矩陣內容為 ]
1 4 7 10
2 5 8 11
3 6 9 12
This message was edited 4 times. Last update was at 16/03/2010 17:12:05

沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...