四、特殊矩阵的压缩存储
(一)数组
数组是一种逻辑结构。逻辑上是把一些类型相同的数据排列成一排,然后给它附上下标,方便指出数组中的任何一个元素。
前面所用的数组严格来说是用c语言来实现数组的存储结构。
用c语言实现数组的存储结构:
二维数组是元素全部为一维数组的一维数组
二维数组的行优先存储和列优先存储问题,二维数组在内存中也是一维的,只不过我们在逻辑上将其视为二维的。
行优先存储就是先存完二维数组的一行再存下一行。
列优先存储就是先存完二维数组的一列再存下一列。
行列优先存储的考题可能会涉及到行优先存储下或者列优先存储下某一个元素前面有多少个元素。
关于行优先存储的考题:
(二)矩阵
考研对矩阵的一些算法操作考的比较少,所以这里只讲矩阵的存储。
设计一个矩阵的存储结构最简单就是使用二维数组即可。
考研涉及到的不一般的矩阵有特殊矩阵和稀疏矩阵。
教材给出的特殊矩阵的定义:相同的元素或者零元素在矩阵中的分布存在一定规律的矩阵称之为特殊矩阵、反之称之为稀疏矩阵。
国外资料的特殊矩阵的定义:0元素较多的矩阵称为稀疏矩阵,而特殊矩阵有三种,分别为对称矩阵、三角矩阵、对角矩阵。
(1)对称矩阵
考研数据结构的对称矩阵,只涉及主对角线对称矩阵,并且是方阵。
例题:
将主对角线及其以下的元素列出来,因为是对称矩阵,采用高效的存储方式,所以相同的元素我们只存储一份。也可以列出主对角线及其以上的元素而忽略对角线以下的元素。
答这种题一般采取存储关键位置上的元素,其余的元素可以根据这些关键位置上的元素推算出它们在一维数组中的位置。
(2)三角矩阵
主对角线上方的元素全部为c的元素称之为下三角矩阵,主对角线撒下方的元素全部为c的元素称为上三角矩阵。
以下三角矩阵为例,同样是存储关键位置的元素,然后推算出其他元素的位置。一般把c存储到一维数组的最后一位处,并且只存一份。
对于上三角矩阵也可以进行类似的存储,也可以采用列优先。要体现出关键元素的存储。
(3)对角矩阵
矩阵中除了c之外的元素分布在对角线附近的带状区域内,并且形成的图形是关于对角线轴对称的。这个图形沿着对角线的方向有几行就称为几对角矩阵。
最常见的题目:
以三对角矩阵为例,矩阵的第一行的最后一行只有两个非c元素,而剩下的都有3个非c元素,因此我们需要分成两种情况讨论。这里i行为矩阵的第i行。