稀疏矩阵转置中的快速转置

稀疏矩阵转置中的快速转置就是记录目标矩阵每一行的开始位置,在对原始矩阵的每个元素进行转置时,只需根据元素的所在列和目标矩阵对应行的开始位置,就可确定目标元素的位置,进而进行原始元素和目标元素相应值得交换,具体c语言代码如下:

#include<iostream>

#define MAXSIZE 12500

typedef struct {
	int i, j;
	int e;
}Triple;//三维元素
typedef struct{
	Triple data[MAXSIZE + 1];
	int mu, nu, tu;  //行、列、总数
}TSMatrix;//稀疏矩阵

//快速转置
int FastTransposeSMatrix(TSMatrix M, TSMatrix &T){
   //求稀疏矩阵M的转置矩阵T
	T.mu = M.nu; T.nu = M.mu; T.tu = M.tu;
    //初始化M各列非零元素数目num,T矩阵各行开始位置cpot
	int num[10] = { 0 }, cpot[10] = { 0 };  
	if (T.tu){
		for (int col = 1; col <= M.mu; col++) num[col] = 0;
		for (int t = 1; t <= M.nu; t++) ++num[M.data[t].j];  //求M各列非零元素数目num
		cpot[1] = 1;  //T矩阵第一行开始位置为1
		//T矩阵各行开始位置等于上行开始位置加上上行非零元素数目;T矩阵的col行非零元素数目等于M矩 //阵col列非零元素数目
		for (int col = 2; col <= T.nu; col++) cpot[col] = cpot[col - 1] + num[col - 1];  
		for (int p = 1; p < M.tu; p++){
			int col = M.data[p].j;  //将M矩阵元素的列转换为T矩阵的行
			int q = cpot[col];      //定位T矩阵第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;
			cpot[col]++;   //T矩阵第col行未赋值元素的开始位置前移
		}//for
	}//if
	return 1;
}

猜你喜欢

转载自blog.csdn.net/swordboy_fire/article/details/82873954
今日推荐