当前位置:首页 » 存储配置 » 稀疏矩阵三元组存储

稀疏矩阵三元组存储

发布时间: 2022-06-29 11:39:36

1. 稀疏矩阵三元组存储结构的定义及其有关算法的实现

/*我写的一个例子,基本上将稀疏矩阵三元组存储结构的定义和其有关的算法都实现了,你可以借一本关于数据结构c语言实现的书来看一下*/
#include<stdio.h>
#define MAXSIZE 1000//非零元素的个数最多为1000
typedef struct {
int row;
int col;
int e;
}Triple;
typedef struct{
Triple data[MAXSIZE];//非零元素的三元组表
int m;//矩阵的行数
int n;//矩阵的列数
int non_zero_num;//非零元数的个数
}XSMatrix;
XSMatrix XSM_Info_Input(XSMatrix s){
int i;
printf("输入矩阵的行数:");
scanf("%d",&s.m);
printf("输入矩阵的列数:");
scanf("%d",&s.n);
printf("输入矩阵的非零元素的个数:");
scanf("%d",&s.non_zero_num);
for(i=0;i<s.non_zero_num;i++){
printf("输入第%d个非零元数的信息:\n",i+1);
printf("行下标:");
scanf("%d",&s.data[i].row);
printf("列下标:");
scanf("%d",&s.data[i].col);
printf("元素的值");
scanf("%d",&s.data[i].e);
}
return s;
}
void XSM_Info_Output(XSMatrix s){
int i;
printf("\n稀疏矩阵行数和列数:%d\t%d\n",s.m,s.n);
printf("稀疏矩阵三元组表如下:\n");
printf("行下标\t列下标\t值\n");
for(i=0;i<s.non_zero_num;i++){
printf("%d\t%d\t%d\n",s.data[i].row,s.data[i].col,s.data[i].e);
}
}
//列序递增转置法
XSMatrix TransXSM(XSMatrix s){
XSMatrix d;
int i,j,k=0;
d.m=s.n;
d.n=s.m;
d.non_zero_num=s.non_zero_num;
for(i=0;i<s.n;i++){
for(j=0;j<s.non_zero_num;j++){
if(s.data[j].col==i)
{
d.data[k].row=s.data[j].col;
d.data[k].col=s.data[j].row;
d.data[k].e=s.data[j].e;
k++;
}
}
}
return d;
}
main(){
XSMatrix source,dest;
source=XSM_Info_Input(source);
XSM_Info_Output(source);
dest=TransXSM(source);
XSM_Info_Output(dest);
}

2. 利用三元组存储任意稀疏矩阵时,在什么条件下能节省存储空间 简答题

若一个稀疏矩阵有T个非零元素,则需要T+1行的三元组来表示稀疏矩阵.一般对于M*N的矩阵来说,只要满足3(T+1)<=M*N 这个条件,使用三元组存储可以节省空间.

3. 数据结构中怎样给出一个 6*6 的稀疏矩阵,并将其转化为三元组存储

1.给出6*6的稀疏矩阵,可以初始化输入,或者用二个for循环输入
2.至于转化为三元组存储,可以定义三元组结构体,再定义三元组顺序表
3.用for循环和if语句将稀疏矩阵中的数据赋予给三元组表
思路给你,自己写比较能提升编程能力
希望我的回答能够帮助到您,谢谢。

4. 三元组表与稀疏矩阵,怎么转换要求法。最好文字表述

l->e=(list)malloc((MAXSIZE+1)*sizeof(ElemType));// 这句在VC不能通过编译,因为e是elemtype类型,分配的空间是list类型,不匹配。

三元组,第1列是行号,第2列是列号,第3列是非零元素的值。假设以顺序存储结构来表示三元组表(triple table),则得到稀疏矩阵的一种压缩存储方式,即三元组顺序表,简称三元组表。

(4)稀疏矩阵三元组存储扩展阅读:

对于在实际问题中出现的大型的稀疏矩阵,若用常规分配方法在计算机中储存,将会产生大量的内存浪费,而且在访问和操作的时候也会造成大量时间上的浪费,为了解决这一问题,从而产生了多种解决方案。

由于其自身的稀疏特性,通过压缩可以大大节省稀疏矩阵的内存代价。具体操作是:将非零元素所在的行、列以及它的值构成一个三元组(i,j,v),然后再按某种规律存储这些三元组,这种方法可以节约存储空间。

5. 采用基于稀疏矩阵的三元组压缩存储方法,实现m×n矩阵的快速转置

