C++ 用三元组表示法存储稀疏矩阵
若有一个矩阵(m*n),其中非0元素个数远少于数值为0的元素个数,若开辟一个m*n大空间,来存储这样一个很多元素值为0的矩阵,浪费空间,于是我们只存储这些非0的元素的下标及数值
用一个结构体——三元组,来表示这些非零元素的行r,列c,数值v的信息
typedef struct //三元组
{
int r; //非零元所在的行
int c; //非零元所在的列
int v; //非零元的值
} node;
一个完整矩阵的包括这些信息需要存储:矩阵的总行m,总列n,非零元的个数N,以及这些非零元的信息,所以再将这些信息用一个结构体来表示出来,其中非零元的相关信息用一个一维数组node a[100]来存储
为什么用一维数组就可以来存储矩阵(二维数组)的信息呢
这就是结构体node的方便之处 —— node将行、列、数值打包成一个整体
typedef struct
{
int m; //稀疏矩阵的行数
int n; //稀疏矩阵的列数
int N; //稀疏矩阵中非零元的个数
node a[]; //存储非零元的数组a
}Matrix;
定义 Matrix M;
查找稀疏矩阵中是否存在值为p的元素
存在,则输出所在的行M.a[i].r,列M.a[i].c,
不存在,输出ERROR
首先用for循环实现,终止条件为i==M.N
如果匹配不成功,输出ERROR。如何表示匹配不成功呢,这里用一个flag来标记,0表示不成功,flag初值为0,
如果匹配成功,后续就不用再继续匹配,flag==1;输出该元素所在的行M.a[i].r,列M.a[i].c 同时用break结束循环
在for循环外判断flag的值 if(flag==0),则表示从i=0到i=M.N-1,都未匹配成功 那么cout<<"ERROR";
void search(Matrix M,int p) //查找p是否在稀疏矩阵中
{
int i=;
int flag=;
for(i=;i<M.N;i++) //匹配数组a中元素的value和p
{
if(p==M.a[i].v) //相等
{
flag=;
cout<<M.a[i].r<<" "<<M.a[i].c<<endl; //输出所在的行列
break; //跳出for循环
}
}
if(flag==) //若未匹配成功,输出ERROR
cout<<"ERROR"<<endl;
}
C++ 用三元组表示法存储稀疏矩阵的更多相关文章
- 三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述)
三元组表压缩存储稀疏矩阵实现稀疏矩阵的快速转置(Java语言描述) 用经典矩阵转置算法和普通的三元组矩阵转置在时间复杂度上都是不乐观的.快速转置算法在增加适当存储空间后实现快速转置具体原理见代码注释部 ...
- 三元组顺序结构实现稀疏矩阵相加,行序优先(Java语言描述)
不用十字链表也可以稀疏矩阵相加时间复杂度最坏情况达到O(tuA + tuB);思路比较简单就不赘述了,代码如下: 三元组: package 行逻辑链接的顺序表实现稀疏矩阵的相乘; public cla ...
- 转载:稀疏矩阵存储格式总结+存储效率对比:COO,CSR,DIA,ELL,HYB
http://www.cnblogs.com/xbinworld/p/4273506.html 稀疏矩阵是指矩阵中的元素大部分是0的矩阵,事实上,实际问题中大规模矩阵基本上都是稀疏矩阵,很多稀疏度在9 ...
- 稀疏矩阵存储格式总结+存储效率对比:COO,CSR,DIA,ELL,HYB
稀疏矩阵是指矩阵中的元素大部分是0的矩阵,事实上,实际问题中大规模矩阵基本上都是稀疏矩阵,很多稀疏度在90%甚至99%以上.因此我们需要有高效的稀疏矩阵存储格式.本文总结几种典型的格式:COO,CSR ...
- 稀疏矩阵三元组表快速转置(C语言实现)
本来准备昨天下午写的,但是因为去参加360众测靶场的考核耽搁了,靶场的题目还是挺基础的. 继续学习吧. 使用黑色墨水在白纸上签名就像由像素点构成的稀疏矩阵.如图4所示. 图4 手写体签名 [问题]请将 ...
- javascript实现数据结构: 稀疏矩阵之三元组线性表表示
稀疏矩阵(Sparse Matrix):对于稀疏矩阵,目前还没有一个确切的定义.设矩阵A是一个n*m的矩阵中有s个非零元素,设 δ=s/(n*m),称δ为稀疏因子, 如果某一矩阵的稀疏因子δ满足δ≦ ...
- 数据结构实验之数组二:稀疏矩阵(SDUT 3348)
Problem Description 对于一个n*n的稀疏矩阵M(1 <= n <= 1000),采用三元组顺序表存储表示,查找从键盘输入的某个非零数据是否在稀疏矩阵中,如果存在则输出O ...
- java实现稀疏矩阵的压缩与解压
任务要求 把棋盘当作一个稀疏矩阵,0表示没棋,1表示黑棋,2表示蓝棋. 把该稀疏矩阵压缩以三元组形式表示并以文件形式保存,再写另一个程序读取文件中的信息把压缩后的三元组还原成原来的稀疏矩阵. 其中三元 ...
- C++ 特殊矩阵的压缩存储算法
1. 前言 什么是特殊矩阵? C++,一般使用二维数组存储矩阵数据. 在实际存储时,会发现矩阵中有许多值相同的数据或有许多零数据,且分布呈现出一定的规律,称这类型的矩阵为特殊矩阵. 为了节省存储空间, ...
随机推荐
- 4337: BJOI2015 树的同构
题解: 树的同构的判定 有根树从根开始进行树hash 先把儿子的f进行排序 $f[i]=\sum_{j=1}^{k} { f[j]*prime[j]} +num[i]$(我没有仔细想这样是不是树是唯一 ...
- P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 记忆化搜索dfs
题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定奶牛必须遵 ...
- 易忘&有用 的冷门Anaconda命令
Python接触有将近2年了,但是在倒腾anaconda环境的时候,总有一些命令忘记需要查半天,今天趁着配置pytorch,特此总结一下,留待后用. 1. 创建和删除环境 创建环境 conda cre ...
- Wxpython入门
Wxpython入门 api文档以及中文教程: https://pan.baidu.com/s/1TDTgHg9Mwc74ODQy68YnlQ 提取码:354n 入门示例 frame=wx.Frame ...
- [jzoj]2505.【NOIP2011模拟7.29】藤原妹红
Link https://jzoj.net/senior/#main/show/2505 Description 在幻想乡,藤原妹红是拥有不老不死能力的人类.虽然不喜欢与人们交流,妹红仍然保护着误入迷 ...
- CSS_圣杯布局和双飞翼布局
参考: 圣杯布局的来历是2006年发在a list part上的这篇文章: http://alistapart.com/article/holygrail 双飞翼布局介绍-始于淘宝UED: http: ...
- python全栈开发 * mysql数据类型 * 180829
* 库的操作 (增删改查)一.系统数据库查看系统库命令 show databases1.information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列 ...
- java基础 第六章课后习题
1.说明循环结构中break语句和continue语句的区别. 在循环结构中 break语句 是结束程序运行. continue语句是结束本句程序 不是结束程序. 2.使用for循环结构实现,从键盘 ...
- html中的列表
无序列表(什么前面默认一个实心的黑原点) <ul> <li>什么</li> <li>什么</li> <li>什么</li& ...
- MySql 主从复制 mysql-proxy实现读写分离
1.安装和配置Docker 服务器版本阿里云CentOS7.4 docker版本18.06.0-ce docker安装步骤https://docs.docker.com/install/linux/d ...