特殊矩阵的压缩存储
数据结构实验五矩阵的压缩存储与运算学习资料

数据结构实验五矩阵的压缩存储与运算第五章矩阵的压缩存储与运算【实验目的】1. 熟练掌握稀疏矩阵的两种存储结构(三元组表和十字链表)的实现;2. 掌握稀疏矩阵的加法、转置、乘法等基本运算;3. 加深对线性表的顺序存储和链式结构的理解。
第一节知识准备矩阵是由两个关系(行关系和列关系)组成的二维数组,因此对每一个关系上都可以用线性表进行处理;考虑到两个关系的先后,在存储上就有按行优先和按列优先两种存储方式,所谓按行优先,是指将矩阵的每一行看成一个元素进行存储;所谓按列优先,是指将矩阵的每一列看成一个元素进行存储;这是矩阵在计算机中用一个连续存储区域存放的一般情形,对特殊矩阵还有特殊的存储方式。
一、特殊矩阵的压缩存储1. 对称矩阵和上、下三角阵若n阶矩阵A中的元素满足= (0≤i,j≤n-1 )则称为n阶对称矩阵。
对n阶对称矩阵,我们只需要存储下三角元素就可以了。
事实上对上三角矩阵(下三角部分为零)和下三角矩阵(上三角部分为零),都可以用一维数组ma[0.. ]来存储A的下三角元素(对上三角矩阵做转置存储),称ma为矩阵A的压缩存储结构,现在我们来分析以下,A和ma之间的元素对应放置关系。
问题已经转化为:已知二维矩阵A[i,j],如图5-1,我们将A用一个一维数组ma[k]来存储,它们之间存在着如图5-2所示的一一对应关系。
任意一组下标(i,j)都可在ma中的位置k中找到元素m[k]= ;这里:k=i(i+1)/2+j (i≥j)图5-1 下三角矩阵a00 a10 a11 a20 … an-1,0 … an-1,n-1k= 0 1 2 3 …n(n-1)/2 …n(n+1)/2-1图5-2下三角矩阵的压缩存储反之,对所有的k=0,1,2,…,n(n+1)/2-1,都能确定ma[k]中的元素在矩阵A中的位置(i,j)。
这里,i=d-1,(d是使sum= > k的最小整数),j= 。
2. 三对角矩阵在三对角矩阵中,所有的非零元素集中在以主对角线为中心的带内状区域中,除了主对角线上和直接在对角线上、下方对角线上的元素之外,所有其它的元素皆为零,见图5-3。
矩阵的压缩存储

二、稀疏矩阵的压缩存储
若矩阵中非零元素较少(非零元 素的个数栈元素总数的20%以 下),且分布没有明显的规律
1.三元组表示法 2.十字链表存储
1.三元组表示法
将其中的非零元素在一维数组空间中以行序为主序进行存储,在存储 非零元素的同时还要存储元素所在的行和列的位置 。
非零元素所在的行号、列号和元素值
4×4三角矩阵
存储结构
3.对角矩阵
若矩阵中所有的非零元素都集中在以对角线为中心的带状区域中,则 这类矩阵称为对角矩阵。
最常见的是三对角矩阵
存储 结构
存储方法:采用一维数组,对非零 元素按行顺序存储;n阶三对角矩 阵需要3n-2个元素的存储空间。
LOC(aij)=LOC(a11)+2(i-1)+j-1
int m, n, t;
//矩阵行数、列数和非零元素个数
}TSMatrix;
2.十字链表存储
当矩阵进行某些运算时,如加法、减法和乘法等,矩阵中非零元素的 个数和位置会发生很大的变化,适用链式存储结构——十字链表。 每个非零元素用一个结点表示,每个结点由5个域组成。
同一列中下一个非零元素的位置
同一行中下一个非零元素的位置
4×4对称矩阵
存储结构
用一维数组空间作为对n阶对称矩阵A的存储结构,则矩阵中任意元素 aij在一维数组中的位置为:
2.三角矩阵
若n阶矩阵A的上(或下)三角(不包括对角线)中的元素均为常数c或 零,则称矩阵A 为下(或上)三角矩阵。
三角矩阵存储方法: 用一个一维数组来存储其下(上)三角中的元素,除此之外,当上 (下)三角中的常数不为0时,还要增加一个常数c的存储空间。
存储结构
三元组表示法的类型定ห้องสมุดไป่ตู้:
规律分布特殊矩阵的压缩存储

