稀疏矩阵的转置
2014-06-24 15:59
302 查看
//稀疏矩阵的转置
//使用了两个辅助数组
//num : num[j] : 矩阵A中第j列非零元素的个数
//cpot : cpot[j]: 矩阵A中第j列的第一个非零元素在其转置矩阵B的三元组顺序表的位置。
//推出2个规则:
//1 cpot[1] = 1;
//2 cpot[j] = cpot[j-1]+num[j-1];
//算法思路:
//根据1,2规则计算num数组和cpot数组
//根据cpot数组的指示求转置,将A的三元组顺序表中每个元素直接放入B的三元组顺序表中的适当位置.
#define max 100
struct element
{
int row,col; //行下标,列下标
int value; //值
};
struct triple
{
int m; //行数
int n; //列数
int t; //非0元素个数
element list[max+1]; //存放的位置
};
void transpos(triple &A,triple &B)
{//求A的转置数组B
int num[max+1]; //A每列非0元素的个数
int cpot[max+1];//A的某列非0元素在B的三元组中的位置
//基本信息的复制
B.m = A.n;
B.n = A.m;
B.t = A.t;
if(B.t>0)
{//如果存在非0的元素,这个时候才需要转置
//初始化num数组 num[j] : j列中非0元素的个数
//初始化
for(j=1;j<=A.n;j++)
{
num[j] = 0;
}
//求A中每一列中非0元素的个数
for(j=1;j<=A.t;j++)
{
num[A.list[j].col]++; //
}
//num已经初始化好了
//初始化cpot;
cpot[1] = 1;
for(j=2;j<=A.n;j++)
{
cpot[j] = cpot[j-1] +num[j-1];
}
//cpot也初始化好了
//求转置
for(p=1;p<=A.t;p++)
{
j = A.list[p].col; //j是某元素的列数
i = cpot[j]; //i是A的j列应该存储在B的三元组的首位
B.list[i].row = A.list[p].col;
B.list[i].col = A.list[p].row;
B.list[i].data =A.list[p].value;
cpot[j]++;
}
}
}
//使用了两个辅助数组
//num : num[j] : 矩阵A中第j列非零元素的个数
//cpot : cpot[j]: 矩阵A中第j列的第一个非零元素在其转置矩阵B的三元组顺序表的位置。
//推出2个规则:
//1 cpot[1] = 1;
//2 cpot[j] = cpot[j-1]+num[j-1];
//算法思路:
//根据1,2规则计算num数组和cpot数组
//根据cpot数组的指示求转置,将A的三元组顺序表中每个元素直接放入B的三元组顺序表中的适当位置.
#define max 100
struct element
{
int row,col; //行下标,列下标
int value; //值
};
struct triple
{
int m; //行数
int n; //列数
int t; //非0元素个数
element list[max+1]; //存放的位置
};
void transpos(triple &A,triple &B)
{//求A的转置数组B
int num[max+1]; //A每列非0元素的个数
int cpot[max+1];//A的某列非0元素在B的三元组中的位置
//基本信息的复制
B.m = A.n;
B.n = A.m;
B.t = A.t;
if(B.t>0)
{//如果存在非0的元素,这个时候才需要转置
//初始化num数组 num[j] : j列中非0元素的个数
//初始化
for(j=1;j<=A.n;j++)
{
num[j] = 0;
}
//求A中每一列中非0元素的个数
for(j=1;j<=A.t;j++)
{
num[A.list[j].col]++; //
}
//num已经初始化好了
//初始化cpot;
cpot[1] = 1;
for(j=2;j<=A.n;j++)
{
cpot[j] = cpot[j-1] +num[j-1];
}
//cpot也初始化好了
//求转置
for(p=1;p<=A.t;p++)
{
j = A.list[p].col; //j是某元素的列数
i = cpot[j]; //i是A的j列应该存储在B的三元组的首位
B.list[i].row = A.list[p].col;
B.list[i].col = A.list[p].row;
B.list[i].data =A.list[p].value;
cpot[j]++;
}
}
}
相关文章推荐
- 稀疏矩阵的压缩存储和转置
- 稀疏矩阵的压缩存储及转置,快速转置法,C++代码实现
- 【LB】稀疏矩阵的快速转置原理及其算法
- 稀疏矩阵的相关操作(存储、转置、快速转置、相加)
- 稀疏矩阵的存储和快速转置
- 稀疏矩阵的转置用三元组表示
- 稀疏矩阵的压缩存储及转置算法
- (13)稀疏矩阵的压缩-三元组表(转置)
- 稀疏矩阵快速转置算法分析
- 稀疏矩阵的压缩存储及快速转置
- 稀疏矩阵的一般转置
- 稀疏矩阵的快速转置
- 稀疏矩阵的快速转置(C语言版)
- 【数据结构】——稀疏矩阵转置
- 3.3.3.3稀疏矩阵转置算法
- 稀疏矩阵的存储方式及其快速转置的实现
- 【代码】稀疏矩阵的压缩存储与转置算法
- ADT稀疏矩阵 及 转置
- 【代码】稀疏矩阵的压缩存储与转置算法
- 稀疏矩阵的压缩存储与转置