当前位置:网站首页>数构(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:指向同列的下一个元素
边栏推荐
- 随笔:RGB图像颜色分离(附代码)
- Installing Oracle database 19C RAC on Linux
- Driving test Baodian and its spokesperson Huang Bo appeared together to call for safe and civilized travel
- libusb的使用
- 一、Qt的核心类QObject
- 《统计学习方法》——第五章、决策树模型与学习(上)
- Matplotlib swordsman Tour - an artist tutorial to accommodate all rivers
- 【Go实战基础】gin 如何设置路由
- 「面试高频题」难度大 1.5/5,经典「前缀和 + 二分」运用题
- 我服了,MySQL表500W行,居然有人不做分区?
猜你喜欢

There is a problem with MySQL installation (the service already exists)

远程连接IBM MQ报错AMQ4036解决方法

C4D quick start tutorial - C4d mapping

Dix ans d'expérience dans le développement de programmeurs vous disent quelles compétences de base vous manquez encore?

Linux二进制安装Oracle Database 19c

盘点典型错误之TypeError: X() got multiple values for argument ‘Y‘

Cloud computing in my eyes - PAAS (platform as a service)

Matplotlib剑客行——容纳百川的艺术家教程

十年開發經驗的程序員告訴你,你還缺少哪些核心競爭力?
![[staff] time sign and note duration (full note | half note | quarter note | eighth note | sixteenth note | thirty second note)](/img/bf/2b0b9c640bdad2c55293f905a22055.jpg)
[staff] time sign and note duration (full note | half note | quarter note | eighth note | sixteenth note | thirty second note)
随机推荐
Shengshihaotong and Guoao (Shenzhen) new energy Co., Ltd. build the charging pile industry chain
Using recursive functions to solve the inverse problem of strings
Matplotlib剑客行——没有工具用代码也能画图的造型师
NPOI 导出Word 字号对应
Matplotlib剑客行——容纳百川的艺术家教程
Installing Oracle database 19C RAC on Linux
京东高级工程师开发十年,编写出:“亿级流量网站架构核心技术”
Oracle修改表空间名称以及数据文件
Leetcode sword finger offer brush questions - day 23
判断是否是数独
First week of JS study
C# 高德地图 根据经纬度获取地址
Essay: RGB image color separation (with code)
Pdf document of distributed service architecture: principle + Design + practice, (collect and see again)
一个经典约瑟夫问题的分析与解答
gocv opencv exit status 3221225785
Flink-使用流批一体API统计单词数量
Talk about the secret of high performance of message queue -- zero copy technology
聊聊消息队列高性能的秘密——零拷贝技术
C4D quick start tutorial - Chamfer