稀疏矩阵

大部分元素是0的矩阵称为稀疏矩阵,假设有k个非0元素,则可把稀疏矩阵用K*3的矩阵简记之,其中第一列是行号,第二列是列号,第三列是该行、该列下的非元素的值。如:

    0  0  0  5      写简记成: 1  4  5      //第1行第4列有个数是5

    0  2  0  0                         2  2  2      //第2行第2列有个数是2

    0  1  0  0                         3  2  1      //第3行第2列有个数是1

   试编程读入一稀疏矩阵,转换成简记形式,并输出。

【分析】 本题中需要解决的主要问题是查找非零元素并记忆位置。将原始矩阵存于数组a。转换后的矩阵存于数组b,当然b数组的行数可以控制在一个小范围内。

#include<iostream>
using namespace std;
const int m=3,n=5;
int main()
{

int a[m+1][n+1],b[101][4];
int k=0;
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)
cin>>a[i][j];
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)
if(a[i][j]!=0)
{
++k;
b[k][1]=i;
b[k][2]=j;
b[k][3]=a[i][j];

}
for(int i=1;i<=k;++i)
{
for(int j=1;j<=3;++j)
cout<<b[i][j];
cout<<endl;
}
return 0;
}

时间: 2024-11-05 06:03:48

稀疏矩阵的相关文章

稀疏矩阵的三元组顺序表的C语言实现

对于没有排序功能的集合来说,都可以使用java.util.Collections.sort()方法进行排序,它除了集合对象以外,还需要提供一个比较器.如果列表中的元素全部都是相同的类型,并且这个类实现了Comparable接口,就可以简单的调用Collections.sort()方法,如果这个类没有实现comparable接口,那么可以创建一个比较器传递一个Comparator实例作为Sort()的第二个参数进行排序,另外,如果不想使用默认的分类顺序进行排序,同样也可以传递一个Comparato

算法----稀疏矩阵之三元组

三元组的表示 (1).目的:对于在实际问题中出现的大型的稀疏矩阵,若用常规分配方法在计算机中储存,将会产生大量的内存浪费,而且在访问和操作的时候也会造成大量时间上的浪费,为了解决这一问题,从而善生了多种解决方案. (2).由于其自身的稀疏特性,通过压缩可以大大节省稀疏矩阵的内存代价.具体操作是:将非零元素所在的行.列以及它的值构成一个三元组(i,j,v),然后再按某种规律存储这些三元组,这种方法可以节约存储空间. 具体如下图: #define SMAX 1000 typedef struct {

c++稀疏矩阵的压缩存储

稀疏矩阵 M*N的矩阵 其中有效值的个数远小于无效值的个数 且分布没有规律 Eg: int array [6][5] =     {{1, 0, 3, 0, 5}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {2, 0, 4, 0, 6}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}}; 稀疏矩阵的压缩存储 压缩存储值存储极少数的有效数据.使用{row,col,value}//行 列 值三元组存储每一个有效 数据,三元组按原矩阵中的位置,以行优先级

对称矩阵和稀疏矩阵

对称矩阵 Matrix.h #pragma once   template<class T> class SymmetricMatrix { public:  SymmetricMatrix(const T* a, size_t N) //对称矩阵 只存下三角 :_a(new T[N*(N + 1) / 2]) ,_n(N) { size_t index = 0; for (size_t i = 0; i < N; ++i) { for (size_t j = 0; j < N; 

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

矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合. 稀疏矩阵:有效数据远少于无效数据. eg:规定无效数据为 0 1 0 0 0 0 0 0 0 0 2 0 3 0 0 0 4 0 0 0 0 上述矩阵则可称为一个稀疏矩阵 我们在学习C语言的时候已经见过并使用过矩阵,其实它在我们的编程语言里可以翻译成二维数组,由于稀疏矩阵的有效数据十分的少,完全存储十分耗费我们的空间,所以我们选择只存储它的有效数据位,所以我们可以直接使用一维数组将其存储起来,但是我们必须让别人在看它时还能知道它是一个

对称矩阵、稀疏矩阵的压缩存储

1)对称矩阵的压缩存储 对称矩阵顾名思义就是符合行和列的个数相同,并且矩阵中存储的数据上三角和下三角中对应位置上的元素值是相等的.为了能够减少存储的空间,我们可以只存储上三角矩阵.或者下三角矩阵中的元素,这样就能够极大地节省空间的浪费.下面是对称矩阵的示列: 假设对称矩阵为n*n,这里以行优先存储下三角矩阵,总共需要存储的元素有n*(n+1)/2个元素,从而将n*n个元素压缩到n*(n+1)/2大小的空间中. 下面是具体的程序实现: --symmetric.h文件 //实现对称矩阵 #inclu

压缩感知先进——关于稀疏矩阵

前<初识压缩感知Compressive Sensing>中我们已经讲过了压缩感知的作用和基本想法,涉及的领域,本文通过学习陶哲轩对compressive sensing(CS)的课程,对压缩感知做进一步理解.针对其原理做出解说.本文较为理论性,代码请參考<"压缩感知"之"Hello world">. Keywords: 压缩感知 compressive sensing, 稀疏(Sparsity).不相关(Incoherence).随机性(Ra

稀疏矩阵存储格式总结+存储效率对比:COO,CSR,DIA,ELL,HYB

转载请注明出处:Bin的专栏,http://blog.csdn.net/xbinworld 稀疏矩阵是指矩阵中的元素大部分是0的矩阵,事实上,实际问题中大规模矩阵基本上都是稀疏矩阵,很多稀疏度在90%甚至99%以上.因此我们需要有高效的稀疏矩阵存储格式.本文总结几种典型的格式:COO,CSR,DIA,ELL,HYB. (1)Coordinate(COO) 这是最简单的一种格式,每一个元素需要用一个三元组来表示,分别是(行号,列号,数值),对应上图右边的一列.这种方式简单,但是记录单信息多(行列)

MATLAB稀疏矩阵indexing效率比较

试验中需要处理大的稀疏矩阵,由于要频繁对稀疏矩阵进行取块操作,搜索了Index对行列操作哪个快? 发现丕子的博文称对稀疏矩阵取块行要比列快,但我实际测试发现列比行快. 使用的行数2x10^7,列数3x10^5的稀疏矩阵,将这个矩阵转置发现占用内存稍微增加,如下图1: S 22530343x429498 2400827800 double sparse S_transpose 429498x22530343 2577634560 double sparse 分别取S矩阵前10^6,10^5,10^