数据结构_稀疏矩阵转置(trans_sparse_matrix)
2013-09-18 21:11
483 查看
经过几个小时的奋战,AC~~~ ^_^
下面是用M的列优先表示,
Description
/************************************/
/*求转置矩阵*/
/*问题描述:已知一个稀疏矩阵的三元组表,*/
/*求该矩阵转置矩阵的三元组表*/
/************************************/
Sample Output
code:
//author:essence_of_acmer;
//time:2011.8.7
//theme:trans_sparse_matrix
//用M的列优先表示
#include <iostream>
using namespace std;
#define M 20
typedef struct node
{
int i,j;
int v;
} JD ;
int trans_Sparse_matrix(JD ma[],JD mb[]) //way 1:按照M的列序存储
{
if(ma[0].v==0)
return (0);
int n=ma[0].j;
int t=ma[0].v;
mb[0].i=n;
mb[0].j=ma[0].i;
mb[0].v=t;
int k=1;
for(int col=1;col<=n;col++)
for(int p=1;p<=t;p++)
if (ma[p].j==col)
{
mb[k].i=ma[p].j;
mb[k].j=ma[p].i;
mb[k].v=ma[p].v;
k++;
}
return (1);
}
int fast_transpos(JD ma[],JD mb[]) //way 2:快速转置
{ int n,col,p,k,t;
int num[M],cpot[M];
n=ma[0].j;
t=ma[0].v;
mb[0].i=n; mb[0].j=ma[0].i; mb[0].v=t;
if(t<=0)
return(0);
for(col=0;col<=n;col++)
num[col]=0; //num[col]:表示矩阵M中第col列中非零元个数
for(p=1;p<=t;p++)//优秀
{ k=ma[p].j;
num[k]++;// 统计矩阵M中第col列中非零元个数
}
cpot[0]=0; cpot[1]=1;
for(col=2;col<=n;col++)
cpot[col]=cpot[col-1]+num[col-1];//统计M中第col列第一个非零元在mb中位置
for(p=1;p<=t;p++)
{ col=ma[p].j; //ma[]中第col列
k=cpot[col]; //第col列第一个非零元在mb中位置
mb[k].i=ma[p].j;
mb[k].j=ma[p].i;
mb[k].v=ma[p].v;
cpot[col]++; //优秀 //经典代码段
}
return(1);
}
int main()
{
int a[6][7]={0,12,9,0,0,0,0,
0,0,0,0,0,0,0,
-3,0,0,0,0,14,0,
0,0,24,0,0,0,0,
0,18,0,0,0,0,0,
15,0,0,-7,0,0,0};
JD ma[M],mb[M];
int k=1;
for(int i=0;i<6;i++) //初始化
for(int j=0;j<7;j++)
if(a[i][j]) {ma[k].i=i+1;ma[k].j=j+1;ma[k].v=a[i][j];k++;}
ma[0].i=6;ma[0].j=7;ma[0].v=k-1;
//trans_Sparse_matrix(ma,mb); //way 1;
fast_transpos(ma,mb); //way 2;
for(int i=0;i<k;i++) //打印原始
cout<<ma[i].i<<" ,"<<ma[i].j<<" ,"<<ma[i].v<<endl;
cout<<endl<<endl;
for(int i=0;i<k;i++) //打印改变后的
cout<<mb[i].i<<" ,"<<mb[i].j<<" ,"<<mb[i].v<<endl;
return (0);
}
下面是用M的列优先表示,
Description
/************************************/
/*求转置矩阵*/
/*问题描述:已知一个稀疏矩阵的三元组表,*/
/*求该矩阵转置矩阵的三元组表*/
/************************************/
Sample Output
code:
//author:essence_of_acmer;
//time:2011.8.7
//theme:trans_sparse_matrix
//用M的列优先表示
#include <iostream>
using namespace std;
#define M 20
typedef struct node
{
int i,j;
int v;
} JD ;
int trans_Sparse_matrix(JD ma[],JD mb[]) //way 1:按照M的列序存储
{
if(ma[0].v==0)
return (0);
int n=ma[0].j;
int t=ma[0].v;
mb[0].i=n;
mb[0].j=ma[0].i;
mb[0].v=t;
int k=1;
for(int col=1;col<=n;col++)
for(int p=1;p<=t;p++)
if (ma[p].j==col)
{
mb[k].i=ma[p].j;
mb[k].j=ma[p].i;
mb[k].v=ma[p].v;
k++;
}
return (1);
}
int fast_transpos(JD ma[],JD mb[]) //way 2:快速转置
{ int n,col,p,k,t;
int num[M],cpot[M];
n=ma[0].j;
t=ma[0].v;
mb[0].i=n; mb[0].j=ma[0].i; mb[0].v=t;
if(t<=0)
return(0);
for(col=0;col<=n;col++)
num[col]=0; //num[col]:表示矩阵M中第col列中非零元个数
for(p=1;p<=t;p++)//优秀
{ k=ma[p].j;
num[k]++;// 统计矩阵M中第col列中非零元个数
}
cpot[0]=0; cpot[1]=1;
for(col=2;col<=n;col++)
cpot[col]=cpot[col-1]+num[col-1];//统计M中第col列第一个非零元在mb中位置
for(p=1;p<=t;p++)
{ col=ma[p].j; //ma[]中第col列
k=cpot[col]; //第col列第一个非零元在mb中位置
mb[k].i=ma[p].j;
mb[k].j=ma[p].i;
mb[k].v=ma[p].v;
cpot[col]++; //优秀 //经典代码段
}
return(1);
}
int main()
{
int a[6][7]={0,12,9,0,0,0,0,
0,0,0,0,0,0,0,
-3,0,0,0,0,14,0,
0,0,24,0,0,0,0,
0,18,0,0,0,0,0,
15,0,0,-7,0,0,0};
JD ma[M],mb[M];
int k=1;
for(int i=0;i<6;i++) //初始化
for(int j=0;j<7;j++)
if(a[i][j]) {ma[k].i=i+1;ma[k].j=j+1;ma[k].v=a[i][j];k++;}
ma[0].i=6;ma[0].j=7;ma[0].v=k-1;
//trans_Sparse_matrix(ma,mb); //way 1;
fast_transpos(ma,mb); //way 2;
for(int i=0;i<k;i++) //打印原始
cout<<ma[i].i<<" ,"<<ma[i].j<<" ,"<<ma[i].v<<endl;
cout<<endl<<endl;
for(int i=0;i<k;i++) //打印改变后的
cout<<mb[i].i<<" ,"<<mb[i].j<<" ,"<<mb[i].v<<endl;
return (0);
}
相关文章推荐
- 分布式稀疏矩阵的数据结构(data structure for distributed sparse matrix)
- 三元组实现稀疏矩阵的压缩存储与转置 (Sparse matrix compression storage and transposition base on triple)
- 稀疏矩阵(sparse matrix)
- distributed sparse matrix SPMV(分布式稀疏矩阵的spmv操作)
- 稀疏矩阵的存储格式(Sparse Matrix Storage Formats)
- 稀疏矩阵的存储格式(Sparse Matrix Storage Formats)
- Sparse Matrix(稀疏矩阵三元组表示,三元组形式的矩阵转置)
- 【数据结构】稀疏结构及稀疏矩阵的压缩存储,矩阵的(快速)转置
- 【数据结构】稀疏矩阵的压缩存储和转置算法(C++代码)
- 稀疏矩阵的存储格式(Sparse Matrix Storage Formats)
- 数据结构稀疏矩阵的实现及转置
- matlab 稀疏矩阵(sparse matrix)
- 数据结构--稀疏矩阵(转置)
- c语言版数据结构(奇迹冬瓜)-数组和广义表(稀疏矩阵的转置算法一)
- 【数据结构之旅】稀疏矩阵的快速转置
- scipy.sparse中csc_martrix和csr_matrix两个稀疏矩阵的区别
- SparseMatrix稀疏矩阵
- 稀疏矩阵的存储格式(Sparse Matrix Storage Formats)
- 稀疏矩阵(Sparse Matrix)
- 数据结构----稀疏矩阵的快速转置