【本节要点】
= Loc( A[ 1 ][ 1 ])+( 2 ( i-1 )+ j -1)*size
1、 规律分布特殊矩阵的压缩存储原则:按规律存放非零元素;
2、 按规律找出地址计算公式
思考题:类同按行为主序,请给出按列或按行为主序条件下上三角矩阵以及对称矩阵的 相关推导。 2 .带状矩阵
( 1 )带状矩阵描述:在矩阵中的所有非零元素都集中在以主对角线为中心的带状区域中。 其中最常见的是三对角带状矩阵,如图 3 所示。
a11 A12
a21 A22 a23
A32 a33 a34
( 2 )三对角带状矩阵特点
数组 C
a11 a12 a21 a22 a23 a31 … ann
Loc(i,j)
1 2 3 4 5 6 … 3n-2
图 4 带状矩阵的压缩形式
②确定非零元素在一维数组空间中的地址 Loc ( A[ i][ j])= Loc ( A[ 1 ][ 1 ])+(前 i-1 行非零元素个数+第 i 行中 aij 前非零元素个
数)*size 前 i-1 行元素个数=3 ×( i-1 )- 1 (因为第 1 行只有 2 个非零元素); 第 i 行中 ai j 前非零元素个数=j-i +1 ,其中
j-i=
-1 ( j<i) 0 (j=i) 1 (j>i)
特殊矩阵的压缩存储

特殊矩阵的压缩存储所谓特殊矩阵:是指矩阵中值相同的元素或者零元素的分布有⼀定的规律。
常见的特殊矩阵有:对称矩阵、三⾓矩阵、对⾓矩阵。
注意:它们都是⽅阵,即⾏数和列数相同。
主对⾓线:在矩阵中每个元素的⾏标等于纵标(i==j)。
上三⾓:在矩阵中每个元素的⾏标⼩于纵标(i<j)。
下三⾓:在矩阵中每个元素的⾏标⼤于纵标(i>j)。
⼀、对称矩阵的压缩存储⼀个n阶⽅阵A[n][n]中的元素满⾜ai,j=aj,i(0<=i,j<=n-1),则称其为n阶对称矩阵。
压缩存储:由于元素关于主对⾓线对称,在存储时只存储对称矩阵的上三⾓或下三⾓元素,使得对称的元素共享⼀个存储空间。
(以⾏序为主序存储其下三⾓+主对⾓线的元素,⼀共要存储n*(n+1)/2个元素)由于k的序号=所有它前⾯元素的个数=所在⾏前⾯⾏的所有元素+所在⾏它前⾯的元素(包括本⾝)。
⼀维数组k与与⼆维数组元素的i、j之间的关系:当i>=j时,k=i*(i+1)/2 + j;//本例都是以0为开始的下标,以下也是类同。
当i<j时,k=j*(j+1)/2+i;⼆、三⾓矩阵的压缩矩阵上三⾓矩阵:当⼀个⽅阵的主⾓线以下的所有元素皆为零;当i<=j时,k=(i-1)*(2n-i+2)/2+j-2;(以下公式为了⽅便理解,i,j,k都是从1开始)矩阵元素压缩放在⼀维数组上,可以理解为:如5*5矩阵上三⾓矩阵第⼀⾏为5个元素,第⼆⾏为4个元素...最后⼀⾏为1个元素(也就是元素个数逐减的等差数列an=n-i+1,an代表每⾏的个数,i代表的是第⼏项(第⼏⾏),所以a1=n-1+1=n,当前⾏的前⾯所有⾏的元素和:s(i-1)=n(a1+an)/2=(i-1)*[n+(n-(i-1)+1)]=(i-1)*(2n-i+2)/2)如:a[3][3]=b[10],s2=5+4=9,所以k=s2+j-2=10。
下三⾓矩阵:当⼀个⽅阵的主⾓线以上的所有元素皆为零;当i>=j时,k=i*(i+1)/2+j-2;。
三对角矩阵压缩存储

