当前位置:网站首页>数构(C语言)——第四章、矩阵的压缩存储(下)
数构(C语言)——第四章、矩阵的压缩存储(下)
2022-07-02 06:33:00 【七归】
个性签名:整个建筑最重要的是地基,地基不稳,地动山摇。而学技术更要扎稳基础,关注我,带你稳扎每一板块邻域的基础。
博客主页:七归的博客
专栏:数据结构(C语言版)
南来的北往的,走过路过千万别错过,错过本篇,“精彩”可能与您失之交臂 la
Triple attack(三连击):Attention,Like and Collect.
文章目录
一、矩阵的压缩存储
(一)、数组的存储结构
1、一维数组
(1)、定义:
ElemType a[MaxSize]; //ElemType型一维数组
各数组元素大小相同,且物理上连续存放
int main()
{
int a[10]={
0};
int i=0;
for(i=0;i<10;i++)
a[i]=i;
return 0;
}
数组元素a[i]的存放地址=起始地址+i*sizeof(ElemType)
2、二维数组
(1)、定义:
ElemType b[M][N]; //M行N列的二维数组
(2)、存储方式:
行优先存储或列优先存储。M行N列的二维数组b[M][N]中,
若按行优先存储,则b[i][j]的存储地址=起始地址+(iN+j)sizeof(ElemType)
若按列优先存储,则b[i][j]的存储地址=起始地址+(jM+i)sizeof(ElemType)
(二)、特殊矩阵
在数值分析中经常出现一些阶数很高的矩阵,同时在矩阵中有许多值相同的元素,或者是零元素。有时为了节省存储空间,可以对这类矩阵进行压缩存储。
压缩存储:指为多个值相同的元素只分配一个存储空间,对零元素不分配存储空间。其目的是为了节省存储空间。
假若值相同的元素或者零元素在矩阵中是分布有一定规律,则我们称此类矩阵为特殊矩阵
1、对称矩阵
若n阶方阵中任意一个元素 a i , j a_{i,j} ai,j都有 a i , j a_{i,j} ai,j= a j , i a_{j,i} aj,i则该矩阵为对称矩阵
将对称矩阵A[1…n][1…n]存放在一维数组B[n(n+1)/2]中,B数值下标从0开始
普通存储:n*n二维数组
压缩存储策略:
(1)、下三角矩阵:
只存储主对角线(i=j)+下三角区(i>j)
若i>=j,下三角元素A[i][j]在数组中的存放位置为(i-1)*i/2+j-1
(2)、上三角矩阵:
只存储主对角线(i=j)+上三角区(i<j)
若i<j,上三角元素A[i][j]在数组中的存放位置为(j-1)*j/2+i-1
2、三角矩阵
与对称矩阵类似,不同的是存储完上(下)三角区和主对角线上的元素,还要存储对角线另一方的元素一次。
将这个上(下)三角矩阵A[1…n][1…n]压缩存储在B[n(n+1)/2+1]中。
压缩存储策略:按行优先/列优先原则将下(上)三角区元素存入一维数组中,并在最后一个位置存储常量c
(1)、下三角矩阵:除了主对角线和下三角区,其余的元素都相同
下三角矩阵中任一元素在一个数组中的下标 k 与 i、j 的对应关系为:
1、i>=j:(i-1)i/2+j-1;
2、i<j:n(n+1)/2
(2)、上三角矩阵:除了主对角线和上三角区,其余的元素都相同
上三角矩阵中任一元素在一个数组中的下标 k 与 i、j 的对应关系为:
1、i>=j:(i-1)(2n-i+2)/2+(j-i);
2、i<j:n(n+1)/2
3、三对角矩阵(又称带状矩阵)
三对角矩阵中除主对角线及主对角线上下最相邻的两条对角线上的元素外,所有元素均为0。
总共有3n-2个非零元素。当|i-j|>1时,有 a i , j a_{i,j} ai,j=0
压缩存储:按行优先(或列优先)原则,只存储带状部分
4、稀疏矩阵
非零元素个数远远少于矩阵元素的个数且分布无规律可循。
压缩存储策略:只存储非零元素
(1)、顺序存储:
三元组<行,列,值>
将非零元素及其行和列构成一个三元组(行标、列标、值)。稀疏矩阵压缩存储后就失去了随机存取的特性
//三元组的定义
struct element
{
int row,col;
ElemType item;
}
(2)、链式存储:
十字链表法
向右域right:指向同行的下一个元素
向下域down:指向同列的下一个元素
边栏推荐
- Select sort and insert sort
- Multi version concurrency control mvcc of MySQL
- Cartoon rendering - average normal stroke
- 整理秒杀系统的面试必备!!!
- Image transformation, transpose
- C Baidu map, Gaode map, Google map (GPS) longitude and latitude conversion
- Gocv image cutting and display
- Nacos download, start and configure MySQL database
- 【Go实战基础】gin 高效神器,如何将参数绑定到结构体
- What is the future value of fluorite mine of karaqin Xinbao Mining Co., Ltd. under zhongang mining?
猜你喜欢

Avoid breaking changes caused by modifying constructor input parameters

十年開發經驗的程序員告訴你,你還缺少哪些核心競爭力?

Servlet全解:继承关系、生命周期、容器和请求转发与重定向等

C language - Blue Bridge Cup - 7 segment code

Kubesphere virtualization KSV installation experience

「Redis源码系列」关于源码阅读的学习与思考

Shengshihaotong and Guoao (Shenzhen) new energy Co., Ltd. build the charging pile industry chain

Service de groupe minecraft

Multi version concurrency control mvcc of MySQL

Cloudreve自建云盘实践,我说了没人能限制得了我的容量和速度
随机推荐
C Gaode map obtains the address according to longitude and latitude
kubernetes部署loki日志系统
以字节跳动内部 Data Catalog 架构升级为例聊业务系统的性能优化
Programmer training, crazy job hunting, overtime ridiculed by colleagues deserve it
Sentinel reports failed to fetch metric connection timeout and connection rejection
Image transformation, transpose
Win10 uses docker to pull the redis image and reports an error read only file system: unknown
CSDN Q & A_ Evaluation
远程连接IBM MQ报错AMQ4036解决方法
Redis安装部署(Windows/Linux)
Talk about the secret of high performance of message queue -- zero copy technology
Qt QTimer类
Qunhui NAS configuring iSCSI storage
Redis sorted set data type API and application scenario analysis
队列管理器running状态下无法查看通道
Cartoon rendering - average normal stroke
一个经典约瑟夫问题的分析与解答
Jd.com interviewer asked: what is the difference between using on or where in the left join association table and conditions
Troubleshooting and handling of an online problem caused by redis zadd
Function ‘ngram‘ is not defined