高中信息技术-竞赛班数据结构专项培训教程-05矩阵的压缩存储教案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

§ 5矩阵的压缩存储

§ 5.1 特殊矩阵

§ 5.1.1 三角矩阵与对称矩阵

设有矩阵 A : array [1..n , 1..n] of Atype ;

三角矩阵:

若A 的对角线以上(或以下)的元素均为零。 对称矩阵:

若A 中的兀素满足: a ij = a ji (1 w i , j w n ),

则称为n 阶对称矩阵。

为了节省存储空间,三角矩阵和对称矩阵都不需存储对角线以上 (或以下)的元

素,一般采用一维数组的结构。

此时需要

个元素的存储空间。

若将上三角矩阵中的元素按行顺序存储到

V 中,则V[k]与A[i, j]

k =

若将下三角矩阵中的元素按行顺序存储到

V 中,则V[k]与A[i, j]

0 a 22 a 23 a 24 a 25 0 0 a 33 a 34a 35 0 0 0 a 44 a 45 0 0 0 0 a 55

j

下三角矩阵

在n x n 的矩阵中,若所有非零元素均集中在以对角线为中的带状 区中,该带状区包括主对角线上面和下面各 k 条对角线以及主对角线上的元素,这种矩阵

称带状矩阵。

k=

an a 12 a 13 a 14 a 15

an 0 0 0 0、

a 21 a 22 0

0 0

a 31 a 32 a 33 0 0 a 41 a 42 a 43 a 44 0 .a 51 a 52 a 53 a 54 a 55 丿

上三角矩阵

( 、

an a 12 a 13 a 14 a 15 a 21 a 22 a 23 a 24 a 25 a 31 a 32 a 33 a 34 a 35 a 41 a 42 a 43 a 44 a 45 a 51 a 52 a 53 a 54 a 55 丿

对称矩阵

的对应关系是:

的对应关系是:

§ 5.1.2带状矩阵

1 23456789 10

f

1 123\0

0 '

4210 13^弋0

12768s

0s\2017911

00s11421

富00

0^<218 3 J

k=2的带状矩阵

k条对角线

在带状矩阵A中,i - j > k 或③时,A[ i , j ] = 0 。

对于带状区以外的0元素可不必存储,而只存储带状区中的元素。带状区中有

④个元素,但为了方便起见,每行当作2k+1个元素来存储,此时存储的元素个数为(2k+1) x n个。

【参考答案】:

①i x (i-1) / 2 + j

②(n+(n-i+1)) x (i-1) + (j-i+1)

③j - i > k

④n x n - (n-k) x (n - k - 1)

§ 5.2 稀疏矩阵

大多数元素的值为零的矩阵称为稀疏矩阵,为了节省存储空间,可以采取三元组或十字链表等方法来存储。

§ 5.2.1 三元组表示法

三元组表示法是用三元组(i , j , v )表示矩阵的每个非零元素。

第一行的i ,j , v分别表示矩阵A的行数、列数、非零元素个数,第二行开始的j,v 分别表示矩阵A中每个非

零元素的行下标、

【例5.2 1】

§ 5.2.2三元组矩阵转置

这里只讨论三元组的转置算法。

三元组的转置只需做到:

(1)将三元组中的行列值相互交换;

(2 )将i、j相互调换;

(3)重排三元组中的次序列下标、元素的值。

15 22

11 15 0

91

28 1

1

2

2

3

5

4

6

2

3

4

1

15

22

-15

11

3

-6

91

对矩阵的运算有许多,如两个矩阵相加、相乘、运算,对于一个mx n的矩阵M它的转置矩阵

(j , i 转置

N是

种简单的矩阵

…等。转置是

个n x m的矩阵,且M(i , j ) = N

)。

【例5.2 2】

14

1 23

N = 25

4 56

36J

就可实现三元组的矩阵转置。 这里关键是如何重排三元组里的次序。

「6 6 8 、

「6 6 8 、

『 6 6 8 3

1 1 15

1 1 15

1 1 15 1 4 2

2 4 1 22

1 5 91 1 6 -15 6 1 -15

2 2 11

T =

2 2 11

=>

2 2 11

B =

3 2 3 2 3 3 3 2 3

3 6 28

3 4-6

4 3-6

4 1 22

5 1 91 1 5 91

4 3-6 < 6 3

28 丿

< 3 6

28 丿

< 6

1 -15 丿

§ 5.2.2矩阵相乘

两个矩阵相乘是另一种常用的矩阵运算。 设: C = A X B

A=(a j )为mx s 的矩阵,B=(b j )是s X n 的矩阵,则矩阵 个m X n 的矩阵C=(5 ),其中

(i = 1 , 2 , …,m j = 1 , 2 , …,n )

对于非压缩矩阵,算法如下:

for i := 1 to m do

for j := 1 to n do begi n

C[ i , j ] := 0 ; for k := 1 to s do

C[ i , j ] := C[ i , j ] + A[ i , k ] * B[ k , j ]

end ;

当A 和B 是稀疏矩阵,并分别用三元组

M N 存储时,应如何处理?

注意1 :两个稀疏矩阵相乘的积不一定是稀疏矩阵;

2 :即使C ij = an bu + a i2®j + ............... + a is b sj 中的每个分项 akb kj 均不为零,其累加

值G 也有可能为零。

输入格式:

(输入文件

syz.in )

第1行:i1 j1 v1 ( 分别表示A 的行数、列数、非零兀素个数

第2至v1+1行: ai aj av ( 行下标、列下标、兀素的值 ) 第 v1+2 行:i2

j2 v2

(B

的行数、列数、非零兀素个数

)

第 v1+3 至 v1+v2+2 行: bi bj bv

输出格式: (输出文件

syz.out )

第1行:i3 j3

v3

(C

的行数、列数、非零兀素个数

)

【练习】输入 M N 两个三元组,分别表示 A 、B 两个稀疏矩阵,请计算 输出C 的(压

缩存储)三元组 Y 。

A 与矩阵

B 相乘将得到一

c ij = a i b ij

+ a i2 b 2j + + a is b sj

A 、

B 的乘积C,

相关文档
最新文档