三对角矩阵压缩存储三对角矩阵是一种特殊类型的矩阵,在存储和计算上具有一定的优势。
本文将从三对角矩阵的定义、特性、压缩存储方法以及相应的计算算法等方面进行介绍。
一、三对角矩阵的定义三对角矩阵是指除了主对角线上的元素外,只有上下相邻对角线上的元素不为零,其余元素都为零的矩阵。
例如,一个n阶的三对角矩阵可以表示为:\[ A = \begin{bmatrix}b_1 & c_1 & 0 & \cdots & \cdots & \cdots & 0 \\a_2 & b_2 & c_2 & 0 & \cdots & \cdots & 0 \\0 & a_3 & b_3 & c_3 & 0 & \cdots & 0 \\\vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\0 & \cdots & \cdots & \cdots & \cdots & a_{n-1} & b_{n-1} \\ 0 & \cdots & \cdots & \cdots & \cdots & 0 & a_n \\\end{bmatrix} \]其中,b1, b2, ..., bn为主对角线上的元素;a2, a3, ..., an为下对角线上的元素;c1, c2, ..., cn-1为上对角线上的元素。
二、三对角矩阵的特性1. 三对角矩阵是一种稀疏矩阵,大部分元素都为零,只有O(n)个非零元素。
2. 三对角矩阵可以用来表示一些特定问题的线性方程组,如一维热传导方程、抛物线偏微分方程等。
矩阵压缩存储实验报告

一、实验目的1. 理解并掌握矩阵压缩存储的基本原理和方法。
2. 学习针对不同类型矩阵(对称矩阵、三角矩阵、稀疏矩阵)的压缩存储技术。
3. 通过编程实现矩阵压缩存储,并验证其正确性和效率。
二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发环境:Visual Studio 20194. 实验数据:随机生成的矩阵数据三、实验内容本次实验主要针对以下三种特殊矩阵的压缩存储进行实验:1. 对称矩阵2. 三角矩阵(上三角矩阵和下三角矩阵)3. 稀疏矩阵四、实验步骤1. 对称矩阵压缩存储- 设计一个对称矩阵的结构体,包含矩阵的行数、列数以及压缩后的数组。
- 实现一个函数,将输入的对称矩阵压缩存储到一维数组中。
- 实现一个函数,根据一维数组中的元素索引还原对称矩阵。
2. 三角矩阵压缩存储- 设计一个三角矩阵的结构体,包含矩阵的行数、列数以及压缩后的数组。
- 实现两个函数,分别用于将输入的上三角矩阵和下三角矩阵压缩存储到一维数组中。
- 实现两个函数,分别用于根据一维数组中的元素索引还原上三角矩阵和下三角矩阵。
3. 稀疏矩阵压缩存储- 设计一个稀疏矩阵的结构体,包含矩阵的行数、列数、非零元素个数以及压缩后的数组。
- 实现一个函数,将输入的稀疏矩阵压缩存储到一维数组中。
- 实现一个函数,根据一维数组中的元素索引还原稀疏矩阵。
五、实验结果与分析1. 对称矩阵压缩存储- 实验结果:成功将输入的对称矩阵压缩存储到一维数组中,并可以正确还原。
- 分析:对称矩阵压缩存储可以节省约50%的存储空间。
2. 三角矩阵压缩存储- 实验结果:成功将输入的上三角矩阵和下三角矩阵压缩存储到一维数组中,并可以正确还原。
- 分析:三角矩阵压缩存储可以节省约75%的存储空间。
3. 稀疏矩阵压缩存储- 实验结果:成功将输入的稀疏矩阵压缩存储到一维数组中,并可以正确还原。
- 分析:稀疏矩阵压缩存储可以大大节省存储空间,提高矩阵运算的效率。
第4章专题3矩阵的压缩存储

