矩阵(待优化)
书上的细节补充:
数组的元素在内存中占用连续的存储空间
一般的矩阵在压缩以后依旧保留了其随机存取的特性,可以逆向解析地址得到位序
这个考察的并不多,但不代表不会考察,对于任意给定的压缩状态都应该会逆向解析
包括对称的行优先、列优先,上、下三角矩阵的行优先、列优先,三对角矩阵对应
其中应该注意一点就是对称矩阵公式推导是和上下三角一样的
但其毕竟还是有两个元素的,对称的两个元素存取所对应的公式是恰相反的
经典的对应统考题,十四题
稀疏矩阵存储的方式可以有多种,但具体看书上为好
数组存储与压缩:
两种映射方式,行优先、列优先,相应公式的推导和应用
其实最本质的基本不变,就是LOC+K-1,LOC是起始地址,K是元素是第K个,中间隔几个
最需要注意的应该是数组本身是零还是一开始,以及内存中存储是零还是一开始
具体公式的推导不难,但结合后面的几种矩阵存储推导过程就会比较多,略微麻烦
总体就是一个计算量和推导过程繁琐容易错,要特别注意细节问题
目前统考那么多年基本限定在了二维数组,基本没有往高维拓展的研究
如果真的要考试的话,其实考前还是可以了解一下的
矩阵下标一般都是从一开始的,一维存储数组一般都是零开始的
但具体要看题目给定,统考题都会清晰明确给定,存储数组和矩阵分别的序号关系
平时推导训练的时候两边都需要考虑,注意细节问题
N阶矩阵就是有N行、N列的矩阵,一开始末尾是N,零开始末尾是N-1
A【N】和A【0…N】的问题已经解释过了,就不再具体赘述
对称矩阵需要和三角矩阵区分开,三角矩阵一般概括为上三角和下三角
对称矩阵只需要从N·(N+1)/2个元素存储,而上下三角矩阵最后还需要附带一个元素
是要比对称矩阵多一个的,这个要注意
稀疏矩阵,主要缺点是丧失了随机存取的特性,“主要”这个词统考是敏感考点词
课后1、9、10、12有具体的对概念的补充
具体计算:
推导过程就不多说,纸上都列举过,只需要熟练推导即可,主要还是声明一些细节
对称矩阵、三角矩阵推导类似,先算出对应这是第K个元素,再算对应下标
对称矩阵以下三角存储和以上三角存储的运算是两回事,对应课后习题的第三题
存储数组零开、一开,矩阵零开、一开,行优先、列优先,都是注意点
一般矩阵默认从一开始,C语言里面的数组默认从零开始存储数据
推导本身容易犯错,其实更多也是不熟练的原因,完全可以多加练习的
课后第四题习题,现在应该是清楚问题在哪,在于行就容易惯性认为是一行
列就容易惯性认为是一列,而其对应的行序号是从上向下,列序号则才是行的长度
一个易错点
矩阵与存储数组、内存映射:(逆推)
最麻烦的考法应该是先矩阵存储到数组里面,然后再给出内存地址,让你计算对应下标
虽然统考最近看起来考察的难度都不高并且题型比较单一,但还是要防着点
毕竟个人认为这种东西就是纯粹的熟练度和细节把握,多推导几遍是肯定不会出错的
矩阵一般从一开始存储,当然也不排除矩阵从零开始存储,这个是第一个注意
矩阵的行列分别是多少要清楚,这是第二个注意的方向,矩阵到底是什么型的是第三个
矩阵映射到一维存储数组,就有好几个需要注意的
存储数组是从零开始还是从一开始的,需要是按行优先还是按列优先,有无算错
内存映射,一维数组一般都是顺序存储,所以只需要考虑每个单元的大小和起始地址
从数组位序反推得到K,然后根据公式和K的等式,记住对应的i和j能等于还是不等于零
以此去逆凑就行,可以把课后习题改编作为训练的样本去测试
细节上面的考究基本是这一些:
矩阵从零开始还是从一开始,数组从零开始还是从一开始,矩阵末序号、数组末序号
矩阵的行、列分别多少,矩阵是什么类型的矩阵
上三角还是下三角,行优先还是列优先,公式推导有没有算错…