稀疏矩阵的存储和快速转置

原创 2012年03月20日 10:56:17

 稀疏矩阵的存储和快速转置

一、目的:

掌握稀疏矩阵的三元组表的压缩存储方法,并且利用该存储方法实现稀疏矩阵的转置与快速转置。

 

二、要求:

输入一个稀疏矩阵A,由程序将其转换成三元组表存储;转置后的三元组表,由程序将其转换成矩阵形式后输出。

 

三、实验内容

1、设计程序。

2、调试程序,并设计输入数据。

 

四、实验报告要求

写出程序和实验结果。

 

#define MAXSIZE 50
#include "Stdio.h"
#define  X 10
#define  Y 10
typedef struct{
       int i,j;
       int e;
}Triple;
typedef struct
   { Triple data[MAXSIZE+1];
     int mu,nu,tu;
    }TSMatrix;
 int num[X],cpot[Y];

TSMatrix  createsmatrix()
    {
      TSMatrix M;
       int i,j,k=1,x,m,n;
        int a[X][Y];
   printf("请输入矩阵的行数mu:\n");
    scanf("%d",&m);
     printf("请输入矩阵的列数nu:\n");
    scanf("%d",&n);
  printf("请输入矩阵的各个元素:\n");
  for(i=0;i<m;i++)
  for(j=0;j<n;j++)
   scanf("%d",&a[i][j]);
       for(i=0;i<m;i++)
      { for(j=0;j<n;j++)
       { x=a[i][j];
          if(x)
        {M.data[k].i=i+1;
         M.data[k].j=j+1;
         M.data[k].e=x;
         k++;}
        } }
       M.mu=m;
       M.nu=n;
       M.tu=k-1;
     return(M);
    }

 TSMatrix   fasttransposesmatrix(TSMatrix M)
    {   TSMatrix T;
       int col,t,p,q;
         T.mu=M.nu;
         T.nu=M.mu;
         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[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];
              }
          }
        return(T);
    }

 void   print(TSMatrix T)
        { int b[X][Y];
           int i,j,t,m=T.mu,n=T.nu;
          for(i=0;i<m;i++)
          for(j=0;j<n;j++)
           b[i][j]=0;
           for(t=1;t<=T.tu;t++)
            b[(T.data[t].i)-1][(T.data[t].j)-1]=T.data[t].e;
            printf("转置矩阵是:");
          for(i=0;i<m;i++)
          { printf("\n");
          for(j=0;j<n;j++)
          printf("%5d",b[i][j]);
           } 
         }

 void main()
{  int i,j;
    TSMatrix M,T;
   M=createsmatrix();
    T=fasttransposesmatrix(M);
    print(T);
   printf("\n");
 
}

 

相关文章推荐

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

三元组稀疏矩阵的快速转置

小问题却整了这么久,能力有待加强,要强烈区分三元组的列数与元素总数,不能将他俩写混了 #include #define MAXSIZE 1250 #define OK 1 #de...

用三元组存储稀疏矩阵并实现转置

基本概念 在学习线性代数的时候,经常用到矩阵。在C语言中,表示矩阵的最直观形式就是二维数组。然而在实际应用中,很多高阶矩阵中的非零元素非常少,这个时候如果继续使用二维数组存储,那么就会浪费很多存储空...
  • tiredoy
  • tiredoy
  • 2014年04月24日 20:58
  • 7182

稀疏矩阵的存储方式及其快速转置的实现

稀疏矩阵: M*N的矩阵,矩阵中有效值的个数远小于无效值的个数,且这些数据的分布没有规律。 如下图矩阵: 稀疏矩阵的压缩存储方式: 压缩存储极少数的有效数据。使用{row,col,value}...

稀疏矩阵的快速转置(C语言版)

#include #include #define MAX 100 typedef struct node{     int i,j,v; }SYZ; void createlist(SYZ *L...

5.3矩阵的压缩存储(稀疏矩阵转置和快速转置)

5.3矩阵的压缩存储(稀疏矩阵转置和快速转置)

【LB】稀疏矩阵的快速转置原理及其算法

关于稀疏矩阵的快速转置法,首先得明白其是通过对三元表进行转置。如果误以为是对矩阵进行转置,毫无疑问就算你想破脑袋也想不出个所以然,别陷入死胡同了!          对于一个三元表,行为i,列为...

稀疏矩阵的压缩存储及其转置算法

1  什么是稀疏矩阵        有较多值相同元素或较多零元素,且值相同元素或者零元素分布没有一定规律的矩阵称为稀疏矩阵。 假设在mXn的矩阵中,有t个元素不为零,令c=t/mXn则称为矩阵的稀...

稀疏矩阵快速转置

题目描述 稀疏矩阵的存储不宜用二维数组存储每个元素,那样的话会浪费很多的存储空间。所以可以使用一个一维数组存储其中的非零元素。这个一维数组的元素类型是一个三元组,由非零元素在该稀疏矩阵中的位置(...

稀疏矩阵基于“三元组”的转置算法实现

稀疏矩阵基于“三元组”的转置算法实现
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:稀疏矩阵的存储和快速转置
举报原因:
原因补充:

(最多只允许输入30个字)