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

数据结构实验五矩阵的压缩存储与运算第五章矩阵的压缩存储与运算【实验目的】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= 。
特殊矩阵的压缩与存储

template<class Type>SparseMatrix<Type>SparseMatrix<Type>::FastTranspos ( ) ...{//对稀疏矩阵a(*this指示)做快速转置,结果放在b中,时间代价为O(Terms+Columns)。
int *rowSize = new int[Cols];//辅助数组,统计各列非零元素个数int *rowStart = new int[Cols];//辅助数组,预计转置后各行存放位置SparseMatrix<Type> b ( Cols, Rows );//存放转置结果b.Rows = Cols; b.Cols = Rows;b.Terms = Terms;if ( Terms > 0 ) ...{for (int i = 0; i < Cols; i++) rowSize[i] = 0;//统计矩阵b中第i行非零元素个数for ( i = 0; i < Terms; i++ )//根据矩阵a中第i个非零元素的列号,将rowSize相当该列的计数加1rowSize[smArray[i].col]++;rowStart[0] = 0;//计算矩阵b第i行非零元素的开始存放位置for ( i = 1; i < Cols; i++ ) //rowStart[i]=矩阵b的第i行的开始存放位置rowStart[i] = rowStart[i-1]+rowSize[i-1];for ( i = 0; i < Terms; i++ ) ...{//从a向b传送int j = rowStart[smArray[i].col];//j为第i个非零元素在b中应存放的位置b.smArray[j].row = smArray[i].col;b.smArray[j].col = smArray[i].row;b.smArray[j].value = smArray[i].value;rowStart[smArray[i].col]++;}}delete[ ] rowSize;delete [ ] rowStart; return b;}。
矩阵压缩储存 三元组 带状矩阵

矩阵压缩储存三元组带状矩阵矩阵压缩储存是一种常用的数据结构,用于减少存储空间和提高数据处理效率。
在某些特殊类型的矩阵中,存在大量的零元素,这些零元素会占据大量的存储空间,并且对于计算和处理时也会造成浪费。
因此,为了更高效地存储和处理这些特殊类型的矩阵,我们可以使用三元组带状矩阵的方法。
三元组带状矩阵是一种压缩储存矩阵的方法,它通过记录矩阵中非零元素的值、所在行和列的信息,来表示整个矩阵。
与普通的矩阵相比,三元组带状矩阵可以大大减少存储空间的使用。
三元组带状矩阵的存储方式如下:首先,我们需要记录矩阵的行数和列数,以及非零元素的个数。
然后,我们使用一个数组来存储非零元素的值,另外还需要两个数组来存储非零元素所在的行和列的信息。
这样,我们就可以通过这三个数组来表示整个矩阵了。
举个例子来说明三元组带状矩阵的存储方式。
假设有一个5x5的矩阵,其中只有4个非零元素,分别是2、4、6和8。
那么我们可以使用如下的三个数组来表示这个矩阵:值数组:[2, 4, 6, 8]行数组:[1, 2, 3, 4]列数组:[1, 2, 3, 4]通过这三个数组,我们就可以还原出原始的矩阵。
在这个例子中,我们可以得到如下的矩阵:2 0 0 0 00 4 0 0 00 0 6 0 00 0 0 8 00 0 0 0 0可以看到,通过三元组带状矩阵的存储方式,我们只需要存储非零元素的信息,而零元素则可以省略不存储。
这样就大大减少了存储空间的使用。
而带状矩阵是指矩阵中非零元素所在的行和列的分布呈带状结构。
带状矩阵可以用来表示一些具有特定规律的矩阵,比如对角线元素较多的矩阵。
在带状矩阵中,非零元素分布在主对角线及其附近的带状区域内,其宽度可以根据实际情况确定。
通过使用带状矩阵的特性,我们可以进一步优化三元组带状矩阵的存储方式。
在存储非零元素的值、行和列的数组中,我们可以按照带状矩阵的分布规律来存储元素的信息,这样可以进一步减少存储空间的使用。
稀疏矩阵的压缩存储方法与应用场景

稀疏矩阵的压缩存储方法与应用场景稀疏矩阵指的是矩阵中绝大部分元素为0的情况下,只保存非零元素及其对应的坐标的一种存储方式。
相比于一般的矩阵存储方式,稀疏矩阵的压缩存储方法可以有效节省存储空间,并提高运算效率。
本文将介绍一些常见的稀疏矩阵的压缩存储方法以及其应用场景。
一、行压缩存储法(CRS)行压缩存储法(CRS,Compressed Row Storage)是一种经典的稀疏矩阵压缩存储方法。
在CRS中,矩阵的非零元素按行优先的顺序存储,并记录每行非零元素的开始位置及其列号。
由于CRS只存储非零元素及其对应的行列坐标,因此可以大大减少存储空间。
CRS适用于行操作较多的场景,比如图像处理、有限元分析等。
在这些场景下,常常需要对稀疏矩阵进行行操作,例如行相加、行相减、行乘以常数等。
CRS可以通过迅速定位非零元素所在的行并对其进行操作,提高计算效率。
二、列压缩存储法(CCS)列压缩存储法(CCS,Compressed Column Storage)是另一种常见的稀疏矩阵压缩存储方法。
在CCS中,矩阵的非零元素按列优先的顺序存储,并记录每列非零元素的开始位置及其行号。
与CRS相比,CCS可以更加高效地进行列操作,如列相加、列相减、列乘以常数等。
CCS常用于图论、网络分析等领域。
例如,在图论中,常常需要对邻接矩阵进行列操作,如计算图的邻接节点、计算图的度数等。
CCS 可以快速对非零元素所在的列进行操作,提高计算效率。
三、对角线压缩存储法(Diagonal Storage)对角线压缩存储法是一种适用于具有特殊结构的稀疏矩阵的压缩存储方法。
在对角线压缩存储法中,只存储矩阵的非零主对角线元素以及非零副对角线元素,其余元素均为0。
通过存储非零对角线元素及其位置,可以进一步减少存储空间。
对角线压缩存储法适用于具有对称或反对称性质的矩阵。
在数值计算、网络传输等领域,经常需要处理对称或反对称矩阵。
对角线压缩存储法可以有效存储这类特殊结构的矩阵,并提高运算效率。
特殊矩阵的压缩存储

特殊矩阵的压缩存储简介矩阵是数学和计算机科学中的基本数据结构之一,广泛应用于各个领域。
在某些情况下,矩阵的数据量十分庞大,导致存储和处理的效率低下。
为解决这一问题,特殊矩阵的压缩存储方法应运而生。
什么是特殊矩阵特殊矩阵是指具有一定特征或性质的矩阵。
常见的特殊矩阵包括对角矩阵、三角矩阵、稀疏矩阵等。
这些矩阵在实际应用中具有普遍性和重要性,因为它们往往可以提供更高效的存储和运算方式。
1. 对角矩阵对角矩阵是指所有的非对角元素都为零的矩阵。
由于对角矩阵的特殊属性,可以使用一维数组来存储矩阵的主对角线元素,从而减少存储空间的占用。
2. 三角矩阵三角矩阵是指所有主对角线以下或以上的元素都为零的矩阵。
同样地,三角矩阵可以使用一维数组来压缩存储,只存储非零元素即可。
3. 稀疏矩阵稀疏矩阵是指元素中绝大多数为零的矩阵。
对于稀疏矩阵,传统的二维数组存储方式存在很大的空间浪费。
因此,压缩存储方法可以大幅减少稀疏矩阵的存储空间。
压缩存储方法特殊矩阵的压缩存储方法旨在减少存储空间的占用,并提高对矩阵的操作效率。
常见的压缩存储方法包括对角线压缩法、三角矩阵压缩法和行逻辑链接法等。
1. 对角线压缩法对于对角矩阵和三角矩阵,可以使用对角线压缩法来进行存储。
对角线压缩法是指只存储矩阵的主对角线元素或其他非零对角线元素,并用一维数组来表示。
通过这种方式,可以大幅减少矩阵的存储空间,并方便对矩阵进行操作。
对角矩阵的压缩存储对角矩阵的对角线元素存储在一维数组中,数组的长度等于矩阵的行数或列数。
例如,对于一个3x3的对角矩阵:1 0 00 2 00 0 3可以使用一维数组[1, 2, 3]来表示。
三角矩阵的压缩存储三角矩阵的非零元素存储在一维数组中,数组的长度等于矩阵的行数或列数。
对于下三角矩阵,可以使用一维数组来存储矩阵的下三角部分(不包含主对角线),而上三角矩阵可以使用一维数组来存储矩阵的上三角部分。
例如,对于一个3x3的下三角矩阵:1 0 02 3 04 5 6可以使用一维数组[2, 4, 5]来表示。
基于线性结构的几种特殊矩阵的压缩存储

帮0 行 J ・ 小 雀
帮t 村. t 个^ 蘸 r
第时j … J ) 6 粢
第 l 静.J 疤精
』 ¨ 舶≈ 阵 的盯 主哗缒性 n精存储
数 据 .数 据 量 是 动 态 变 化 的 , 有 些 算 法 需 要 可 变 矩 阵 存 储 数
据 。而 线 性 压 缩 存 储 方 式 在 增 加 或 删 除 一 行 一 列 数 据 时 效 率 低 下 。因此 ,随着 J a v a 、C } } 等 高 级 语 言 支 持 动 态 数 组 ,矩 阵 也
f 2 n iI v2 ・1
瓠 ¨
p 襞
成 动 态 的 。早 期 高 级 程 序 设 计 语 言 不 支 持 动 态 数 组 , 只能 将 三
I l 2
0
1
'
2 l
…
! l 1
2 l
’ 。i l 2 ”t l J 2
一
一
பைடு நூலகம்
角 矩 阵压 缩 成 线 性 存 储 ,实 现 数 学 中 的矩 阵 运 算 。虽 然 数 学 上 的矩 阵 的行 列 数 是 不 能 动 态 增 减 的 ,但 计 算 机 中采 用 矩 阵 存 储
L o c ( ) =L o c ( a ) +1 +2 +・ ・ - +i +/
:
n阶矩 阵 ,当
时 ,有 = O ,则 A 表 示 一 个 下 三 角矩 阵 ; 当
时 ,有 %: O ,则 A 表 示 一 个 上 三 角 矩 阵 。 如 图 1所示 。
“ ¨ n ( 7 0 l
. ¨ 一 、 ~
. .
基于线性结构的几种特殊矩阵的压缩存储
l l
特殊矩阵的压缩存储

特殊矩阵的压缩存储特殊矩阵的压缩存储是一种将矩阵中的零元素省略掉,只存储非零元素及其位置信息的存储方式。
这种存储方式可以大大减少矩阵在内存中所占用的空间,提高计算效率和存储效率。
一、特殊矩阵的定义特殊矩阵是指具有某些特定性质的矩阵。
常见的特殊矩阵有三角矩阵、对称矩阵、对角线矩阵、稀疏矩阵等。
1. 三角矩阵:当一个上三角(下三角)矩阵中除了主对角线和下(上)方所有元素都为零时,称之为上(下)三角矩阵。
2. 对称矩阵:当一个方阵A满足A[i][j]=A[j][i]时,称之为对称矩阵。
3. 对角线矩阵:当一个方形n×n的稠密(dense)或稀松(sparse)实数或复数方针中非对角线元素都为0时,该方针被称为对角线方针。
4. 稀松(sparse)或稀有(sparsest)系数或系数矩阵(sparse matrix):在数学中,一个矩阵如果大部分元素为零,那么这个矩阵就被称为稀疏矩阵。
二、特殊矩阵的压缩存储方式特殊矩阵的压缩存储方式是一种将矩阵中的零元素省略掉,只存储非零元素及其位置信息的存储方式。
这种存储方式可以大大减少矩阵在内存中所占用的空间,提高计算效率和存储效率。
1. 三角矩阵的压缩存储对于上三角(下三角)矩阵A,只需要把主对角线以下(以上)的元素按行优先顺序排列成一个一维数组B即可。
由于上(下)三角形中有n(n-1)/2个零元素,因此B数组长度为n(n+1)/2。
例如:A = [ 1 2 3 ][ 0 4 5 ][ 0 0 6 ]B = [ 1, 2, 3, 4, 5, 6 ]2. 对称矩阵的压缩存储对于对称方针A,只需要把其中任意一个三角形(上或下)中的非零元素按行优先顺序排列成一个一维数组B即可。
由于对称方针中有n(n+1)/2个零元素,因此B数组长度为n(n+1)/2。
例如:A = [ 1 2 3 ][ 2 4 5 ][ 3 5 6 ]B = [ 1, 2, 3, 4, 5, 6 ]3. 对角线矩阵的压缩存储对于对角线方针A,只需要把其对角线上的元素按行优先顺序排列成一个一维数组B即可。
特殊矩阵的压缩存储算法的实现

软件综合课程设计特殊矩阵的压缩存储算法的实现二叉排序树的实现二〇一四年六月一、特殊矩阵的压缩存储算法的实现1.问题陈述对于特殊矩阵可以通过压缩存储减少存储空间。
基本要求:1.针对多种特殊矩阵进行压缩存储,并能显示压缩后的相关地址和值;2.输入在原来特殊矩阵中的地址,要求能从压缩后的矩阵中读出相应的值;2.程序代码#include<stdio.h>#include <stdlib.h>#include<iostream.h>static shangsanjiao(int n){int i,j,k,z,g;int L[100][100],SA[100];cout<<"请输入您要压缩矩阵的行列数"<<endl;cin>>n;cout<<"请输入您的矩阵内元素:"<<endl;for(i=1;i<n+1;i++)for(j=1;j<n+1;j++){cin>>L[i][j];if(i<=j)k=j*(j-1)/2+i-1;elsek=n*(n+1)/2;SA[k]=L[i][j];}cout<<"您输入的矩阵为:"<<endl;for(i=1;i<n+1;i++){for(j=1;j<n+1;j++)cout<<L[i][j]<<" ";cout<<endl;}cout<<"压缩存储后:"<<endl;for(k=0;k<n*(n+1)/2+1;k++)cout<<k<<" "<<SA[k];cout<<"若要读取矩阵的值请输入'100'退出输入'000'。
49特殊矩阵的压缩存储算法的实现

(2)根据程序所要完成的基本要求和程序实现提示,设计出完整的算法;
(3)按格式要求写出课程设计说明书。
课程设计任务书
4.主要参考文献:
[1]李云清,杨庆红.数据结构(C语言版).北京:人民邮电出版社,2004.
[2]严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版.1997.
了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
2.设计内容和要求:
2010年12月29日~2011年1月4日详细设计及编码;
2011年1月5日~2011年1月6日测试;撰写课程设计说明书;
2011年1月7日验收、成绩考核。
学院审查意见:
签字:
2010年12月24日
设计内容:
(1)针对多种特殊矩阵进行压缩存储,并能显示压缩后的相关地址和值;
(2)输入在原来特殊矩阵中的地址,要求能从压缩后的矩阵中读出相应的值。
设计要求:
(1)符合课题要求,实现相应功能;
(2)要求界面友好美观,操作方便易行;
(3)注意程序的实用性、安全性;
3.设计工作任务及工作量的要求〔包括课程设计说明书、程序等〕:
中北大学
课程设计任务书
学院:
软件学院
专业:
学 生 姓 名:
学 号:
设 计 题 目:
特殊矩阵的压缩存储算法的实现
起迄日期:
数据结构-第四章 矩阵的压缩存储.

23
算法:P100
算法分析:
O( nu+tu) 当非0元素个数->mu*nu时,接近O(mu*nu)
24
2) 十字链表
十字链表是稀疏矩阵链接形式存储结构 的一种(当然还有其它形式)。在该方法 中每一个非0元素用一个结点表示,结点 中除了表示非0元素的行、列和值的三元 组外,还增加了两个链域:行指针域,用 来指向本行中下一个非0元素;列指针域 ,用来指向本列中下一个非0元素。
a[m][2] a[m][3]
a[1][n] a[2][n] a[3][n] a[m][n]
按行优先方式顺序存储 a11,a12,…a1n,a21,…,a2n,…,am1,am2,…,amn 按列优先方式顺序存储 a11,a21,…am1,a12,…,am2,…,a1n,a2n,…,amn
i n(n 1) / 2
i 1
因此可将这些元素存放在一个向量S[n(n+1)/2]中
a11 a21 a22 a31 a32
k= 0 1 2 3 4
…...
an1
n(n-1)/2
…...
ann
13
n(n+1)/2-1
为了便于访问方阵A中的元素,必须在aij 和S[k]之间建立一个对应关系。若aij在下三 角矩阵中,则有:
9
推广到 n 维数组
将其中的每一个元素映射到一维数组的某 一个位置,各维元素个数为 m1, m2, m3, …, mn,下标为 i1, i2, i3, …, in 的数组元素的存储 地址:
LOC(i1 , i2 ,, in ) LOC(0,0,...0) (i1 m2 m3 mn i2 m3 m4 mn in 1 mn in ) * l
5.3数据库系统

