c语言稀疏矩阵的存储,C语言:数据结构-稀疏矩阵的压缩存储

https://m.toutiaocdn.com/group/6712258385510662667/?app=news_article&timestamp=1562855219&req_id=201907112226580100230300187166DEA&group_id=6712258385510662667

(1)稀疏矩阵的特点

在一个m×n的矩阵中,设矩阵中有i个元素不为零,并令△=i/(m×n),称△为稀疏因子。通常当△≤0.05时。认为该矩阵为稀疏矩阵。

对这类矩阵实现压缩存储的基本思路是只需要存储其非零元素,但由于稀疏矩阵中零元素的分布没有一定规律,所以必须同时记下零元素所在的行和列。才能对矩阵有效的缩压,并能正确的恢复它。

(2)稀疏矩阵的压缩存储原理

只存储非零元素ai,j和相应的行、列序号i、j。具体方法:对稀疏矩阵中每一个非零元素设定一个三元组(i,j,ai,j),将所有三元组按行优先排列,组成一个三元组表(线性表)。只要存储三元组表和该矩阵的行、列数,就能唯一确定该矩阵。

例5.8 按稀疏矩阵的压缩存储方法,求矩阵A的存储信息。

165799785_1_20190711102948350

稀疏矩阵A

分析:设左上角的元素所在位置为第1行第1列,矩阵的行、列及非零元素个数为:(5,6,6)相应的三元组表为:(1,2,12)(1,3,9)(3,1,3)(3,6,14)(4,3,24)(5,2,16)。

(3)存储方法

通过上述转换,对稀疏矩阵的压缩存储,化为对其三元组表和相关信息的存储。

用结构体类型描述三元组

typedef struct { int i , j ; detetype e; }triple d; /* 三元组类型 */

结构体triple的成员i,j分别是非零元素的行、列下标,成员e是非零元素。 triple d 说明了triple类型的结构体变量d,并分配了存储单元,如图5-9(a)所示。triple data [10]说明了triple类型的有10个数组元素的结构体数组,如图5-9(b)所示。

165799785_2_20190711102948491

三元组类型的变量和数组的结构图

用结构体类型描述三元组表和相关信息typedef struct{ int mu, nu, tu ;triple data [ max+1] ; /*max+1是最多的元素个数*/}triplegrupe; /*三元组表类型*/triplegrupe a;

说明了三元组表类型的变量a,有4个成员项,mu﹑nu分别表示稀疏矩阵的行﹑列数,tu表示稀疏矩阵中的非零元素的个数;data表示非零元素的三元组表。

例5.9

165799785_3_20190711102948585

矩阵

165799785_4_20190711102948679

稀疏矩阵a的存储结构

(4)算法举例

例5.10 如图5-12所示,求压缩存储的稀疏矩阵A的转置矩阵AT。

165799785_5_20190711102948757

A与其转置矩阵AT

分析:

由A得到三元组表:

((1,1,1),(1,3,5),(1,5,2),(2,1,7),(3,1,3),(3,3,6))

把上述三元组表中的各三元组的行﹑列互换得到的AT的三元组表为:

((1,1,1),(3,1,5),(5,1,2),(1,2,7),(1,3,3),(3,3,6))

存在问题:按上述方法得到的转置后矩阵AT的新三元组表没有能按行序为主序存储。

为了使新三元组表要按行序为主序存储,就要按原表的列为主序排列。而原三元组表是按行序为主存储的,所以同一列中的各行已按行序由小到大顺序排列。

方法如下:

按第1,2,3,…n列的顺序,逐次扫描A相应的三元组表,依次把得到的第1,2,…,n列的三元组中的行、列互换,存入新三元组表。每次扫描中,因为相同列的三元组按扫描的先后顺序存入。这保证了新三元组表以行序为主针对A的三元组表:

以第1列扫描,找到:(1,1,1),(2,1,7),(3,1,3)。

交换行和列的坐标存入新表。

以第2列扫描,未找到。

以第3列扫描,找到:(1,3,5),(3,3,6)。

交换行和列的坐标存入新表。

以第4列扫描,未找到。

以第5列扫描,找到:(1,5,2)。

交换行和列的坐标存入新表。

新表为:

(1,1,1),(1,2,7),(1,3,3),(3,1,5),(3,3,6),(5,1,2)

程序

