408第一季 - 数据结构 - 数组和特殊矩阵
只考选择题
闲聊
每个格子都有属于它的地址
行优先
比如你要求A[1][2],按照公式可以 100 + (1*4+2)*1 = 106
列优先
列优先是j乘的m行
求A[1][2]
做题区
这个1个存储单元原来是存储大小啊,这沟八题
算出有多少列 n
一共有39列,然后带入下面的公式很快算出来
特殊矩阵的压缩存储
用途
二维矩阵变成一位数组
对称矩阵
上三角元素与下三角元素对应的地方相同,所以浪费了一半的空间
按行存的话就是第一行存1个,第二行存2个,依次推
按列存的话就是第一列存n个,第二列存n-1个,依次推
公式不用管
三角矩阵
注意,空的地方不一定是0,也有可能是常数项,也能构造成三角矩阵
公式不用管
三对角矩阵
只有主对角线和旁边的2个
按行按列存都是第一行或列是2个,最后一行或列2个,其他都是3个
做题区
1
小心题目使坏,这里是1-100也就是100行 * 100列,如果是0-100就变成了101行 * 101列
这里是三对角矩阵,一开始是2个,后面可别一直3+3+3+3+3+3+3....因为到30,30就停了,所以最后一行存2个
最后的公式是2 + 3*28 + 2 = 88 ,一共是88个,但别急,因为是从0开始存一维数组的,所以最后是88-1=87个
2
这里是1-12,所以是12行*12列
6,6是主对角线,别加魔怔了,所以是 12(第1行)+ 11(第2行) + 10(第3行) + 9(第4行) + 8(第5行) + 1(第6行) =51,然后别急要-1变成数组下标(默认为0) 51-1=50
3
注意审题啊,byd列优先,然后这里m7,2是下三角,但这里是上三角,又因为是对称的缘故,所以m7,2就是m2,7
公式走起, 1(第一列)+2(第二列)+3(第三列)+4(第四列)+5(第五列)+6(第六列)+2(第七列)-1 = 22
稀疏矩阵
概述
三元组(行标,列表,值)
因为是稀疏图的,这样就很节省空间了
用数组的话叫三元组表,用链表存是十字链表
可以看见像十字交叉一样,链表
做题区
1
a
2
这里就是要还原稀疏矩阵M,我们知道三元组表有行i,列j和值a,但不知道这个表有多大,只有知道了这个表的范围才能还原,所以 I 和 III 是必须要的
这II和IV不就是三元组表的东西吗,干嘛又存了一次,题目都说了除三元组表外了
a