C 稀疏矩陣轉置

2021-08-29 20:49:40 字數 2084 閱讀 6536

問題描述:稀疏矩陣轉置

設計思路:稀疏矩陣中存在大量非零元素,直接轉置執行時間較高。因而採用三元組表示。按照壓縮的概念,只儲存稀疏矩陣中的非零元素,除了儲存非零元素的值之外,還必須同時記下它所在的行列位置。三元組表示法是用乙個具有三個資料域的一維陣列表示稀疏矩陣,每一行有三個字段,分別該元素的行下表、列下表和值。設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中每一列...