資料結構:陣列,稀疏矩陣,矩陣的壓縮。應用:矩陣的轉置,矩陣相乘
稀疏矩陣
三元組順序表用於儲存壓縮後的稀疏矩陣
- 順序儲存表示
#define MAXSIZE 125000//設定非零元素的最大個數為125000
typedef struct{
int i;//元素行號
int j;//元素列號
Element e;//元素值
}Tripe;
typedef struct {
Tripe data[MAXSIZE+1];
int mu;//總行數
int nu;//總列數
int tu;//非零元個數
}TsMatrix;
三元組表的順序儲存結構
typedef struct {
Tripe data[Maxsize+1];
int nu;//矩陣總列數
int mu;//矩陣總行數
int tu;//矩陣中非零元素的個數
}TSMatrix
typedef struct{
int i;
int j;
Elementtype e;
}Tripe;
帶輔助向量的三元組
主要用途
- 便於高效訪問稀疏矩陣中任一非零元素
i | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
NUM(i) | ||||||
POS(i) |
- 其中NUM用於儲存每列非零元的個數
- POS用來記錄每列第一個非零元素在新三元組中的位置
pos(1)=1
pos(i)=pos(i-1)+NUM(i-1)
//稀疏矩陣的轉置
演算法思路:
1.將每個三元組中i和j互相調換,再排序,但排序的時間複雜度
至少為o(tu^2)
2.依次從小到大找到最小的i,再轉置
3.利用三元組的輔助向量精確放置轉置後的元素
輔助元素的求解
NUM[i]表示第i列中的非零元素的個數
POS[i]表示第i列第一非零元素在新的三元組中行數
//求解過程如下
POS[1]=1;
for(int i=1;i<=M.tu;i++)
num[M.data[i].j]++;//求解列的NUM值
for(int i=2;i<=M.nu;i++)
POS[i]=POS[i-1]+NUM[i-1];//求解POS的值
全部演算法展示
int FastTransposeSMatrx(TSMatirx M,TSMatirx *T)
{
int col;
int *NUM,*POS;
NUM=(int *)malloc((M.nu+1)*sizeof(int));
POS=(int *)malloc((M.nu+1)*sizeof(int));//動態陣列
T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;
if(T.tu)
{
for(col=1;col<=M.nu;col++)NUM[col]=0;
for(int i=1;i<=M.tu;i++)NUM[M.data[i].j]++;
}//這裡實際是在判斷了T.tu非空
POS[1]=1;
for(int i=2;i<=M.nu;i++)
POS[i]=POS[i-1]+NUM[i-1];
for(int p=1;p<=M.tu;P++)
{
col=M.data[p].j;
q=POS[col];
T.data[q].i=M.data[p].j;
T.data[q].j=M.data[p].i;
T.data[q].e=M.data[p].e
POS[col]++;
}
return 0;
}
相關文章
- 稀疏矩陣轉置矩陣
- 矩陣相乘矩陣
- 稀疏矩陣矩陣
- 資料結構之陣列和矩陣--矩陣&不規則二維陣列資料結構陣列矩陣
- 資料結構(一)-稀疏矩陣資料結構矩陣
- 巨大的矩陣(矩陣加速)矩陣
- Hadoop 2.6 使用Map Reduce實現矩陣相乘1 矩陣轉置Hadoop矩陣
- 矩陣轉置矩陣
- 生成螺旋矩陣(方陣、矩陣)矩陣
- 矩陣和陣列矩陣陣列
- OpenMP版本矩陣相乘矩陣
- 鄰接矩陣、度矩陣矩陣
- 奇異矩陣,非奇異矩陣,偽逆矩陣矩陣
- 3D圖形:矩陣的行列式,矩陣的逆、正交矩陣、齊次矩陣3D矩陣
- 矩陣中最大的二維矩陣矩陣
- 求任意矩陣的伴隨矩陣矩陣
- 用三列二維陣列表示的稀疏矩陣類陣列矩陣
- 矩陣置0矩陣
- 置換矩陣矩陣
- 機器學習中的矩陣向量求導(五) 矩陣對矩陣的求導機器學習矩陣求導
- 矩陣矩陣
- 【scipy 基礎】--稀疏矩陣矩陣
- 旋轉矩陣矩陣
- 矩陣旋轉矩陣
- 演算法-陣列與矩陣演算法陣列矩陣
- 理解矩陣矩陣
- 矩陣分解矩陣
- Numpy 矩陣矩陣
- 穿越矩陣矩陣
- 混淆矩陣矩陣
- 魔方矩陣矩陣
- 海浪矩陣矩陣
- 8.6 矩陣?矩陣
- 螺旋矩陣矩陣
- 找矩陣矩陣
- 矩陣乘法矩陣
- CUDA版本稀疏矩陣向量乘矩陣
- OpenMP 版本稀疏矩陣向量乘矩陣