矩阵的快速转置算法

矩阵的快速转置算法

 

     数据压缩是提高传输、存储效率一种技术。教材第5章介绍了两种简单的压缩存储方法。本实验要求实现三元组顺序表表示下的矩阵快速转置算法

输入:

稀疏矩阵的行数、列数、非零元个数(三个数都大于0)

以行为主序输入稀疏矩阵三元组表

输出:

辅助数组num[ ]

辅助数组cpot[ ]

以行为主序输出对应的转置矩阵三元组表

 

 测试输入关于“测试输入”的帮助期待的输出关于“期待的输出”的帮助时间限制关于“时间限制”的帮助内存限制关于“内存限制”的帮助额外进程关于“{$a} 个额外进程”的帮助
测试用例 1以文本方式显示
  1. 6 7 8↵
  2. 1 2 12↵
  3. 1 3 9↵
  4. 3 1 -3↵
  5. 3 6 14↵
  6. 4 3 24↵
  7. 5 2 18↵
  8. 6 1 15↵
  9. 6 4 -7↵
以文本方式显示
  1. num:2,2,2,1,0,1,0,↵
  2. cpot:1,3,5,7,8,8,9,↵
  3. 1,3,-3↵
  4. 1,6,15↵
  5. 2,1,12↵
  6. 2,5,18↵
  7. 3,1,9↵
  8. 3,4,24↵
  9. 4,6,-7↵
  10. 6,3,14↵
1秒256KB0
测试用例 2以文本方式显示
  1. 5 4 6↵
  2. 2 1 1↵
  3. 2 2 2↵
  4. 4 2 2↵
  5. 4 3 3↵
  6. 5 3 3↵
  7. 5 4 4↵
以文本方式显示
  1. num:1,2,2,1,↵
  2. cpot:1,2,4,6,↵
  3. 1,2,1↵
  4. 2,2,2↵
  5. 2,4,2↵
  6. 3,4,3↵
  7. 3,5,3↵
  8. 4,5,4↵
1秒64M0

 

#include<stdio.h>  
#define MAXSIZE 9999  
  
typedef struct{  
    int i,j; //该非零元行下标、列下标   
    int e;  //值   
}Triple;  
  
typedef struct{  
    Triple data[MAXSIZE+1]; //非零元三元组表,不用data[0]   
    int mu,nu,tu; // 矩阵的行数、列数和非零元个数   
}TSMatrix;  
  
void FastTransposeSMatrix(TSMatrix a,TSMatrix &b){  
  
    b.mu=a.nu;  
    b.nu=b.mu;  
    b.tu=a.tu;  
    int count;  
    int col,t,p,q;  
    int num[a.nu+1],cpot[a.nu+1];  
    if(b.tu)  
    {  
        for(col=1;col<=a.nu;++col)   num[col]=0;  
        for(t=1;t<=a.tu;++t) ++num[a.data[t].j];  
        cpot[1]=1;  
        for(col=2;col<=a.nu;++col)   cpot[col]=cpot[col-1]+num[col-1];  
          
        printf("num:");  
        for(count=1;count<=a.nu;++count)  
        {  
            printf("%d,",num[count]);  
        }  
        printf("\n");  
        printf("cpot:");  
        for(count=1;count<=a.nu;++count)  
        {  
            printf("%d,",cpot[count]);  
        }  
        printf("\n");  
          
        for(p=1;p<=a.tu;++p){  
            col=a.data[p].j;  
            q=cpot[col];  
            b.data[q].i=a.data[p].j;  
            b.data[q].j=a.data[p].i;  
            b.data[q].e=a.data[p].e;  
            ++cpot[col];  
        }  
    }  
      
}     
int main(){  
    TSMatrix a,b;  
    scanf("%d%d%d",&a.mu,&a.nu,&a.tu);  
    int count;  
    for(count=1;count<=a.tu;count++)  
    {  
        scanf("%d%d%d",&a.data[count].i,&a.data[count].j,&a.data[count].e);  
    }     
    FastTransposeSMatrix(a,b);  
      
    for(count=1;count<=b.tu;count++)  
    {  
        printf("%d,%d,%d\n",b.data[count].i,b.data[count].j,b.data[count].e);  
        //printf("%d\n",b.tu);  
    }     
}  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值