三元组表=( (0,0,15), (1,1,11), (2,3,6), (4,0,9) ) 如何存储三元组表?
清华大学出版社
数据结构(C++版)第2版
4.3 矩阵的压缩存储
稀疏矩阵的压缩存储——三元组顺序表 采用顺序存储结构存储三元组表
15 0 0 22 0 -15
0 11 3 0 0 0
A=
0 0
0 0 a43 a44 a45 0 0 0 a54 a55
(a) 三对角矩阵
按行 存储
元素aij在一维数组中的序号
=2 + 3(i-2)+( j-i + 2) =2i+ j -2 ∵一维数组下标从0开始
∴元素aij在一维数组中的下标
= 2i+ j -3
(b) 寻址的计算方法
0 1 2 3 4 5 6 7 8 9 10 11 12
0 0
0 0
6 0
0 0
0 0
91 0 0 0 0 0
三元组顺序表是否 需要预留存储空间?
稀疏矩阵的修改操作
三元组顺序表的插入/删除操作
清华大学出版社
数据结构(C++版)第2版
4.3 矩阵的压缩存储
稀疏矩阵的压缩存储——三元组顺序表
采用顺序存储结构存储三元组表
15 0 0 22 0 -15
0 11 3 0 0 0
上三角中的元素aij(i<j),因为aij=aji,则访问和 它对应的元素aji即可,即:k=j×(j+1)/2+i -1 。
清华大学出版社
数据结构(C++版)第2版
4.3 矩阵的压缩存储
特殊矩阵的压缩存储——三角矩阵
最新数据结构实验五矩阵的压缩存储与运算

