规律分布特殊矩阵的压缩存储

合集下载

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

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

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

稀疏矩阵及其压缩存储方法

稀疏矩阵及其压缩存储方法

稀疏矩阵及其压缩存储方法1.基本概念稀疏矩阵(SparseMatrix):是矩阵中的一种特殊情况,其非零元素的个数远小于零元素的个数。

设m行n列的矩阵含t个非零元素,则称以二维数组表示高阶的稀疏矩阵时,会产生零值元素占的空间很大且进行了很多和零值的运算的问题。

特殊矩阵:值相同的元素或0元素在矩阵中的分布有一定的规律。

如下三角阵、三对角阵、稀疏矩阵。

压缩存储:为多个值相同的元素只分配一个存储空间;对0元素不分配空间。

目的是节省大量存储空间。

n x n的矩阵一般需要n2个存储单元,当为对称矩阵时需要n(1+n)/2个单元。

2.三元组顺序表——压缩存储稀疏矩阵方法之一(顺序存储结构)三元组顺序表又称有序的双下标法,对矩阵中的每个非零元素用三个域分别表示其所在的行号、列号和元素值。

它的特点是,非零元在表中按行序有序存储,因此便于进行依行顺序处理的矩阵运算。

当矩阵中的非0元素少于1/3时即可节省存储空间。

(1)稀疏矩阵的三元组顺序表存储表示方法#define MAXSIZE 12500 // 假设非零元个数的最大值为12500typedef struct {int i, j; // 该非零元的行下标和列下标ElemType e; //非零元素的值} Triple; // 三元组类型typedef union { //共用体Triple data[MAXSIZE + 1]; // 非零元三元组表,data[0]未用int mu, nu, tu; // 矩阵的行数、列数和非零元个数} TSMatrix; // 稀疏矩阵类型(2)求转置矩阵的操作◆用常规的二维数组表示时的算法for (col=1; col<=nu; ++col)for (row=1; row<=mu; ++row)T[col][row] = M[row][col];其时间复杂度为: O(mu×nu)◆用三元组顺序表表示时的快速转置算法Status FastTransposeSMatrix(TSMatrix M, TSMatrix &T) {// 采用三元组顺序表存储表示,求稀疏矩阵M的转置矩阵TT.mu = M.nu; T.nu = M.mu; T.tu = M.tu;if (T.tu) {for (col=1; col<=M.nu; ++col) num[col] = 0;for (t=1; t<=M.tu; ++t) ++num[M.data[t].j];// 求M 中每一列所含非零元的个数cpot[1] = 1;for (col=2; col<=M.nu; ++col) cpot[col] = cpot[col-1] + num[col-1];// 求M 中每一列的第一个非零元在b.data 中的序号for (p=1; p<=M.tu; ++p) { // 转置矩阵元素col = M.data[p].j; q = cpot[col];T.data[q].i =M.data[p].j; T.data[q].j =M.data[p].i;T.data[q].e =M.data[p].e; ++cpot[col];} // for} // ifreturn OK;} // FastTransposeSMatrix其时间复杂度为: O(mu +nu)3.行逻辑联接的顺序表——压缩存储稀疏矩阵方法之二(链接存储结构)行逻辑联接的顺序表:稀疏矩阵中为了随机存取任意一行的非0元素,需要知道每一行的第一个非0元素在三元组表中的位置,因此将上述快速转置算法中指示行信息的辅助数组cpot 固定在稀疏矩阵的存储结构中,让每一行对应一个单链表,每个单链表都有一个表头指针,这种“带行链接信息”的三元组表即称为行逻辑联接的顺序表。

特殊矩阵的压缩存储

特殊矩阵的压缩存储

特殊矩阵的压缩存储简介矩阵是数学和计算机科学中的基本数据结构之一,广泛应用于各个领域。

在某些情况下,矩阵的数据量十分庞大,导致存储和处理的效率低下。

为解决这一问题,特殊矩阵的压缩存储方法应运而生。

什么是特殊矩阵特殊矩阵是指具有一定特征或性质的矩阵。

常见的特殊矩阵包括对角矩阵、三角矩阵、稀疏矩阵等。

这些矩阵在实际应用中具有普遍性和重要性,因为它们往往可以提供更高效的存储和运算方式。

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]来表示。

矩阵的压缩存储

矩阵的压缩存储

