写点什么

数据结构学习,数组和数组矩阵的三种压缩

作者:IC00
  • 2022-10-19
    湖南
  • 本文字数:1615 字

    阅读完需:约 1 分钟

数据结构学习,数组和数组矩阵的三种压缩

前言:

前面我们把链表,栈,队列,串,都学习的差不多了,接下我们要学习,数组了,数组在我们编程中用到很多,因为它是最基本的存储方法,它分为一维数组和二维数组,数组和之前学过的一样,我们也是可以看作一个线性表,因为数组是一个有序的序列,接下来我们简单学习一下数组和稀疏矩阵。

每日一遍,防止颓废

1.数组

数组(Array)是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。这些有序排列的同类数据元素的集合称为数组。讲人话就是:(在 C 语言中 a[8],a 代表数组名,[]代表一个数组的写法,8 代表个数,然后从 0 下标开始到 7 下标结束 ,然后有序的序列)

1.1 初始化数组

int Ic[6];//这种不带值的叫声明一个数组int Ic[6]={1,2,3,4,5,6};//这种带值的叫声明了一个数组并初始化了char lc[6]={'1','2','3','4','5','6'};double lc[]={1.23 , 2.6 ,5.4 ,1.5 ,6.4,3.6};//这种不带个数的初始化会根据你元素个数自动给数组设置个数
复制代码


1.2 二维数组

二维数组本质上是以数组作为数组元素的数组,即“数组的数组“,二维数组又称为矩阵,行列数相等的矩阵称为方阵。二维数组,在本质上,是一个一维数组的列表。声明一个 x 行 y 列的二维整型数组。讲人话:(a [5] [4] ,a 代表数组名,5 代表行数,4 代表列数,我觉得这样表示比讲理论要通俗易懂的多)


int a[3][4];//声明一个二维数组int a[3][4] = {  //声明并且初始化二维数组 {0, 1, 2, 3} ,   /*  初始化索引号为 0 的行 */ {4, 5, 6, 7} ,   /*  初始化索引号为 1 的行 */ {8, 9, 10, 11}   /*  初始化索引号为 2 的行 */};int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};//这样也是可以的int a[][4] = {0,1,2,3,4,5,6,7,8,9,10,11};//还有一种行号可以省略的写法,但是列好是绝对不能省略的
复制代码


1.3 特殊矩阵的压缩存储

既然提到了,我们就简单讲一下,不要被这个名字吓到了,不是很难,博主都有点不想讲,提到了,我们就简单了解一下。

1.3.1 对称矩阵

对称矩阵(Symmetric Matrices)是指以主对角线为对称轴,各元素对应相等的矩阵。在线性代数中,对称矩阵是一个方形矩阵,其转置矩阵和自身相等。




计算公式:


当i>=j 时,i*(i+1)/2+j当i<j时,j*(j+1)/2+i就是通过上面的公式得到一维数组的下标,比如:行号时i,列号是j,  ic[3][1]的值在二维里面时45,我们通过公式得到的值是3*(3+1)/2+1=7,一维数组下标为7的值是45
复制代码

1.3.2 三角矩阵

三角矩阵是方形矩阵的一种,因其非零系数的排列呈三角形状而得名。三角矩阵分上三角矩阵和下三角矩阵两种。上三角矩阵的对角线左下方的系数全部为零,下三角矩阵的对角线右上方的系数全部为零。三角矩阵可以看做是一般方阵的一种简化情形



对重复的值进行压缩,有着两个公式,如果你的重复的值在上三角但是你的行数比列数多,还是用的上三角的公式,只是作用域变了,改变作用域。


上三角矩阵:当i<=j时,i*(2*n-i+1)/2+j-i当i>j时,n*(n+1)/2下三角矩阵:当i>=j时,i*(i+1)/2+j当i<j时,n*(n+1)/2
复制代码

1.3.3 对角矩阵

对角矩阵(diagonal matrix)是一个主对角线之外的元素皆为 0 的矩阵,常写为 diag(a1,a2,...,an) 。对角矩阵可以认为是矩阵中最简单的一种,值得一提的是:对角线上的元素可以为 0 或其他值,对角线上元素相等的对角矩阵称为数量矩阵;对角线上元素全为 1 的对角矩阵称为单位矩阵。对角矩阵的运算包括和、差运算、数乘运算、同阶对角阵的乘积运算,且结果仍为对角阵。




公式就不推了,比较简单,高中的数学知识。差不多就是 2*i+j

总结:

数组这一篇文章是比较简单的,博主没有做过多的介绍,因为不是很难,对压缩矩阵感兴趣的可以自己尝试改进,进行更深层次的研究,博主才疏学浅,只是简单的介绍了一下,哈哈哈,传作不易,点赞关注,评论哦!!



发布于: 刚刚阅读数: 3
用户头像

IC00

关注

一个热爱生活,喜欢拍照的热血青年 2022-07-14 加入

一个想学习技术的小盆友,想努力更文,争取今年发100篇

评论

发布
暂无评论
数据结构学习,数组和数组矩阵的三种压缩_学习_IC00_InfoQ写作社区