14.行列の高速転置アルゴリズム——一般化表(疎行列)

1444 ワード

マトリクスの高速回転アルゴリズムデータ圧縮は、伝送、記憶効率を向上させる技術である.教材5章では,2つの簡単な圧縮記憶方法を紹介した.本実験では,三元群シーケンステーブルで表されるマトリクス高速転置アルゴリズムの実現を要求した.
入力:疎行列の行数、列数、ゼロ以外の数(いずれも0より大きい)
疎行列の三元グループテーブルを動作主順で入力
出力:補助配列num[]
補助配列cpot[]
対応する回転マトリクスの三元グループテーブルを動作主順で出力する
試験例in:6 7 8 8 1 2 12 1 3 9 3 1-3 6 14 3 24 5 2 18 6 1 15 6 4-7 out:num:2,2,2,1,0,1,0,cpot:1,3,5,7,8,8,9,1,3,-31,6,15,1,12,5,18,1,9,3,3,3,3,4,24
#include
#include
typedef struct
{
	int i, j;
	int e;
}triple;
typedef struct
{
	triple data[1000];
	int mu,nu,tu;
}Matrix;
int num[1000],cpot[1000];
int main()
{
	int col,t,p,q;
	Matrix M,T;
	scanf("%d%d%d",&M.mu,&M.nu,&M.tu);
	for(int i=1;i<= M.tu;i++)
		scanf("%d%d%d",&M.data[i].i,&M.data[i].j,&M.data[i].e);
	T.mu=M.mu;
	T.nu=M.nu;
	T.tu=M.tu;
	if(T.tu)
	{
		for(col=1;col<=M.nu;col++)
			num[col] = 0;
		for(t=1;t<= M.tu;t++)
			num[M.data[t].j]++;
		cpot[0]=1;
		cpot[1]=1;
		for(col=2;col<=M.nu;col++)
			cpot[col]=cpot[col-1]+num[col-1];
		for(p=1;p<=M.tu;p++)
		{
			col=M.data[p].j;
			q=cpot[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]++;
		}
	}
	printf("num:");
	for(int i=1;i<=M.nu;i++)
		printf("%d,",num[i]);
	printf("
"); printf("cpot:"); for(int i=0;i