稀疏矩阵存储
1. 稀疏矩阵是怎样存储的
/*
稀疏矩阵的三元组顺序表存储表示
*/
# define MAX_SIZE 100//非零元个数的最大值
struct Triple
{
int i,j;//行下标,列下标
ElemType e;//非零元素值
};
struct TSMatrix
{
Triple data[MAX_SIZE+1];//非零元三元组表,data[0]未用
int mu,nu,tu;//矩阵的行数、列数和非零元个数
};
2. 稀疏矩阵的存储空间
一个稀疏矩阵中有许多元素等于零,这便于矩阵的计算和保存.如果Matlab把一个矩阵当作稀疏矩阵,那么只需在m×3的矩阵中存储m个非零项.第1列是行下标,第2列是列下标,第3列是非零元素值,不必保存零元素.如果存储一个浮点数要8个字节,存储每个下标要4个字节,那么整个矩阵在内存中存储需要1 6×m个字节.
A = e y e ( 1 0 0 0 ) ;
得到一个1 0 0 0×1 0 0 0的单位矩阵,存储它需要8 MB空间.如果使用命令:
B = s p e y e ( 1 0 0 0 ) ;
用一个1 0 0 0×3的矩阵来代表,每行包含有一个行下标,列下标和元素本身.只需1 6 K B的空间就可以存储1 0 0 0×1 0 0 0的单位矩阵,它只需要满单位矩阵的0 . 2 %存储空间.对于许多的广义矩阵也可这样来作.
3. 对稀疏矩阵压缩存储的目的是什么 A 便于进行矩阵预算 B 便于输入和输出C节省存储空间 D降低运算世间复杂度
对稀疏矩阵压缩存储的目的是:C节省存储空间和D降低预算时间复杂度,如果是单选题,那么应该选C节省存储空间。
矩阵中非零元素的个数远远小于矩阵元素的总数,并且非零元素的分布没有规律,则称该矩阵为稀疏矩阵(sparse matrix);与之相区别的是,如果非零元素的分布存在规律(如上三角矩阵、下三角矩阵、对角矩阵),则称该矩阵为特殊矩阵。
稀疏矩阵的计算速度更快,因为M AT L A B只对非零元素进行操作,这是稀疏矩阵的一个突出的优点.假设矩阵A,B中的矩阵一样.计算2*A需要一百万次的浮点运算,而计算2*B只需要2 0 0 0次浮点运算.因为M AT L A B不能自动创建稀疏矩阵,所以要用特殊的命令来得到稀疏矩阵.
对于一个用二维数组存储的稀疏矩阵Amn,如果假设存储每个数组元素需要L个字节,那么存储整个矩阵需要m*n*L个字节.但是,这些存储空间的大部分存放的是0元素,从而造成大量的空间浪费.为了节省存储空间,可以只存储其中的非0元素.
4. 如何存储和计算超大规模稀疏矩阵
代码如下:
#生成单位矩阵,用普通矩阵无法创建,所以用sparseMatrix来创建。
num_samples=180000
rownumber=c(1:num_samples)
colnumber=c(1:num_samples)
value=c(rep(1,each=num_samples))
M=sparseMatrix(rownumber,colnumber,x=value)
#给单位矩阵赋值,全部赋值完成后是一个4*50*180000个数值的对称稀疏矩阵。
for(i in 1:num_samples){
w=W #有50个浮点型数值。
n=neighbors #有50个整型数值。
M=M-t(w)
M=M-w
M=M+w%*%t(w)
}
5. 稀疏矩阵的压缩存储只需要存储什么
非零元素。
对于一个用二维数组存储的稀疏矩阵Amn,如果假设存储每个数组元素需要L个字节,那么存储整个矩阵需要m*n*L个字节。但是,这些存储空间的大部分存放的是0元素,从而造成大量的空间浪费。为了节省存储空间,可以只存储其中的非0元素。
(5)稀疏矩阵存储扩展阅读
稀疏矩阵算法的最大特点是通过只存储和处理非零元素从而大幅度降低存储空间需求以及计算复杂度,代价则是必须使用专门的稀疏矩阵压缩存储数据结构。稀疏矩阵算法是典型的不规则算法,计算访存比很低,并且计算过程中的访存轨迹与稀疏矩阵的稀疏结构相关。
6. 特殊矩阵和稀疏矩阵哪一种采用压缩存储会失去随机存取的功能为什么
稀疏矩阵压缩存储后,必会失去随机存取功能.
稀疏矩阵在采用压缩存储后将会失去随机存储的功能.因为在这种矩阵中,非零元素的分布是没有规律的,为了压缩存储,就将每一个非零元素的值和它所在的行、列号做为一个结点存放在一起,这样的结点组成的线性表中叫三元组表,它已不是简单的向量,所以无法用下标直接存取矩阵中的元素.
7. 对稀疏矩阵进行压缩存储的目的是什么
对稀疏矩阵进行压缩存储目的是节省存储空间。
存储矩阵的一般方法是采用二维数组,其优点是可以随机地访问每一个元素,因而能够较容易地实现矩阵的各种运算。
但对于稀疏矩阵而言,若用二维数组来表示,会重复存储了很多个0了,浪费空间,而且要花费时间来进行零元素的无效计算。所以必须考虑对稀疏矩阵进行压缩存储。
(7)稀疏矩阵存储扩展阅读
优点
稀疏矩阵的计算速度更快,因为MATLAB只对非零元素进行操作,这是稀疏矩阵的一个突出的优点。假设矩阵A,B中的矩阵一样,计算2*A需要一百万次的浮点运算,而计算2*B只需要2000次浮点运算。
因为MATLAB不能自动创建稀疏矩阵,所以要用特殊的命令来得到稀疏矩阵。算术和逻辑运算都适用于稀疏矩阵。对于一个用二维数组存储的稀疏矩阵Amn,如果假设存储每个数组元素需要L个字节,那么存储整个矩阵需要m*n*L个字节。
8. 数组的应用,稀疏矩阵如何存储要写出C++程序代码…谢谢!
#include <iostream>
#include <string>
using namespace std;
void main()
{
int student_age[3][2] = {19 ,20 ,19 ,21 ,22 ,20};//2维数组就相当于一个简单的矩阵 ,用此矩阵来存储 学生的年龄 int length_col = sizeof(student_age[0])/4;//每一列的个数
int length_row = sizeof(student_age)/sizeof(student_age[0]);////每一行的个数
for(int i = 0;i <length_row ; i++)
{
cout << "数组中第" << i<< "行" << "学生的年龄为:" << endl;
for(int j = 0 ; j <length_col ; j++)
{
cout << student_age[i][j] << endl;
}
}}
9. 特殊矩阵和稀疏矩阵哪一种压缩存储后失去随机存取的功能为什么
稀疏矩阵压缩存储后,必会失去随机存取功能。稀疏矩阵在采用压缩存储后将会失去随机存储的功能。因为在压缩存储当中,非零元素的分布是没有规律的,为了压缩存储,就将每一个非零元素的值和它所在的行、列号做为一个结点存放在一起,即三元组表,它不是简单的向量,所以无法用下标直接存取矩阵中的元素。
10. 稀疏矩阵一般的压缩存储方法有两种
分别是三元组和十字链表。
三元组是指形如((x,y),z)的集合(这就是说,三元组是这样的偶,其第一个射影亦是一个偶),常简记为(x,y,z)。
三元组是计算机专业的一门公共基础课程——数据结构里的概念。主要是用来存储稀疏矩阵的一种压缩方式,也叫三元组表。假设以顺序存储结构来表示三元组表(triple table),则得到稀疏矩阵的一种压缩存储方式,即三元组顺序表,简称三元组表。
十字链表(Orthogonal List)是有向图的另一种链式存储结构。该结构可以看成是将有向图的邻接表和逆邻接表结合起来得到的。用十字链表来存储有向图,可以达到高效的存取效果。同时,代码的可读性也会得到提升。
拓展资料:
十字链表(Orthogonal List)是有向图的另一种链式存储结构。可以看成是将有向图的邻接表和逆邻接表结合起来得到的一种链表。在十字链表中,对应于有向图中每一条弧都有一个结点,对应于每个定顶点也有一个结点。
十字链表之于有向图,类似于邻接表之于无向图。
也可以理解为 将行的单链表和列的单链表结合起来存储稀疏矩阵称为十字链表, 每个节点表示一个非零元素。
三元组解释:
1、所谓“三元组”是指图形的几何元素构成、图线间的拓扑关系和尺寸约束。如果一组图形的前二元相同而只是尺寸大小不同,则这组图形构成一族形状相同的系列化图形。
2、把组成一个元素的三个数称为三元组。一个三元组包含以下三部分的内容SDO_STARTING_OFFSET表明每个几何元素的第一个坐标在SDO_ORDINATES数组中的存储位置。
3、…Mt:N2)的表示称为三元组...…Mt称为标号,N1、N2为结点R为关系。当n≠0时,称Li为对结点N1的修饰。t≠0时,称Mj为对结点N2的修饰。
参考资料:网络:十字链表
网络:三元组