void transpose (triplegrupe a, tripletgrupe b) { int p,q,col; b.mu=a.nu; b.nu =a.mu; b.tu =a.tu; if(b.tu) { q=1; for(col=1 ; col≤a.nu; col++) for(p=1 ; p≤a.tu; p++) if(a.data[p].j==col) { b.data[q].i=a.data[p].j; b.data[q].j= a.data[p].i; b.data[q].v=a.data[p].e; q++; } } }

其中:

a是稀疏矩阵的三元组表,b是转置矩阵的三元组表;

p是稀疏矩阵的三元组数组下标.q是转置矩阵的三元组数组下标;

a.mu是稀疏矩阵的行数,a.nu是稀疏矩阵的列数;

a.tu是稀疏矩阵三元组数元素的个数;

col是循环变量。

在稀疏矩阵三元组中从第1列扫描到a.nu列,若找到相应列的三元组,则把行﹑列互换存入转置矩阵的三元组。

存储变化示意图

转置前:如图5-13(a)、图5-13(b)、图5-13(c)所示。

转置后:如图5-13(d)、图5-13(e)、图5-13(f)所示。

165799785_6_20190711102948866

程序运行前后存储变化示意图(a)矩阵A;(b)矩阵A的行﹑列信息;(C)矩阵A的三元组数组

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

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

相关文章

计算机C语言课交作业怎么交,第一份c语言作业

2.1 你对软件工程专业或者计算机科学与技术专业了解是怎样?•答案: 软件工程专业是个年轻的专业,紧跟这个信息化的新时代。我学习它是因为感兴趣,经过一周的学习,我了解了一些 该专业课程主要是c语言程序设计和计算机导…

技术淘宝

? ? ? ? 精度前端学习 —— 前端开发100天(置顶) http://alloyteam.github.io/CodeGuide/https://github.com/AlloyTeam/CodeGuide cmd控制台的小技巧:可以直接将文件夹/文件丢进去,这样就会打印出该路径了。 舒服的字体家族…

vue 导出_Vue核心知识:8.3 vuex在vue-cli中的应用,文件之间的导出与引入

问题:vuex在vue-cli中的应用第一步:npm下载vuex资源包:npm install vuex --save第二步:在 src/main.js 中引入import Vue from vue import Vuex from vuexVue.use(Vuex)import store from ./vuex/store第三步:在 src 下…

android界面设计字体大小,Andoird用户界面设计上手指南:设置字体大小

教程详解技术应用: AndroidOS / Android SDK难易程度: 简单预计完成时间: 15分钟【51CTO译文】在本文中,我们将介绍一些简单的处理方式,帮助开发人员轻松编写出能够应对各类设备型号的应用程序文本方案,同时为用户提供自定义文字尺寸功能。别…

回溯算法解决八皇后_4皇后问题和使用回溯算法的解决方案

回溯算法解决八皇后4-皇后问题 (4 - Queens problem) In 4- queens problem, we have 4 queens to be placed on a 4*4 chessboard, satisfying the constraint that no two queens should be in the same row, same column, or in same diagonal. 在4个皇后问题中 &#xff0c…

怎么重置blockinput的锁_OPPOA9锁屏密码忘了怎么办? OPPO忘记锁屏密码的解决办法...

看点:iPhone X原装屏与国产屏有哪些区别?看点:换7P、8P屏幕:C11和DTP和DKH的区别狮淘:不锈钢拆机片5个只需9.9元!包邮!每天10名OPPOA9锁屏密码忘了怎么办?OPPO A9手机忘记了锁屏密码…

Android的面孔_Actiyity

一、什么是Activity&#xff1f; 简单的说&#xff1a;Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面。在一个应用程序中通常由多个Activity构成&#xff0c;都会在Manifest.xml中指定一个主的Activity&#xff0c;如下设置 <actionandroid:name"android.in…

vsco怎么两个滤镜叠加_10 款超美的 VSCO 调色滤镜,怎么用都好看!

VSCO 里的滤镜简单 又 好看可太让人喜欢了&#xff01;但是 VSCO 的滤镜实在太多太多了有点让人眼花缭乱~今天旅拍菌请来了 摄影博主 丹丹儿啊专门来为大家盘点一波超美的 VSCO 滤镜合集&#xff01;怎么用 都很好看~微博&#xff1a;丹丹儿啊01滤镜&#xff1a;1ND1锐化&#…

Kubernetes Master High Availability 高级实践

才云科技云开源高级工程师唐继元受邀DBAplus社群&#xff0c;在线分享《Kubernetes Master High Availability 高级实践》&#xff0c;介绍如何构建Kubernetes Master High Availability环境。 以下是分享实录&#xff1a; 大家好&#xff0c;我是才云科技的唐继元&#xff0c;…

