码迷,mamicode.com
首页 > 其他好文 > 详细

稀疏矩阵的转置运算

时间:2017-05-21 21:40:02      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:空间   border   data   play   top   遍历   存储   pad   nbsp   

  (1)设m*n 矩阵中有t 个非零元素且t远小于m*n,这样的矩阵称为稀疏矩阵。很多科学管理及工程计算中,常会遇到阶数很高的大型稀疏矩阵。如果按常规分配方法,顺序分配在计算机内,那将是相当浪费内存的。为此提出另外一种存储方法,仅仅存放非零元素。但对于这类矩阵,通常零元素分布没有规律,为了能找到相应的元素,所以仅存储非零元素的值是不够的,还要记下它所在的行和列。于是采取如下方法:将非零元素所在的行、列以及它的值构成一个三元组(i,j,v),然后再按某种规律存储这些三元组,这种方法可以节约存储空间。

  将三元组按行优先的顺序,同一行中列号从小到大的规律排列成一个线性表,称为三元组表,采用顺序存储方法存储该表。如下图:

技术分享

 

 可以将其改写成如下的三元组的形式,同时存储器行、列和值,如下:

i

j

v

1

2

12

1

3

9

3

1

-3

3

6

14

4

3

24

5

2

18

6

1

15

6

4

-7

 

对应的三元组的数据结构可以写成如下形式的数据结构:

//定义三元组的数据结构类型
typedef struct{
	int i,j;		//非零元素的行和列
	ElemType e;		//非零元素的值
}Triple;

//三元组表的存储类型
typedef struct{
	int mu,nu,tu;				//矩阵的行、列以及非零元的个数
	Triple data[MAXSIZE+1];	    //三元组表
}Matrix;

 (2)、矩阵的转置

要做到转置要做到三点

①、将矩阵的行列值互换

②、将每个三元组的i、j互换

③、重新排列三元组

如下图:

  技术分享

方法一:

  ①、将矩阵A的行列转化为矩阵B的列和行

  ②、一次遍历三元组的每一列的值

  

稀疏矩阵的转置运算

标签:空间   border   data   play   top   遍历   存储   pad   nbsp   

原文地址:http://www.cnblogs.com/helloworldcode/p/6885949.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!