特殊矩阵压缩存储的压缩原则是:对有规律的元素和值相同的元素只分配一个存储单元,对于零元素不分配空间。
5.3.1 三角矩阵三角矩阵大体分为:下三角矩阵、上三角矩阵和对称矩阵。
对于一个n 阶矩阵A 来说:若当i<j 时,有a ij =0,则称此矩阵为下三角矩阵;若当i>j 时,有a ij =0,则此矩阵称为上三角矩阵;若矩阵中的所有元素均满足a ij =a ji ,则称此矩阵为对称矩阵。
对于下三角矩阵,按“行序为主序”进行存储,得到的序列为:a 11,a 21,a 22,a 31,a 32,a 33…a n1,a n2…a nn 。
由于下三角矩阵的元素个数为n(n+1)/2,所以可压缩存储到一个大小为n(n+1)/2的一维数组中。
下三角矩阵中元素a ij (i>j ),在一维数组A 中的位置为:LOC[ i ,j]= LOC[1,1]+ i (i -1)/2+ j-1下三角矩阵:A=a 11a 21 a 22a 31 a 32a 33┆┆┆┆a n1a n2a n3…ann同样,对于上三角矩阵,也可以将其压缩存储到一个大小为n(n+1)/2的一维数组C 中。
其中元素a ij (i<j )在数组C 中的存储位置为:Loc[i,j]=Loc[1,1]+j(j -1)/2+i-1对于对称矩阵,因其元素满足a ij =a ji ,我们可以为每一对相等的元素分配一个存储空间,即只存下三角(或上三角)矩阵,从而将n 2个元素压缩到n(n+1)/2个空间中。
5.3.2 带状矩阵带状矩阵:在矩阵A 中,所有的非零元素都集中在以主对角线为中心的带状区域中。
最常见的是三对角带状矩阵。
A n ×n =a 11a 12a 21a 22a 23a 32a 33a 34a 43a 44 a 45… … …… …特点:i=1,j=1,2;当1<i<n ,j=i-1,i,i+1i=n,j=n-1,n;时,a ij 非零,其他元素均为零。
- 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