矩阵的压缩存储前⾔ ⼀⼊编程深似海,从此砖头是爱⼈,⽇⽇搬,夜夜搬,搬到天荒地⽼,精尽⼈亡,直教⼈失去了⾃我,忘记了时间,忽然之间发现九⽉份快没了,赶紧写篇博客打个卡,证明⼀下我还活着。

数组与矩阵 数组是由⼀组相同类型的数据元素构成的有限序列,访问数据元素的⽅式是使⽤元素各⾃的序号进⾏访问,也就是下标。

数组它本⾝是线性表的推⼴,⼀维数组就是⼀个向量形式的线性表,⼆维数组就是由⼀维数组组成的线性表。

在许多科学计算和⼯程应⽤中,经常要⽤到矩阵的概念,我们⽤的最多的其实就是Mysql的表,表数据都是⾏列存储,这就是矩阵。

由于矩阵具有元素数⽬固定以及元素按下标关系有序排列等特点,所以在使⽤⾼级语⾔编程时,⼀般都是⽤⼆维数组来存储矩阵。

数组的顺序存储为什么是顺序存储? 我想问这个问题就太低级了。

因为它是数组,数据的存储⽅式分为顺序存储和链式存储两种,数组⼀旦被定义,他的维数和维界就已固定,除结构的初始化和销毁外,数组只会有存取元素和修改元素的操作,不存在插⼊和删除操作,所以数组适合⽤顺序存储。

数组存放在内存中的映射关系 数组可以是多维的,但是内存空间却是⼀维的,所以我们就要把多维数组通过⼀定的映射顺序把它变成⼀维的,然后存储到内存空间之中。

在⼤多数⾼级编程语⾔中,多维数组在内存中通常有两种不同的顺序存储⽅式,按⾏优先顺序存储和按列优先顺序存储。

举个例⼦,以下3⾏4列的⼀个⼆维数组矩阵:a1,a2,a3,a4b1,b2,b3,b4c1,c2,c3,c4 按⾏优先顺序存储: 按列优先顺序存储:地址计算 地址计算的意思就是给定数组下标,求在⼀维内存空间的地址,从⽽取出数据。

我们先来看⼀维数组的地址计算 ⼀维数组内的元素只有⼀个下标,存储⽅法和普通的线性表⼀样。

如⼀维数组 A = [a1,a2,a3,......ai,.........,an],每个元素占⽤size个存储单元(就是内存⼤⼩),那么元素ai的存储地址为 A[0]的位置 + (i-1)*size再来看⼆维数组的地址计算 以⼆维数组Amn为例,⾸元素为A[0][0],数组中任意元素A[i][j]的地址为:A[0][0]的位置 + (n * (i-1) + (j-1))* size;⽐如:⼀个5⾏4列的⼆维数组A,按⾏存储,其中每个元素占2个存储单元,⾸元素地址是1000,求第3⾏第2列的元素在内存中的地址。

特殊矩阵的压缩存储

特殊矩阵的压缩存储

特殊矩阵的压缩存储特殊矩阵的压缩存储是一种将矩阵中的零元素省略掉,只存储非零元素及其位置信息的存储方式。

这种存储方式可以大大减少矩阵在内存中所占用的空间,提高计算效率和存储效率。

一、特殊矩阵的定义特殊矩阵是指具有某些特定性质的矩阵。

常见的特殊矩阵有三角矩阵、对称矩阵、对角线矩阵、稀疏矩阵等。

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即可。

数据结构-第四章 矩阵的压缩存储.

数据结构-第四章 矩阵的压缩存储.

3
二维数组同样满足数组的定义。一个二维 数组可以被看成是特殊的一维数组,其中, 每个元素又是一个一维数组。多维数组可以 按同样的方法类推。
) )
Amn
( a11 a12 (a 21 a 22 ... ( ... (a m1 a m 2
( ) (
... ... a1n ) ... ... a 2 n ) ... ... ... ) ... ... a mn )
特殊矩阵:值相同的元素或零元素在矩阵中
分布有一定规律。 稀疏矩阵:零元素较多,分布无规律。
11
4.2.1
对称矩阵
Aij Aji
在一个n阶方阵A中,若元素满足下述性质:
则称A为对称矩阵。对称矩阵中的元素关于主 对角线对称,故只需要存储矩阵的上三角或下 三角矩阵,这样可以节约大约一半的空间。
0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 67 0 0
col
1 2 1
2 2
3
4 1
5 0
6 1 8
7 0 9
num[col]
cpot[col]
2
5
3
7
8
扫描矩阵三元组表,根据某项的列号,确定它转置 后的行号,查 cpot表,按查到的位置直接将该项存入 转置三元组表中。
7
二维数组与高维数组
1)存储方式
计算机的存储结构是一维的,因而多维数组必须 按某种次序排成一个线性序列加以存储。
a[1][1] a[2][1] A a[3][1] a[m][1]

