我是靠谱客的博主 饱满洋葱,最近开发中收集的这篇文章主要介绍数据结构之压缩矩阵(三角矩阵,对角矩阵,稀疏式矩阵),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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:指向右边元素的指针

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

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

 

最后

以上就是饱满洋葱为你收集整理的数据结构之压缩矩阵(三角矩阵,对角矩阵,稀疏式矩阵)的全部内容,希望文章能够帮你解决数据结构之压缩矩阵(三角矩阵,对角矩阵,稀疏式矩阵)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部