知识大全 多维数组-矩阵的压缩存储- 稀疏矩阵(一)

Posted 元素

篇首语:古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 多维数组-矩阵的压缩存储- 稀疏矩阵(一)相关的知识,希望对你有一定的参考价值。

  稀疏矩阵

  设矩阵A mn 中有s个非零元素 若s远远小于矩阵元素的总数(即s<

  1、稀疏矩阵的压缩存储

  为了节省存储单元,可只存储非零元素。由于非零元素的分布一般是没有规律的,因此在存储非零元素的同时,还必须存储非零

  元素所在的行号、列号,才能迅速确定一个非零元素是矩阵中的哪一个元素。稀疏矩阵的压缩存储会失去随机存取功能。

  其中每一个非零元素所在的行号、列号和值组成一个三元组(i,j,a ij ),并由此三元组惟一确定。

  稀疏矩阵进行压缩存储通常有两类方法:顺序存储和链式存储。链式存储方法【参见参考书目】。

  2、三元组表

  将表示稀疏矩阵的非零元素的三元组按行优先(或列优先)的顺序排列(跳过零元素),并依次存放在向量中,这种稀疏矩阵的顺序

  存储结构称为三元组表。

  注意:

  以下的讨论中,均假定三元组是按行优先顺序排列的。

  【例】下图(a)所示的稀疏矩阵A的三元组表表示见图(b)

  

>

  (1)三元组表的类型说明

  为了运算方便,将矩阵的总行数、总列数及非零元素的总数均作为三元组表的属性进行描述。.WINGwIT.其类型描述为:

  #define MaxSize 10000 //由用户定义

  typedef int DataType; //由用户定义

  typedef struct //三元组

  int i,j;//非零元的行、列号

  DataType v; //非零元的值

  TriTupleNode;

  typedef struct //三元组表

  TriTupleNode data[MaxSize]; //三元组表空间

  int m,n,t; //矩阵的行数、列数及非零元个数

  TriTupleTable;

  (2) 压缩存储结构上矩阵的转置运算

  一个m×n的矩阵A,它的转置矩阵B是一个n×m的矩阵,且:

  A[i][j]=B[j][i],0≤i

  即A的行是B的列,A的列是B的行。

  【例】下图中的B和上图中的A互为转置矩阵。

  

>

  ①三元组表表示的矩阵转置的思想方法

  第一步:根据A矩阵的行数、列数和非零元总数确定B矩阵的列数、行数和非零元总数。

  第二步:当三元组表非空(A矩阵的非零元不为0)时,根据A矩阵三元组表的结点空间data(以下简称为三元组表),将A的三

  元组表a->data置换为B的三元组表b->data。

  ②三元组表的转置

  方法一:简单地交换a->data中i和j中的内容,得到按列优先顺序存储倒b->data;再将b->data重排成按行优先顺序的三元组表。

  方法二:由于A的列是B的行,因此,按a->data的列序转置,所得到的转置矩阵B的三元组表b->data必定是按行优先存放的。

  按这种方法设计的算法,其基本思想是:对A中的每一列col(0≤col≤a->n-1),通过从头至尾扫描三元组表a->data,找出所有

  列号等于col的那些三元组,将它们的行号和列号互换后依次放人b->data中,即可得到B的按行优先的压缩存贮表示。具体实现参见

  【 动画演示 】

  ③具体算法:

  void TransMatrix(TriTupleTable *b,TriTupleTable *a)

  //*a,*b是矩阵A、B的三元组表表示,求A转置为B

  int p,q,col;

  b->m=a->n; b->n=a->m; //A和B的行列总数互换

  b->t=a->t; //非零元总数

  if(b->t<=0)

  Error("A=0"); //A中无非零元,退出

  q=0;

  for(col=0;coln;col++) //对A的每一列

  for(p=0;pt;p++) //扫描A的三元组表

  if(a->data[p].j==col) //找列号为col的三元组

  b->data[q).i=a->data[p].j;

  b->data[q].j=a->data[p].i;

  b->data[q].v=a->data[p].v;

  q++;

  

   //TransMatrix

  ④算法分析

  该算法的时间主要耗费在col和p的二重循环上:

  若A的列数为n,非零元素个数t,则执行时间为O(n×t),即与A的列数和非零元素个数的乘积成正比。

  通常用二维数组表示矩阵时,其转置算法的执行时间是O(m×n),它正比于行数和列数的乘积。

  由于非零元素个数一般远远大于行数,因此上述稀疏矩阵转置算法的时间大于通常的转置算法的时间。

cha138/Article/program/sjjg/201311/23897

相关参考

知识大全 多维数组-矩阵的压缩存储-矩阵的存储

  矩阵是科学与工程计算问题中常用的数学对象之一  矩阵的存储  矩阵的二维数组描述  矩阵用二维数组描述时存储的密度为可以对其元素进行随机存取各种矩阵运算也非常简单  矩阵的压缩存储  矩阵中非零元

知识大全 多维数组-矩阵的压缩存储-特殊矩阵

  特殊矩阵  所谓特殊矩阵是指非零元素或零元素的分布有一定规律的矩阵常见的有对称矩阵三角矩阵和对角矩阵等  对称矩阵  ()对称矩阵  在一个n阶方阵A中若元素满足下述性质  aij=aji≤ij≤

知识大全 多维数组-矩阵的压缩存储- 特殊矩阵(二)

  三角矩阵  ()三角矩阵的划分  以主对角线划分三角矩阵有上三角矩阵和下三角矩阵两种  ①上三角矩阵  如下图(a)所示它的下三角(不包括主角线)中的元素均为常数c  ②下三角矩阵  与上三角矩阵

知识大全 数据结构数组和广义表之矩阵的压缩存储

  压缩存储即为多个相同的非零元素只分配一个存储空间对零元素不分配空间  所谓特殊矩阵(SpecialMatrices)是指非零元素或零元素的分布有一定规律的矩阵  几种特殊矩阵的

知识大全 稀疏矩阵

稀疏矩阵  设矩阵Amn中有s个非零元素若s远远小于矩阵元素的总数(即s<<m×n)则称A为稀疏矩阵稀疏矩阵的压缩存储  为了节省存储单元可只存储非零元素由于非零元素的分布一般是没有规律的

知识大全 数据结构考研分类复习真题 第五章 数组和广义表[24]

  已知A为稀疏矩阵试从空间和时间角度比较采用两种不同的存储结构(二维数组和三元组表)完成求运算的优缺点【西安电子科技大学二(分)】  特殊矩阵和稀疏矩阵哪一种压缩存储后失去随机存取的功能?为什么?【

知识大全 数据结构第五章(多维数组与广义表)串讲+复习要点

  前面我们学习的线性表栈队列和串都是线性结构本章起学习的是非线性结构它们的逻辑特征是一个数据元素可能有多个直接前趋和多个直接后继  本章重点是熟悉多维数组的存储方式矩阵的压缩存储方式广义表的定义及其

知识大全 数据结构考研分类复习真题 第五章 数组和广义表[31]

  设对角线矩阵A=(行列下标ij满足≤ij≤)  ()若将矩阵A压缩存储到数组S中  试求出A中已存储之元素的行列下标(ij)与S中元素的下标K之间的关系  ()若将A视为稀疏距阵时请画出其行逻辑链

知识大全 09年自考《数据结构》各章要点一[10]

  矩阵的压缩存储为多个相同的非零元素分配一个存储空间;对零元素不分配空间  特殊矩阵的概念所谓特殊矩阵是指非零元素或零元素分布有一定规律的矩阵  稀疏矩阵的概念一个矩阵中若其非零元素的个数远远小于零

知识大全 数据结构考研分类复习真题 第五章 数组和广义表[12]

  所谓稀疏矩阵指的是_______【厦门大学一(%/分)】  对矩阵压缩是为了_______【北京理工大学二(分)】  上三角矩阵压缩的下标对应关系为_______【福州大学二(分)】【南京大学】