博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
稀疏矩阵的存储 --数据结构
阅读量:5331 次
发布时间:2019-06-15

本文共 1116 字,大约阅读时间需要 3 分钟。

1、稀疏矩阵的定义

在一个矩阵中,非零的元素的个数远远多于零元素的个数,并且非零元素的分布没有规律,称为稀疏矩阵。

2、稀疏矩阵的存储

存储稀疏矩阵中非零元素时,必须存储其位置。三元组(i,j,aij)可唯一确定矩阵中的一个元素。稀疏矩阵的三元组表的顺序存储称为三元组顺序表,常用的三元组表的链式存储结构是十字链表。

3、稀疏矩阵中的上三角矩阵与下三角矩阵

主对角线以下都是零的方阵称为上三角矩阵,主对角线以上都是零的方阵称为下三角矩阵。稀疏矩阵大量元素是零,存储一部分内容就已经把有效数据存储了,这可以节省很多空间。存储稀疏矩阵一般存储上三角矩阵或下三角矩阵,如在上三角矩阵或者下三角矩阵中,遇到上半部分和下半部分数据可能重复的情况下,只需要存储上半部分的数据或者下半部分的数据即可。

4、求三角矩阵中某一个元素对应一维数组的下标
稀疏矩阵 计算方法
上三角矩阵 下标分别为i和j的元素对应的一维数组的下标计算公式是:(2 n - i + 1) * i / 2 + j
下三角矩阵 下标分别为i和j的元素对应的一维数组的下标计算公式是:(i + 1) * i / 2 + j

示例:

设有如下所示的下三角矩阵 A [ 0..8 ,0..8 ],将该三角矩阵的非0元素(即:行下标不小于列下标的所有元素)以行优先压缩存储到 M [ 1...m ]中,则元素 A [ i , j ] (0<=i<8,j<=i)存储在数组M中的( )中?

A(0,0)

A(1,0) A(1,1)
A(2,0) A(2,1) A(2,2)
A(2,0) A(2,1) A(2,2) A(2,3)
. . .
. . .
A(8,0) A(8,1) A(8,2) A(8,3) A(8,4) . . . . . A(8,8)

答案: M [ (i + 1) * i / 2 + j+1 ]

分析:

将A(0,0)即:i=0,j=0代入 (i + 1) * i / 2 + j 中,看结果是不是M [ 1 ]中的1。很明显,计算结果是0。这里将0加1后的结果才是1,所以我们考虑M中的结果是 (i + 1) * i / 2 + j+1。将A [2,1]中i=2,j=1代入推算的公式: (i + 1) * i / 2 + j+1,发现A[1,2]对应M [5 ],满足条件。通过代入矩阵中的其它元素后,发现我们推导的公式: (i + 1) * i / 2 + j+1是满足题意的。所以,答案是:M [ (i + 1) * i / 2 + j+1 ]

转载于:https://www.cnblogs.com/qikeyishu/p/10769510.html

你可能感兴趣的文章
[Kali_BT]通过低版本SerialPort蓝牙渗透功能手机
查看>>
C语言学习总结(三) 复杂类型
查看>>
HNOI2018
查看>>
【理财】关于理财的网站
查看>>
Ubunt中文乱码
查看>>
《当幸福来敲门》读后
查看>>
【转】系统无法进入睡眠模式解决办法
查看>>
省市县,循环组装,整合大数组
查看>>
stm32中字节对齐问题(__align(n),__packed用法)
查看>>
like tp
查看>>
posix多线程有感--线程高级编程(线程属性函数总结)(代码)
查看>>
spring-使用MyEcilpse创建demo
查看>>
DCDC(4.5V to 23V -3.3V)
查看>>
kettle导数到user_用于left join_20160928
查看>>
activity 保存数据
查看>>
typescript深copy和浅copy
查看>>
linux下的静态库与动态库详解
查看>>
hbuilder调底层运用,多张图片上传
查看>>
较快的maven的settings.xml文件
查看>>
Git之初体验 持续更新
查看>>