問題描述:稀疏矩陣轉置
設計思路:稀疏矩陣中存在大量非零元素,直接轉置執行時間較高。因而採用三元組表示。按照壓縮的概念,只儲存稀疏矩陣中的非零元素,除了儲存非零元素的值之外,還必須同時記下它所在的行列位置。三元組表示法是用乙個具有三個資料域的一維陣列表示稀疏矩陣,每一行有三個字段,分別該元素的行下表、列下表和值。設a,b分別為某稀疏矩陣轉置前後的三元組表,i為行下標,j為列下標,v味元素值。變數m為稀疏矩陣行數,n為稀疏矩陣列數,tu為非零元素個數。本演算法要求把a中行下標、列下標交換後送到b中,並且使b中行下表仍按遞增順序存放。
資料結構:
i:行下標
j:列下標
v:元素值
tu:非零元素個數
a:轉置前矩陣
b:轉置後矩陣
ai:轉置前三元組
bi:轉置後三元組
t[0]:工作陣列
transmat ( a , b)
if( tu!=0) then
end(p)
end(col)}
return
測試用例:稀疏矩陣元素為
a[0][0]=3;
a[0][4]=7;
a[1][2]=-1;
a[2][0]=-1;
a[2][1]=-2;
a[4][3]=2;
測試結果:
轉置前矩陣a:
3 0 0 0 7
0 0 -1 0 0
-1 -2 0 0 0
0 0 0 0 0
0 0 0 2 0
工作三元組ai:
1 1 3
1 5 7
2 3 -1
3 1 -1
3 2 -2
5 4 2
工作三元組bi:
1 1 3
1 3 -1
2 3 -2
3 2 -1
4 5 2
5 1 7
轉置後矩陣:
3 0 -1 0 0
0 0 -2 0 0
0 -1 0 0 0
0 0 0 0 2
7 0 0 0 0
第一步:提出問題;
第二步:問題轉換;
第三步:演算法構思;
第四步:偽碼描述;
第五步:**編寫;
第六步:**測試;
第七步:**修正;
《計算機軟體技術基礎》 清華大學出版社 第三版
#includeusing namespace std;
#define n 5
struct node
ai[n*n],bi[n*n],t[1];
int main()
a[0][0]=3;
a[0][4]=7;
a[1][2]=-1;
a[2][0]=-1;
a[2][1]=-2;
a[4][3]=2;
cout<<"轉置前矩陣為"
cout<<"轉置前矩陣等效三元組為"
return 0;
}
稀疏矩陣轉置
輸出稀疏矩陣的轉置矩陣。行列均不大於20 第一行輸入兩個正整數n和m,分別表示矩陣的行數和列數,然後輸入矩陣三元組,最後輸入 0 0 0 表示結束輸入。轉置後的矩陣。include include define maxsize 100 typedef struct triple typedef st...
稀疏矩陣轉置矩陣
num 矩陣a中某列的非零元素的個數 cpot 初值表示矩陣a中某列第乙個非零元素在b中的位置,並有如下遞推 cpot 1 0 cpot col cpot col 1 num col 1 2 col nu end right.const int maxterm 100 struct sparsema...
稀疏矩陣的轉置(矩陣轉置和快速轉置)
實現矩陣的轉置 1.將矩陣的行列值相互轉換。2.將每個三元組中的i和j交換。3.重排三元組之間的次序便可實現矩陣的轉置。void transposesmatrix tsmatrix m,tsmatrix t return transposesmatrix快速轉置的原理是 如果能預先確定矩陣m中每一列...