精品资料数据结构实验五矩阵的压缩存储与运算........................................第五章矩阵的压缩存储与运算【实验目的】1. 熟练掌握稀疏矩阵的两种存储结构(三元组表和十字链表)的实现;2. 掌握稀疏矩阵的加法、转置、乘法等基本运算;3. 加深对线性表的顺序存储和链式结构的理解。
第一节知识准备矩阵是由两个关系(行关系和列关系)组成的二维数组,因此对每一个关系上都可以用线性表进行处理;考虑到两个关系的先后,在存储上就有按行优先和按列优先两种存储方式,所谓按行优先,是指将矩阵的每一行看成一个元素进行存储;所谓按列优先,是指将矩阵的每一列看成一个元素进行存储;这是矩阵在计算机中用一个连续存储区域存放的一般情形,对特殊矩阵还有特殊的存储方式。
一、特殊矩阵的压缩存储1. 对称矩阵和上、下三角阵若n阶矩阵A中的元素满足= (0≤i,j≤n-1 )则称为n阶对称矩阵。
对n阶对称矩阵,我们只需要存储下三角元素就可以了。
事实上对上三角矩阵(下三角部分为零)和下三角矩阵(上三角部分为零),都可以用一维数组ma[0.. ]来存储A的下三角元素(对上三角矩阵做转置存储),称ma为矩阵A的压缩存储结构,现在我们来分析以下,A和ma之间的元素对应放置关系。
问题已经转化为:已知二维矩阵A[i,j],如图5-1,我们将A用一个一维数组ma[k]来存储,它们之间存在着如图5-2所示的一一对应关系。
任意一组下标(i,j)都可在ma中的位置k中找到元素m[k]= ;这里:k=i(i+1)/2+j (i≥j)图5-1 下三角矩阵a00 a10 a11 a20 … an-1,0 … an-1,n-1k= 0 1 23 …n(n-1)/2 …n(n+1)/2-1图5-2下三角矩阵的压缩存储反之,对所有的k=0,1,2,…,n(n+1)/2-1,都能确定ma[k]中的元素在矩阵A中的位置(i,j)。
这里,i=d-1,(d是使sum= > k的最小整数),j= 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第0行 第1行
… 第i-1行
每行元素个数
2 3 … 3
aij
2+(i-1)*3
aij在本行中的序号j-i+2
元素aij在一维数组中的序号 =2i+ j +1
∵一维数组下标从0开始
∴元素aij在一维数组中的下标 = 2i+ j
谢谢学习
主讲教师:尹红丽
每行元素个数 1 2
… i*(i+1)/2
i aij
aij在一维数组中的序号 = i×(i+1)/2+ j+1
∵一维数组下标从0开始
∴aij在一维数组中的下标 k= i×(i+1)/2+ j
aij在本行中的序号j+1
矩阵中任一元素aij在数组中
i×(i+1)/2+j 当i≥j k=
的下标k与i、j的对应关系:
《数据结构》 课程 特殊矩阵的压缩存储
主讲教师:尹红丽
目录 CONTENTS
1 对称矩阵的压缩存储 2 三角矩阵的压缩存储 3 对角矩阵的压缩存储
1 对称矩阵的压缩存储
特殊矩阵:矩阵中很多值相同的元素并且它们的分布有一定的规律。 压缩存储:为值相同的元素只分配一个存储空间,零元素不分配空间
36478 62842 A= 4 8 1 6 9 74605 82957
对称矩阵特点:aij=aji
压缩存储:只存储下三角部分的元素。
原来存储n阶对称矩阵需要n2个单元,现在需要? 1+2+…+n=n(n+1)/2
1 对称矩阵的压缩存储
如何只存储下三角呢? 将下三角部分以行为主序顺序存储到一个一维数组SA中
0… j … 0
…
i
aij
n-1
n-1
第0行 第1行 … 第i-1行
第0行
第1行
n(n+1)/2
… an-1n-1 C 第n-1行
(b)
第0行 第1行 … 第i-1行
上三角矩阵
每行元素个数
n n-1 … n-i+1
aij
i*(2n-i+1)/2
aij在一维数组中的序号 = i×(2n-i+1ห้องสมุดไป่ตู้/2+ j-i+1
∵一维数组下标从0开始
∴aij在一维数组中的下标 k= i×(2n-i+1)/2+ j-i
j×(j+1)/2 +i
当i<j
2 三角矩阵的压缩存储
3 cc c c 6 2c c c 4 81 c c 7 46 0 c 8 29 5 7
下三角矩阵的压缩存储
0 12 34 5 a00 a10 a11 a20 a21 a22 …
第0行 第1行
第2行
k
n(n+1)/2
aij … an-1n-1 c
aij在本行中的序号j-i+1
2 三角矩阵的压缩存储
上三角矩阵的压缩存储
矩阵中任一元素aij在数组中的下标k与i、j的对应关系:
i×(2n-i+1)/2+j-i
k= n×(n+1) /2
当i≤j 当i>j
3 对角矩阵的压缩存储
对角矩阵:所有非零元素都集中在以主对角线为中心的带状 区域中,除了主对角线和它的上下方若干条对角线的元素外 ,所有其他元素都为零。 矩阵中任一元素aij在数组中的下标k与i、j的对应关系: K=2i+j
(a) 下三角矩阵
矩阵中任一元素aij在数组中的下标k与i、j的对应关系:
i×(i+1)/2+j 当i≥j
k=
n×(n+1)/2
当i<j
2 三角矩阵的压缩存储
34 8 1 0 c2 9 4 6 cc15 7 cc c 0 8 cc c c 7
上三角矩阵的压缩存储
01
k
a 00 a01 … a0n-1 a1 1 a12 … a1n-1 … aij