分布式系统的唯一ID

2019独角兽企业重金招聘Python工程师标准>>> 需求 为什么需要唯一ID 让分布式系统中的需要辨别的元素&#xff0c;都能有唯一的辨识标志。 几乎所有的业务系统&#xff0c;都有生成一个记录标识的需求&#xff0c;例如&#xff1a; 消息标识&#xff1a;message-id订…

android放微信@功能,Android仿微信语音消息的录制和播放功能

一、简述效果&#xff1a;实现功能&#xff1a;长按Button时改变Button显示文字&#xff0c;弹出Dialog(动态更新音量)&#xff0c;动态生成录音文件&#xff0c;开始录音&#xff1b;监听手指动作&#xff0c;规定区域。录音状态下手指划出规定区域取消录音&#xff0c;删除生…

sap中泰国有预扣税设置吗_泰国的绘图标志| Python中的图像处理

sap中泰国有预扣税设置吗A colored image can be represented as a 3 order matrix. The first order is for the rows, the second order is for the columns and the third order is for specifying the color of the corresponding pixel. Here we use the BGR color format…

Attach Volume 操作(Part II) - 每天5分钟玩转 OpenStack(54)

上一节我们讨论了 attach volume 操作中 cinder-api 的工作&#xff0c;本节讨论 cinder-volume 和 nova-compute 如何将 volume attach 到 Instance。 cinder-volume 初始化 volume 的连接 cinder-volume 接收到 initialize_connection 消息后&#xff0c;会通过 tgt 创建 ta…

FMDB的介绍

2019独角兽企业重金招聘Python工程师标准>>> FMDB方法的介绍 1.首先我们需要创建一个FMDatabase实例&#xff1a; (FMDatabase*)DataBaseSigonInstance { //数据库初始化 NSString *homeDir NSHomeDirectory(); //NSLog("%",homeDir); NSString *dbPath …

网络克隆软件_网文生成器,克隆的是骗钱“病毒”

文章克隆器页面。图据北京晚报如今不论男女老少&#xff0c;多半喜欢用手机收集信息、浏览自己关注的话题。有的时候&#xff0c;人们会发现&#xff0c;不少亲朋发来的链接或者公众号推送的文章&#xff0c;长得特别像&#xff0c;但多少有那么些微不同。其实&#xff0c;不是…

使用python 对图片进行水印,保护自己写的文章

1&#xff0c;关于文章被爬 说起来挺桑心的&#xff0c;好不容易写的文章&#xff0c;被爬走。 用个搜索引擎搜索都不是在第一位&#xff0c;写的文章全给这些网站提供流量了。 这种网站还居多广告。 还是抱怨少点吧。csdn对于这些事情也是无所作为啊。 最起码的防盗链也不…

android layout_width 属性,android:layout_weight属性详解

在android开发中LinearLayout很常用&#xff0c;LinearLayout的内控件的android:layout_weight在某些场景显得非常重要&#xff0c;比如我们需要按比例显示。android并没用提供table这样的控件&#xff0c;虽然有TableLayout&#xff0c;但是它并非是我们想象中的像html里面的t…

angular的$http发送post,get请求无法传送参数的问题

2019独角兽企业重金招聘Python工程师标准>>> 用$http进行异步请求的时候发现了一个奇怪的事情&#xff0c;用$http.post(url,data)的方法进行请求&#xff0c;后台死活接收不到data的参数&#xff0c;真是百思不得姐啊..... 折腾了老半天才在stackoverflow上找到答案…

怎样解决Word文档图标无法正常显示的问题?

此类问题是由于 Word 程序相关组件损坏导致&#xff0c;可以通过下面的方案来解决&#xff1a;步骤/方法按键盘上的 Windows 徽标健 R 键&#xff0c;输入 regedit&#xff0c;按回车键。&#xff08;若弹出用户账户控制窗口&#xff0c;请允许以继续&#xff09;对于 Word 200…

MathType与Origin是怎么兼容的

MathType作为一款常用的公式编辑器&#xff0c;可以与很多的软件兼容使用。Origin虽然是一款专业绘图与数据分析软件&#xff0c;但是在使用过程中也是可以用到MathType。它可以帮助Origin给图表加上标签&#xff0c;或者在表格中增加公式标签。但是一些用户朋友对这个不能不是…