#include<iostream>
using
namespace
std;
class
matrix
{
public:
int
data[100][100];
int
m,n;
};
typedef
int
spmatrix[100][3];
void
Init(matrix&
mx);//稀疏矩阵初始化
void
SpmDisplay(spmatrix
spm);//显示三元组表示的矩阵
void
Compressmatrix(matrix
A,spmatrix
B);//将稀疏矩阵转换为三元组矩阵
void
Transpmatrix(spmatrix
B,spmatrix&
C);//将三元组矩阵转置
int
main()
{
matrix
mx;
spmatrix
spm1,spm2;
//矩阵初始化
Init(mx);
//矩阵转为三元组
Compressmatrix(mx,spm1);
//显示三元组矩阵
SpmDisplay(spm1);
//将三元组转置存放到spm2中
Transpmatrix(spm1,spm2);
//显示转置后的三元组
SpmDisplay(spm2);
return
0;
}

6. 三元组存储稀疏矩阵的好处是神马呢急求!!

三元组仅存储矩阵中不为零的元素,节省了存储空间。
缺点是增加运算的复杂性,尤其是随机存取矩阵元素时。

7. 三元组表示稀疏矩阵是什么

三元组表示稀疏矩阵如下:

从方法上讲,所谓的三元组法表示稀疏矩阵是:将非零元素所在的行、列以及它的值构成一个三元组(i、j、v),然后再按某种规律存储这些三元组,这种方法可以节约存储空间。

对于稀疏矩阵,采用压缩存储方法时,只存储非0元素。必须存储非0元素的行下标值、列下标值、元素值。因此,一个三元组唯一确定稀疏矩阵的一个非零元素。

稀疏矩阵和三元组的特点:

稀疏矩阵的概念是:一个m行n列的矩阵,若它的非零元个数特别少,即可称它为稀疏矩阵。只存储稀疏矩阵的非零元。除了存储非零元的值a以外,还必须记下它的行下标i和列下标j。反之,一个三元组唯一确定矩阵的一个非零元。因此,一个稀疏矩阵可由一个三元组数组和该矩阵的行列数来确定。

8. 稀疏矩阵一般的压缩存储方法有两种

分别是三元组和十字链表。

三元组是指形如((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的修饰。

参考资料:网络:十字链表

网络:三元组

9. 稀疏矩阵是怎样存储的

/*
稀疏矩阵的三元组顺序表存储表示
*/
# define MAX_SIZE 100//非零元个数的最大值
struct Triple
{
int i,j;//行下标,列下标
ElemType e;//非零元素值
};
struct TSMatrix
{
Triple data[MAX_SIZE+1];//非零元三元组表,data[0]未用
int mu,nu,tu;//矩阵的行数、列数和非零元个数
};

10. 三元组表示稀疏矩阵是什么

三元组表示稀疏矩阵是行列形式。为了方便某些矩阵运算,在按行优先存储的三元组表中,加入一个行表来记录稀疏矩阵中每行的非零元素在三元组表中的起始位置。

在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。

优点

稀疏矩阵的计算速度更快,因为 MATLAB 只对非零元素进行操作,这是稀疏矩阵的一个突出的优点。

假设矩阵 A,B 中的矩阵一样,计算 2*A 需要一百万次的浮点运算,而计算 2*B 只需要 2000 次浮点运算。

因为 MATLAB 不能自动创建稀疏矩阵,所以要用特殊的命令来得到稀疏矩阵。算术和逻辑运算都适用于稀疏矩阵。

对于一个用二维数组存储的稀疏矩阵 Amn ,如果假设存储每个数组元素需要 L 个字节,那么存储整个矩阵需要 m*n*L 个字节。但是,这些存储空间的大部分存放的是 0 元素,从而造成大量的空间浪费。为了节省存储空间,可以只存储其中的非 0 元素。

热点内容
通达信自定义板块在哪个文件夹 发布:2024-05-06 09:56:37 浏览:103
在linux搭建mqtt服务器搭建 发布:2024-05-06 09:52:00 浏览:558
windowspython23 发布:2024-05-06 09:27:50 浏览:746
编程ug开初 发布:2024-05-06 09:27:48 浏览:560
小白源码论坛 发布:2024-05-06 09:24:56 浏览:139
android进程重启 发布:2024-05-06 09:15:09 浏览:96
ie浏览器设置默认ftp 发布:2024-05-06 09:14:03 浏览:885
迈腾尊贵中控配置怎么使用 发布:2024-05-06 09:13:28 浏览:656
奥迪存储卡格式不正确请格式化存储卡 发布:2024-05-06 09:01:31 浏览:34
个人信用数据库 发布:2024-05-06 09:00:34 浏览:417