数据结构之压缩矩阵(三角矩阵,对角矩阵,稀疏式矩阵)

1,三角矩阵是对称矩阵的一种,对称矩阵的最大特点就是a[m][n] = a[n][m]

 那既然是这样,我们在内存中,就没有必要把这个矩阵全部保存,只要保存一半就可以了,余下的一半就用a[m][n] = a[n][m],来表示,这样就节省下来一半的内存.那么这个三角矩阵在内存中是怎么存储的呢

 我们看到这个是有规律的,第一行1个元素,第二行2个元素,第N行就用N个元素

那么我们就可以计算出,在内存中的位置是:i*(i-1)/2+j-1

2,对角矩阵(带状矩阵)

在一般的矩阵中,数据全部集中在该矩阵的对角线附近,别的地方的数据全部是零,那么,我们只需要把有数据的元素保存下来,别的就不管了,这样也节省下来不少内存.

 那么怎么保存这个数据,又方便查找和更改呢,答案是用二维数组,每条对角线的数据就是一个数组,这样,这个二维数组只占了24个数据,本来整个矩阵有64个元素,至于怎么保存,大家应该看到规律了,正对角线的坐标x,y相等,以(0,0)开始,下一个元素的坐标为x+1,y+1.

正对角线上面的那条线坐标以(0,1)开始,下一个元素的坐标同样是横纵坐标都加1

正对角线下面的那条线坐标以(1,0)开始,下一个元素的坐标同样是横纵坐标都加1

3稀疏式矩阵

一个普通矩阵中,其中有数据的元素的占比低于5%,超过95%都是空或者零,我们对这样的矩阵叫过稀疏式矩阵

 像这种矩阵,我们也只要把中间有值的元素给保存下来,别的就不用管了,但是这种要怎么保存,保存后又怎么提取出来呢

 首行,代表是一个7行,7列,有6个有值的元素,别的元素都是零的表,第二行表示1行,1列位置的元素值为3

第三行表示1行,4列位置的元素值为8,依次这样存储,就可以表示出这个稀疏式矩阵了

但是这种存储方式,在读取数据,添加元素和删除元素等操作上不是很方便.于是链式存储结构

就体现出优势了,这里可以采取十字链表:

 

这个就是十字链表的模型,其中数据为有五个成员的结构体:1:横坐标 2:纵坐标 3:元素值 4:向下边元素的指针 5:指向右边元素的指针

然后还有两个头指针列表,分别对应每一行和每一列

这个十字链表看起来好像比较麻烦,但是建立起来后,使用起来比较方便,不管是添加删除元素,都轻松完成.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值