a[1][2] a[2][2] a[3][2]
a[1][3] a[2][3] a[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

矩阵压缩储存 三元组 带状矩阵

矩阵压缩储存 三元组 带状矩阵

矩阵压缩储存三元组带状矩阵矩阵压缩储存是一种常用的数据结构,用于减少存储空间和提高数据处理效率。

在某些特殊类型的矩阵中,存在大量的零元素,这些零元素会占据大量的存储空间,并且对于计算和处理时也会造成浪费。

因此,为了更高效地存储和处理这些特殊类型的矩阵,我们可以使用三元组带状矩阵的方法。

三元组带状矩阵是一种压缩储存矩阵的方法,它通过记录矩阵中非零元素的值、所在行和列的信息,来表示整个矩阵。

与普通的矩阵相比,三元组带状矩阵可以大大减少存储空间的使用。

三元组带状矩阵的存储方式如下:首先,我们需要记录矩阵的行数和列数,以及非零元素的个数。

然后,我们使用一个数组来存储非零元素的值,另外还需要两个数组来存储非零元素所在的行和列的信息。

这样,我们就可以通过这三个数组来表示整个矩阵了。

举个例子来说明三元组带状矩阵的存储方式。

假设有一个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可以看到,通过三元组带状矩阵的存储方式,我们只需要存储非零元素的信息,而零元素则可以省略不存储。

这样就大大减少了存储空间的使用。

而带状矩阵是指矩阵中非零元素所在的行和列的分布呈带状结构。

带状矩阵可以用来表示一些具有特定规律的矩阵,比如对角线元素较多的矩阵。

在带状矩阵中,非零元素分布在主对角线及其附近的带状区域内,其宽度可以根据实际情况确定。

通过使用带状矩阵的特性,我们可以进一步优化三元组带状矩阵的存储方式。

在存储非零元素的值、行和列的数组中,我们可以按照带状矩阵的分布规律来存储元素的信息,这样可以进一步减少存储空间的使用。

特殊矩阵的压缩存储

特殊矩阵的压缩存储

特殊矩阵的压缩存储所谓特殊矩阵:是指矩阵中值相同的元素或者零元素的分布有⼀定的规律。

常见的特殊矩阵有:对称矩阵、三⾓矩阵、对⾓矩阵。

注意:它们都是⽅阵,即⾏数和列数相同。

主对⾓线:在矩阵中每个元素的⾏标等于纵标(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;。

第4章专题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 矩阵的压缩存储
特殊矩阵的压缩存储——三角矩阵

矩阵的压缩存储..共41页

矩阵的压缩存储..共41页

矩阵的压缩存储..
11、获得的成功越大,就越令人高兴 。野心 是使人 勤奋的 原因, 节制使 人枯萎 。 12、不问收获,只问耕耘。如同种树 ,先有 根茎, 再有枝 叶,尔 后花实 ,好好 劳动, 不要想 太多, 那样只 会使人 胆孝懒 惰,因 为不实 践,甚 至不接 触社会 ,难道 你是野 人。(名 言网) 13、不怕,不悔(虽然只有四个字,但 常看常 新。 14、我在心里默默地为每一个人祝福 。我爱 自己, 我用清 洁与节 制来珍 惜我的 身体, 我用智 慧和知 识充实 我的头 脑。 15、这世上的一切都借希望而完成。 农夫不 会播下 一粒玉 米,如 果他不 曾希望 它长成 种籽; 单身汉 不会娶 妻,如 果他不 曾希望 有小孩 ;商人 或手艺 人不会 工作, 如果他 不曾希 望因此 而有收 益。-- 马钉路 德。
46、我们若已接受最坏的,就再没有什么损失。——卡耐基 47、书到用时方恨少、事非经过不知难。——陆游 48、书籍把我们引入最美好的社会,使我们认识各个时代的伟大智者。——史美尔斯 49、样用功,谁就会和我一样成功。——莫扎特

特殊矩阵和稀疏矩阵

特殊矩阵和稀疏矩阵

2
2
2
25
3
4
1
19
4
5
4
37
5
6
7
50
6
Size=6
... ... ... ...
MaxSize-1
md 6 nd 7 td 6
3.稀疏矩阵的三元组链表
(1)三元组链表 用链表存储的三元组线性表。
(2)行指针数组结构的三元组链表 把每行非零元素三元组组织成一个单链表,再设计一个指针类型的数组存储所有单 链表的头指针。
行指针数组
1
2
3

4
5 6
列指针数组
1
2
3
4
5
6

∧ 11 ∧ 25 ∧
∧ 17 ∧
列号
7
纵向头指针
∧ 19 ∧
∧ 37 ∧
∧ 50 ∧
行号 横向头指针
纵向指针
横向指针
非零元素
} printf("\n"); } }
#include <stdio.h> (矩阵加和输出函数同上,省略) void main(void) {
int a[] = {1,2,4,3,5,6}, b[] = {10,20,40,30,50,60},c[6];
/*注意元素的排列次序*/
int n = 3;
(2)编写一个采用压缩存储的n阶对称矩阵的输出函数,要求输出显示成矩阵形 式,设矩阵元素均为整数类型。
(3)设矩阵A和矩阵B为如下所示的矩阵,编写一个用矩阵A和矩阵B作为测试例 子的测试上述函数的主程序。
void Add(int a[], int b[], int c[], int n) { int i;

49特殊矩阵的压缩存储算法的实现

49特殊矩阵的压缩存储算法的实现
(1)选择合适的数据结构,并定义数据结构的结构体;
(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.设计工作任务及工作量的要求〔包括课程设计说明书、程序等〕:
中北大学
课程设计任务书
学院:
软件学院
专业:
学 生 姓 名:
学 号:
设 计 题 目:
特殊矩阵的压缩存储算法的实现
起迄日期:

矩阵的压缩存储

矩阵的压缩存储

二、稀疏矩阵的压缩存储
若矩阵中非零元素较少(非零元 素的个数栈元素总数的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的存储空间。
存储结构
三元组表示法的类型定ห้องสมุดไป่ตู้:

特殊矩阵的压缩存储

特殊矩阵的压缩存储

《数据结构》课程设计报告书题目:特殊矩阵的压缩存储算法的实现系别:计算机科学与技术学号:111096135学生姓名:徐光辉指导教师:刘双红完成日期:2012年6月5日目录1 需求分析 (1)2 概要设计 (1)3详细设计 (1)3.1 详细设计思想 (1)3.2 核心代码 (2)4 调试分析 (6)5 测试结果 (6)6 总结 (8)指导教师评语 (9)1 需求分析问题描述:对于特殊矩阵可以通过压缩存储减少存储空间。

基本要求:1.针对多种特殊矩阵进行压缩存储,并能显示压缩后的相关地址和值。

2.输入在原来特殊矩阵中的地址,要求能从压缩后的矩阵中读出相应的值。

2 概要设计程序流程图如下:开始选择矩阵类型输入101输入矩阵元素结束图2.1 程序流程图3详细设计3.1 详细设计思想特殊矩阵:值相同元素或者零元素分布有一定规律的矩阵称为特殊矩阵例:对称矩阵、上(下)三角矩阵都是特殊矩阵。

图3.1 特殊矩阵特殊矩阵压缩存储(以对称矩阵为例)对称矩阵是满足下面条件的n 阶矩阵: aij= aji 1<= i,j<= n图 3.2k= 0 1 2 3 4 5 6 n(n+1)/2-1对称矩阵元素可以只存储下三角部分,共需 n(n+1)/2 个单元的空间( 三角矩阵的存储方式类似)。

以一维数组sa[0..n(n+1)/2-1]作为n 阶对称矩阵A的存储结构A中任意一元素 aij 与它的存储位置 sa[k] 之间关系:图 3.3k= 0 1 2 3 4 5 6 n(n+1)/2-13.2 核心代码#include<stdio.h>#include <stdlib.h>static shangsanjiao(int n){int i,j,k,z,g;int L[100][100],SA[100];printf("请输入您要压缩矩阵的行列数\n");scanf("%d",&n);printf("请输入您的矩阵内元素:\n");for(i=1;i<n+1;i++)for(j=1;j<n+1;j++){scanf("%d",&L[i][j]);if(i<=j)k=j*(j-1)/2+i-1;elseSA[k]=L[i][j];}printf("您输入的矩阵为:\n");for(i=1;i<n+1;i++){for(j=1;j<n+1;j++)printf("%d ",L[i][j]);printf("\n");}printf("压缩存储后:\n");for(k=0;k<n*(n+1)/2+1;k++)printf("%d %d\n",k,SA[k]);printf("若要读取矩阵的值请输入'100'退出输入'000'。

2014通化事业单位通用知识:特殊矩阵的压缩存储

2014通化事业单位通用知识:特殊矩阵的压缩存储

2014通化事业单位通用知识:特殊矩阵的压缩存储更多信息,欢迎关注:吉林事业单位招聘考试网(/jilin/)
【导语】在事业单位考试中,计算机专业知识的复习向来是考生复习备考阶段的一大重点,其中中公事业单位考试网为计算机基础知识的复习为考生提供知识点梳理,帮助考生备考!
矩阵是许多科学与工程计算问题中常常涉及到的一种运算对象。

一个m行n列的矩阵是一平面阵列,有mxn个元素。

可以对矩阵作加、减、乘等运算。

只有少数程序设计语言提供了矩阵运算。

通常程序员是用二维数组存储矩阵。

由于这种存储方法可以随机地访问矩阵的每个元素,因而能较为容易地实现矩阵的各种运算。

应用中常遇到一些阶数很高的矩阵,矩阵中有许多值相同的元素或零元素。

二维数组存储矩阵会浪费很多的存储单元。

以上是中公事业单位考试网为考生梳理计算机基础知识点,供大家学习识记!。

矩阵压缩存储

矩阵压缩存储

矩阵压缩存储矩阵压缩存储是一种用于减少数据存储空间的技术,它通过将稀疏矩阵转换为紧凑的格式来实现。

稀疏矩阵是指其中大部分元素为零的矩阵。

在实际应用中,许多矩阵都具有稀疏性,即只有少数非零元素。

因此,使用矩阵压缩存储可以显著减少存储空间的占用。

一种常用的矩阵压缩存储方法是压缩行存储(Compressed Row Storage,CRS)。

在CRS中,只保存非零元素的值以及它们所在的列索引,而行索引则通过其他方式获得。

具体来说,CRS将矩阵分为三个数组,分别用来存储非零元素的值、非零元素所在的列索引以及行指针。

通过使用矩阵压缩存储,可以有效地减少存储空间的占用。

以一个1000x1000的稀疏矩阵为例,假设其中只有100个非零元素,如果使用普通的二维数组来存储该矩阵,需要占用1000x1000=1000000个存储单元。

而如果使用矩阵压缩存储,只需要存储100个非零元素的值和列索引,以及101个行指针。

显然,矩阵压缩存储可以大幅减少存储空间的使用。

矩阵压缩存储不仅可以减少存储空间的占用,还可以提高计算效率。

在处理稀疏矩阵的运算时,如果使用矩阵压缩存储,可以避免对大量零元素的计算,从而提高运算速度。

此外,由于稀疏矩阵的非零元素较少,矩阵压缩存储还可以减少内存访问的次数,进一步提高运算效率。

除了CRS,还有其他的矩阵压缩存储方法,如压缩列存储(Compressed Column Storage,CCS)和块压缩存储(Block Compressed Storage,BCS)。

这些方法在存储结构上有所不同,但都旨在减少存储空间的占用并提高计算效率。

矩阵压缩存储在许多领域都有广泛的应用。

在图像处理中,图像可以看作是一个二维矩阵,而图像处理算法通常只需要对少数非零元素进行操作。

因此,使用矩阵压缩存储可以大幅减少图像数据的存储空间,并提高图像处理的效率。

在科学计算中,矩阵压缩存储也被广泛应用于线性代数运算、有限元分析等领域。

矩阵压缩存储

矩阵压缩存储

矩阵压缩存储矩阵压缩存储是一种将矩阵中的数据进行压缩存储的方法,可以大大减小矩阵所占用的存储空间,提高数据存储和传输的效率。

矩阵压缩存储的实现方式有很多种,其中比较常见的有行压缩存储和列压缩存储。

行压缩存储是将矩阵中的每一行数据进行压缩存储,对于每一行数据,只存储其中非零元素的值和它们在该行中的位置。

这种方式适用于矩阵中非零元素比较稀疏的情况,可以大大减小存储空间。

例如,对于一个5*5的矩阵:1 0 0 0 00 2 0 0 00 0 3 0 00 0 0 4 00 0 0 0 5使用行压缩存储方式,可以将其压缩为:1 12 23 34 4 51 2 2 3 4 5其中第一行表示非零元素的值,第二行表示它们在该行中的位置。

列压缩存储是将矩阵中的每一列数据进行压缩存储,对于每一列数据,只存储其中非零元素的值和它们在该列中的位置。

这种方式适用于矩阵中非零元素比较密集的情况,可以大大减小存储空间。

例如,对于同样的5*5的矩阵:1 0 0 0 00 2 0 0 00 0 3 0 00 0 0 4 00 0 0 0 5使用列压缩存储方式,可以将其压缩为:1 2 3 4 51 2 3 4 51 2 3 4 51 2 4 51 5其中第一行表示非零元素的值,第二行表示它们在该列中的位置。

矩阵压缩存储的优点在于可以大大减小存储空间,提高数据存储和传输的效率。

但是,它也存在一些缺点。

首先,对于非零元素比较密集的矩阵,行压缩存储的效果不如列压缩存储,反之亦然。

其次,矩阵压缩存储需要进行解压缩操作才能得到原始数据,这会增加一定的计算量和时间成本。

最后,矩阵压缩存储的实现需要考虑到数据的稀疏性和分布情况,否则可能会导致存储空间的浪费或者解压缩效率的降低。

总之,矩阵压缩存储是一种非常实用的数据存储和传输方式,可以大大提高数据处理的效率和速度。

在实际应用中,需要根据具体情况选择合适的压缩方式,并进行适当的优化和调整,以达到最佳的效果。

矩阵压缩存储的说法

矩阵压缩存储的说法

矩阵压缩存储的说法矩阵压缩存储是一种有效地存储和处理稀疏矩阵的方法。

稀疏矩阵是指矩阵中大部分元素为0的情况。

在实际应用中,许多矩阵都具有这种特点,例如图像处理、网络分析和科学计算等领域。

因此,矩阵压缩存储技术的研究和应用对于提高存储效率和计算效率具有重要意义。

传统的矩阵存储方式是使用二维数组来表示,即通过行列的索引来访问矩阵中的元素。

然而,对于稀疏矩阵而言,这种存储方式会造成大量的空间浪费和计算资源的浪费。

因此,矩阵压缩存储技术应运而生。

常见的矩阵压缩存储方法有三种:行压缩存储、列压缩存储和块压缩存储。

这些方法都是通过将稀疏矩阵转化为一种更紧凑的数据结构来实现的。

行压缩存储是将矩阵的每一行转化为一个一维数组,并记录下每个非零元素的列索引和值。

通过这种方式,可以大大减少存储空间的使用,但在访问元素时需要进行线性搜索,因此效率较低。

列压缩存储与行压缩存储相反,将每一列转化为一个一维数组,并记录下每个非零元素的行索引和值。

同样地,这种方法也可以节省存储空间,但在访问元素时也需要进行线性搜索。

块压缩存储是将矩阵划分为若干个子矩阵,并记录下每个子矩阵的位置和非零元素的值。

这种方法可以进一步减少存储空间的使用,并且在访问元素时具有较高的效率。

块压缩存储方法在计算机图形学和图像处理等领域得到了广泛的应用。

除了上述的压缩存储方法外,还有一些其他的矩阵压缩存储方法,例如对称压缩存储和对角线压缩存储。

对称压缩存储是指将对称矩阵中的上三角或下三角部分存储起来,而对角线压缩存储是指将对角线元素存储起来。

矩阵压缩存储不仅可以节省存储空间,还可以提高计算效率。

在稀疏矩阵运算中,往往只需要处理非零元素,而对于零元素则可以直接忽略。

因此,通过矩阵压缩存储,可以减少了对零元素的处理,从而提高了计算效率。

总结起来,矩阵压缩存储是一种有效地存储和处理稀疏矩阵的方法。

通过将稀疏矩阵转化为一种更紧凑的数据结构,可以节省存储空间和提高计算效率。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
三角矩阵大体分为三类:下三角矩阵、上三角矩阵、对称矩阵。对于一个 n 阶矩阵 A 来 说:若当 i <j 时,有 a ij =c(典型情况 c=0 ),则称此矩阵为下三角矩阵;若当 i>j 时,有 aij =c(典型情 况 c=0 ),则称此矩阵为上三角矩阵;若矩阵中的所有元素均满足 aij =aji,则称此矩阵为对称矩 阵。
【本节要点】
= 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)
由此得到: Loc ( A[ i][ j])= Loc( A[ 1 ][ 1 ])+( 3 ( i-1 )- 1 +j-i +1)*size
以图 1 所示的 n×n 下三角矩阵( c=0 )为例,讨论三角矩阵的压缩存储实现。 下三角矩阵的压缩存储原则是只存储下三角的非零元素,不存上三角的零元素。按“行 序为主序”进行存储,得到的序列是 a11 ,a21 ,a2 2 ,a31 ,a32 ,a33 ,…, an1 ,an2 ,…, ann。 由于下三角矩阵 A 的元素个数为 n×( n +1 )/ 2 ,即:
┋┋ ┋ ┋0
an1
an2 an3 ┋ ann
图 1 下三角矩阵 A
图 2 三角矩阵的压缩形式下三角矩阵中元素 aij(i>j),在一维数组 B 中的存储地址为:
Loc[ i ,j]=Loc[1,1]+(前 i-1 行非零元素个数+第 i 行中 aij 前非零元素个数)*size
其中,前 i-1 行元素个数=1+2+3+4+ … +(i-1)= i (i -1)/2,
第 i 行中 aij 前非零元素个数=j-1,
size 为每个元素所占字节数,
因此有:LOC[ i ,j]= LOC[1,1]+(i (i -1)/2+ j-1)*size
对于对称矩阵,因其元素满足 aij=aji,我们可以为每一对相等的元素分配一个存储空间, 即只存下三角(或上三角)矩阵,从而将 n2 个元素压缩到 n(n+1)/2 个空间中。
第 1 行: 1 个
第 2 行: 2 个
第 3 行: 3 个


第 n 行: n 个
1+2+3+4+5+…+n= n(n+1)/2
可压缩存储到一个大小为 n ×( n+1 )/ 2 的一维数组 B 中。如图 2 所示。
a11
a21
a22 0
a31
a a 32
33 0
数组 B 数组下标
a11 a21 a22 a31 a32 … ann 1 2 3 4 5 … n(n+1)/2
第 2 讲规律分布特殊矩阵的压缩存储
规律分布的特殊矩阵
元素分布具有一定规律的矩阵称为规律分布的特殊矩阵,如三角矩阵(方阵的上或下三 角全为零)和带状矩阵(若干条对角线含有非零元)。这类矩阵中元素分布的规律可以用数学公 式来反映。已知二维矩阵 A 中元素下标 i 和 j,作为转换函数 f 的自变量,计算出到一维内存空 间的地址值 K,即 A[ i][ j]=B[ K],实现了原二维矩阵到压缩存储后的一维数组的存储映射。 1 .三角矩阵
i=1, j=1,2; 当 1<i<n,j=i-1, i, i+1
a43 a44 a45 ……… … ……
图 3 带状矩阵 A
时 aij 非零,其它元素均为零。
i=n, j=n-1, n;
( 3 )三对角带状矩阵压缩存储方法 三对角带状矩阵的压缩存储原则为:将带状区域上的非零元素按行序存储。 其压缩存储方法如下。 ①确定存储该矩阵所需的一维向量空间的大小 假设每个非零元素所占空间的大小为 size 个单元。从图 3 中观察得知,在三对角带状矩 阵中,除了第一行和最后一行只有 2 个非零元素外,其余各行均有 3 个非零元素,由此得到:所需 一维向量空间的大小为: 2 +2 +3 ×( n -2 )= 3 n-2 ,如图 4 所示。
实际应用中,如果将矩阵 A[][]压缩到一个一维数组 B[]中,我们更关心其下标的对应
关系,即如果将 A[i][j]存储到 B[k],那么如何通过 i 和 j,计算出 k 的值,进而获取 A[i][j]
的值。下面以下三角为例(假设对角线以上全为 0):
0,
当i j时
A[i][ j] B[i(i 1) / 2 j],当i j时
相关文档
最新文档