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

原创 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");
 
}

 

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

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

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

5.3矩阵的压缩存储(稀疏矩阵转置和快速转置)
  • qq78442761
  • qq78442761
  • 2017年02月09日 15:22
  • 2938

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

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

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

稀疏矩阵基于“三元组”的转置算法实现
  • wangchuanqi1234
  • wangchuanqi1234
  • 2016年04月11日 17:45
  • 1285

稀疏矩阵的快速转置和乘法运算源代码(非常详细)

/*sparseMatrix.h*/ #include "stdio.h" #include "stdlib.h" #define SIZE 100 typedef struct { in...
  • serena_0916
  • serena_0916
  • 2017年11月29日 08:20
  • 229

稀疏矩阵的普通转置与快速转置算法

稀疏矩阵的普通转置与快速转置算法 一般来说,对于系数矩阵,我们使用三元组来存储。即就是将矩阵的所有非零元素的三元组存放在一个顺序表中,如图所示: 注意一个转置的前提:该顺序表是排好序的,即行优...
  • qq845579063
  • qq845579063
  • 2016年05月09日 17:49
  • 3397

【C++】稀疏矩阵的普通转置与快速转置

因为稀疏矩阵的有效元素个数较少,所以以行优先的顺序把有效元素的信息封装在一个三元组中存储在顺序表里 #include #include using namespace std; #define M ...
  • ZDF0414
  • ZDF0414
  • 2015年11月17日 14:35
  • 914

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

#include #include #define MAX 100 typedef struct node{     int i,j,v; }SYZ; void createlist(SYZ *L...
  • wanying2001
  • wanying2001
  • 2015年11月30日 21:10
  • 2280

稀疏矩阵的快速转置算法

稀疏矩阵的快速转置算法在描述稀疏矩阵的快速转置算法之前,先了解什么是稀疏矩阵和什么是稀疏矩阵的压缩存储;稀疏矩阵的压缩存储什么是稀疏矩阵? /* 这是大学的以么课《线性代数》学的,不知道大家还记得多少...
  • bitboss
  • bitboss
  • 2016年09月28日 09:09
  • 3898

稀疏矩阵的压缩存储及转置,快速转置法,C++代码实现

/*稀疏矩阵的压缩存储及转置*/ #include using namespace std; /*三元组顺序表的类型定义*/#define itemSize 100 typedef struct{  ...
  • hackerain
  • hackerain
  • 2010年10月20日 23:57
  • 3483
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:稀疏矩阵的存储和快速转置
举报原因:
原因补充:

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