乙個稀疏矩陣m用三元組表示,設計高效率的演算法將矩陣m轉置後得到矩陣n
1.我們先對矩陣m的順序表進行遍歷,用陣列num記錄m矩陣每一列非零元素分別有多少個,這也就是逆矩陣n每一行的非零元素有多少個.
2.利用逆矩陣n每一行的非零元素有多少個這個資訊,我們就可以求出逆n矩陣中每一行非零元素在順序表中的位置序號,每一行首非零元素在順序表中的位置序號是上一行首非零元素的位置序號加上上一行元素的數量.我們用陣列cpot記錄.即 cpot[row]=cpot[row-1]+num[row-1];
3.我們再一次遍歷矩陣m中的元素,當我們遍歷到乙個元素時,利用元素在m中的列號和copt儲存的逆矩陣n中每行非零元的位置序號,就能求得轉置元素在逆矩陣n順序表中的序號,它在逆矩n陣順序表中的位置就是pos=cpot[元素在m中的列號]++;注意使用後位置序號要加1,這是下次存放同一行的元素位置.有了位置序號,就將轉置元素存入順序表的該序號位置中.這樣一次遍歷順序表m,就完成了轉置.
//線性表0單元不用是為了便於理解演算法
//元素型別
typedef
int elemtype;
typedef
struct
triple;
//三元組
typedef
struct
tsmatrix;
//稀疏矩陣(三元組壓縮表示)
//矩陣快速轉置演算法
tsmatrix fasttransposesmatrix
(tsmatrix m)
;//每行元素數量,零元位置不用
int row;
//行for
(int i=
1;i<=t;i++
)//遍歷順序表中的所有元素
int cpot[m+1]
;//每行元素第乙個的位置,零元位置不用
cpot[1]
=1;//第一行第乙個元素的位置是1
//利用上面求到的轉置後每行元素的數量求出每行第乙個元素在順序表中的位置
for(row=
2;row<=n;row++
) tsmatrix t;
//轉置後的矩陣
for(
int k=
1;k<=t;k++
)//轉置後存入順序表相應位置
t.mu=m.nu;
//轉置後矩陣行數
t.nu=m.mu;
//轉置後矩陣列數
t.tu=m.tu;
//轉置後矩陣非零元素個數
return t;
//返回轉置後的矩陣
}
三元組稀疏矩陣快速轉置
稀疏矩陣是只儲存非零元的行值 列值 元素值 data 0 來儲存矩陣的行數 列數 非零元個數 struct position struct list void quick transpose list l,list s 記錄每一列第乙個非零元的位置 int col num l.data 0 col ...
稀疏矩陣三元組的快速轉置
include include using namespace std define maxsize 1024 define elemtype int define status int 三元組 typedef struct tripletriple 由三元組組成的表 typedef struct ...
三元組矩陣轉置
include include define maxsize 100 非零元的最大個數 define elentype int define status int 返回值型別 define ok 1 define error 0 define overflow 1 稀疏矩陣的三元組儲存結構 type...