使用数组表示矩阵存储:
学过线性代数的我们都知道,矩阵其实就是一个二维的表格,那么数据结构中的矩阵其实也是一样的,计算机中可以用矩阵这种形式来存储数据。那么我么怎么表示矩阵呢?在这里我们仍然可以使用数组来表示,不过,矩阵始终是个二维的东西,那么我们怎么用数组来表示二维的表格?
答案很简单,使用二维数组即可!
什么二维数组,其实一句话就是:数组里面的元素还是数组。比如说这个亚子。
我们知道计算机中的存储空间是一维的连续存储的空间,但是我们这里描述的这个矩阵是个二维的东西,那么怎么把他存储到计算机中?那我们可以使用映射,将这个二维的东西映射成一维的连续的数据存储到计算机中,而我们这里就有两种映射的方式。
分别是行优先和列优先。
行优先:其实就是先存储一行的,这样一行一行的来存储,就拿上面的这个3阶矩阵来说,先存储第一行,再第二行,最后第三行
实际存下来就是上面这个亚子
那么按照行优先,是怎么确定这个矩阵的某一个元素具体的位置的?那就是使用下面的这个计算公式
一般情况下l1和l2一般都是0,也就是从整个矩阵的第一个元素开始。
列优先:就是先存储第一列的数据,然后再存储第二列的数据。这样一列一列的存储,从左至右。
那么存储下来呢就是上面这个亚子。
列优先的元素位置计算公式如下:
同样常见的l1和l2也是从0开始,也就是整个矩阵的第一个元素开始。
矩阵的压缩存储:
按照我们正常的矩阵存储,其实对内存的空间开销还是比较大的,所以我们自然就想到了压缩存储。
那么什么是矩阵的压缩存储?其实就是为很多个值相同的元素只分配一个存储空间。对零元素不分配存储空间。那么这个值相同的元素,我们很容易就想到了线性代数的特殊矩阵,比如单位阵,对角阵,对称阵等,我们这里说三个。分别是对称矩阵、上下三角矩阵、和对角矩阵。
对称矩阵:就是矩阵的行和列对调之后还是和原来的矩阵相等。那么这种矩阵就是对称矩阵。比如这种;
ok,我们知道了对称矩阵的特性,所以要运用要压缩存储上,因为对称矩阵有这样的特性,所以我们存储的时候就不用将元素全部存储,我们只需要存储这个镜面一半的元素就可以了。比如上面这个,我们只存158234这些元素即可,相同的元素不要重复存储。
三角矩阵:
三对角矩阵:
因为有三条,所以叫三对角矩阵
稀疏矩阵:
其实就是说矩阵中的元素为0的特别多。
那么我们再存储的时候其实存储分零元素是最能节省空间的。但是稀疏矩阵的位置又没有前面哪些矩阵的规律,所以我们存储的时候就干脆把元素的行列下标也存进去。形成一个三元组。也就是行下标、列下标、元素值。
注意三元组的存储方式牺牲了随机存储的优点。