稀疏矩阵的压缩存储

news/2024/4/20 14:24:31/文章来源:https://blog.csdn.net/m0_68111267/article/details/127251574

目录

稀疏矩阵的定义

稀疏矩阵的转置

代码实现 

运行结果


 

稀疏矩阵的定义

假设在 m * n 的矩阵中,有 t 个元素不为零,且 t<<m*n,则称此矩阵为稀疏矩阵。按照常规的存储方法,稀疏矩阵很浪费内存空间,所以采取只存储非零元素的方式。但对于这类矩阵,通常零元素分布没有规律,为了能找到相应的元素,仅存储非零元素的值是不够的,还要记下它所在的行和列。对于稀疏矩阵,压缩存储的方式有很多种,如三元组顺序表,十字链表等。

稀疏矩阵的转置

【问题描述】

实现稀疏矩阵的三元组表存储和转置运算。

【输入形式】

输入一个整型的6阶稀疏矩阵。

【输出形式】

输出稀疏矩阵的三元组表形式,输出转置后的三元组表形式。

【样例输入】

10 0 0 0 0 0

0 -20 0 0 40 0

0 0 30 0 0 0

0 0 0 0 0 0

0 0 0 50 0 0

0 0 -60 0 0 70

【样例输出】

M

6 6 7

0 0 10

1 1 -20

1 4 40

2 2 30

4 3 50

5 2 -60

5 5 70

T

6 6 7

0 0 10

1 1 -20

2 2 30

2 5 -60

3 4 50

4 1 40

5 5 70

【样例说明】

M表示转置前矩阵,T表示转置后矩阵。6 6 7表示稀疏矩阵的mu,nu,tu,后面若干行为非零元素。(同行数据之间以空格分隔)

【评分标准】

采用三元组表结构存储矩阵。转置算法使用一般转置或快速转置算法均可。

代码实现 

算法实现基本步骤如下:

(1)M的行、列转换为T的列、行。

(2)按照M的列序来转置,找到M的每一列的非零元素,行列交换后顺序存储到T的三元组种。 

#include<stdio.h>
#define MAXSIZE 12500
typedef int ElemType;
typedef struct
{int i,j;ElemType e;	
}Triple;
typedef struct
{Triple data[MAXSIZE+1];int mu,nu,tu;}TSMatrix;
void InitSMatrix(TSMatrix *t)
{t->mu = 6;t->nu = 6;t->tu = 0;
}
void CreatSMatrix(TSMatrix *t)
{int x,q=1;int a = 0 , b = -1;while(a < 6){scanf("%d",&x);b ++ ;if(x != 0)     {t->tu ++;t->data[q].i = a;t->data[q].j = b;t->data[q].e = x;q ++ ;}if(b == 5){printf("\n");a ++;b = -1;		}}
}
void TransposeSMatrix(TSMatrix *M, TSMatrix *T)
{int p,q,col;	T->mu = M->nu;T->nu = M->mu;T->tu = M->tu;	if(T->tu){q=1;for(col=0;col<=M->nu-1;++col){		for(p=1;p<=M->tu;++p)		  if(M->data[p].j==col){T->data[q].i = M->data[p].j;T->data[q].j = M->data[p].i;T->data[q].e = M->data[p].e;++q;}}}
}
void Print(TSMatrix *t)
{printf("%d %d %d\n",t->mu,t->nu,t->tu);int q;for(q=1 ; q <= t->tu ; q++){printf("%d %d %d\n",t->data[q].i,t->data[q].j,t->data[q].e);}
}int main()
{TSMatrix M,T;InitSMatrix(&M);CreatSMatrix(&M);TransposeSMatrix(&M,&T);	printf("M\n");Print(&M);printf("T\n");Print(&T);return 0;
}

运行结果

428bf91a4b4c4c88bb767c2af5a419f7.png

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_398900.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习梦想家CMS内容管理系统-环境启动

gitee官网中项目的地址&#xff1a;首先准备里面提到的工具其中JDK8和MySQL5.7我们已经有了&#xff0c;现在需要准备另外的工具。 Spring Tool Suite 4&#xff08;STS&#xff09; 安装过程在《1-1-Spring Tool Suite 4&#xff08;STS&#xff09;的下载安装》 Redis 安装…

数字孪生在电网系统开发建设,如何选择可视化平台?

随着新能源发展规模持续增大&#xff0c;电网作为能源转换利用和输送配置的枢纽平台&#xff0c;其功能、结构和形态发生了深刻变化。同时&#xff0c;随着现代计算机技术发展&#xff0c;数字孪生成为电网向数字化转型、提高电网调度运行决策的准确性与实时性提供关键技术支撑…

初识数据库-MySQL数据库

文章目录数据库数据库的相关概念常见的关系型数据库管理系统MySQL数据库MySQL目录结构MySQL数据模型数据库 数据库的相关概念 数据库 存储数据的仓库&#xff0c;数据是有组织的进行存储英文&#xff1a; DataBase,简称 DB 数据库管理系统 管理数据库的大型软件英文&#xff…

震撼上新丨云和恩墨新一代数据库存储 zStorage 和数据库一体机 zData X 即将发布...

存储&#xff0c;在一定程度上可以称为数据库存储&#xff0c;存储与数据库的发展总是相生相随。技术上&#xff0c;数据库对高 I/O 频率、低时延、高可靠性的追求一直是存储更快、更高、更强需求的来源。商业上&#xff0c;两家影响世界的公司 Oracle 和 EMC 几乎同时起步于 1…

使用element ui的el-upload组件上传图片,记录一下

使用element ui的el-upload组件上传图片 效果预览 下面是实现效果,接口方面是把有两个接口,一个接口上传图片,传参是图片和路径,返回值是路径。另一个接口是上传表单内容(用户,地址,照片),照片是传一个路径。具体实现 html <el-form-item label="上传照片"…

第二十一章 函数递归

一、函数递归调用介绍 函数不仅可以嵌套定义,还可以嵌套调用,即在调用一个函数的过程中,函数内部又调用另一个函数,而函数的递归调用指的是在调用一个函数的过程中又直接或间接地调用该函数本身。例如在调用f1的过程中,又调用f1,这就是直接调用函数f1本身def f1():print(…

springboot(三)

视频链接&#xff1a;https://www.bilibili.com/video/BV1XQ4y1m7ex/?vd_source9545770e4a2968c05878ffac8589ec6c 视频选集&#xff1a;P58— P92 文章目录1.接口架构风格-RESTful1.1 认识REST1.2 RESTful的注解1.2.1 PathVariable1.2.2 PostMapping1.2.3 DeleteMapping1.2.4…

分布式缓存

本文介绍关于缓存的常用设计模式。以及如何保证缓存的一致性进行分类讨论。 还会介绍关于缓存失效的常见问题&#xff0c;以及针对缓存失效的解决方法。 在高并发的环境下&#xff0c;比如春节抢票大战&#xff0c;一到放票的时间节点&#xff0c;分分钟大量用户以及黄牛的各种…

魔改xxl-job,彻底告别手动配置任务!

xxl-job是一款非常优秀的任务调度中间件,轻量级、使用简单,但是苦于手动注册任务久矣,今天就来魔改一下,实现任务的自动注册!原创:微信公众号 码农参上,欢迎分享,转载请保留出处。哈喽大家好啊,我是Hydra。 xxl-job是一款非常优秀的任务调度中间件,轻量级、使用简单、…

12个小细节让普源示波器使用更加高效(上)

俗话说细节决定成败&#xff0c;示波器作为电子测量的第一工具&#xff0c;虽然使用简单&#xff0c;但并不是每个人都能注意到细节。运用好细节&#xff0c;可以使你的示波器使用更加的便捷。以下由安泰测试带来普源示波器测量相关的12个小细节可作为示波器常识快速自检的小文…

Spring Boot(4):@Import注解和@Conditional注解

说明&#xff1a;基于atguigu学习笔记。 在了解spring boot自动配置原理前&#xff0c;再来了解下两个注解Import注解和Conditional注解。 Import Import注解主要用于导入某些特殊的Bean&#xff0c;这些特殊的Bean和Bean Definitaion 有关。 主要用于导入Configuration 类…

Python实现桌面挂件,做一只可爱的桌面宠物~

文章目录嗨嗨&#xff0c;大家好 ~ 我是小圆相关文件开发工具相关模块&#xff1a;环境搭建安装原理简介1.初始化一个窗口组件&#xff1a;效果2.设置一下窗口的属性&#xff1a;随机导入一张图片&#xff0c;看效果随机导入一个宠物的所有图片的函数代码3.宠物随机出现在桌面上…

服务端渲染的探索与实践

服务端渲染(SSR)近两年炒得很火热,相信各位同学对这个名词多少有所耳闻。本节我们将围绕“是什么”(服务端渲染的运行机制)、“为什么”(服务端渲染解决了什么性能问题 )、“怎么做”(服务端渲染的应用实例与使用场景)这三个点,对服务端渲染进行探索。 服务端渲染是一…

GOM引擎登录器的研究,逆向技术在这款GOM20151108引擎上是一个大舞台

最近遇到一个逆向类课题&#xff0c;是关于GOM20151108版本对应登录器研究。刚接触传奇的时候是2002年&#xff0c;那时候网吧玩SF&#xff0c;都是手动用IP直接连接&#xff0c;当时的一款 联创传奇 很好玩&#xff0c;有传送戒子&#xff0c;木域戒指&#xff0c;土域戒指&am…

不会 Vue,但不影响我学 diff 算法

前言 现在社会各行各业大都面临着寒冬&#xff0c;互联网行业最近还出现了裁员潮&#xff0c;导致前端是越来越卷&#xff0c;普通学校的应届生不仅要跟985、211毕业的学生以及研究生进行竞争&#xff0c;甚至还需要和最近刚被裁的、有了几年工作经验的程序员竞争&#xff0c;…

page.json

uni-app需要给page.json文件需要进行配置路由,否则会不报错,也跳转不过去

【数模/启发式算法】蚁群算法

文章目录简介符号说明核心思想流程图文章使用到的测试函数基本步骤蚁群算法代码简介 蚁群算法是一种用来寻找优化路径的概率型算法。它由Marco Dorigo于1992年在他的博士论文中提出&#xff0c;其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。 这种算法具有分布计算、信息正…

Arduino播放声音

玩软件有点虚无&#xff0c;没有实际东西&#xff0c;所以接下来要体验下硬件与软件结合。 1 Arduino Arduino是一种包含硬件&#xff08;各种型号的Arduino板&#xff09;和软件&#xff08;Arduino IDE&#xff09;的开源电子平台。硬件部分是可以用来做电路连接的Arduino电…

小白学习Java第四十三天

Git概述 &#xff08;一&#xff09;什么是Git Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理&#xff0c;是软件配置管理的核心思想之一…

设计模式学习笔记(五) - 观察者模式 Observer

目录 观察者模式 Observer 一、背景描述 Version 1 (面向过程) Version 2 (面向对象) Version 3 (单个观察者) Version 4 (多个观察者) Version 5 (分离观察者与被观察者) 二、不同事件下的观察者模式 三、事件本身也可以形成继承体系 四、观察者常用场景 观察者模式…