我是靠谱客的博主 动人钢笔,最近开发中收集的这篇文章主要介绍【DSaAA】矩阵和广义表矩阵和广义表,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

矩阵和广义表

  • 矩阵和广义表
    • 二维数组
    • ADT
    • 简单矩阵
    • 对称矩阵
    • 稀疏矩阵
    • 对角矩阵
    • 矩阵的应用场景
    • 广义表

二维数组

数组是在逻辑和物理上都相邻的一组有序数据,二维数组是一组在逻辑和物理上都相邻的一维数组。二维数组展开就是矩阵,一般的矩阵都可以用一个维维数组表示,但是针对一些特殊的二维数组,可以用更少的空间来存储,达到压缩的目的。

ADT

假设矩阵的操作只有初始化和打印。

简单矩阵

简单矩阵直接使用二维数组存储:SimpleMatrix.java

对称矩阵

对称矩阵是沿主对角线(左上到右下)对称的矩阵,这种矩阵只需要存储上三角或下三角就可以推导出另外一半,这一半的数据(包括对角线上的数据)直接存储在一维数组中。

可以算出一维数组s[k]的元素个数为 n(n+1)2 n ( n + 1 ) 2 个,那么对于矩阵中的元素 aij a i j ,有
aij=aji=smax(i,j)(max(i,j)+1)/2+min(i,j) a i j = a j i = s m a x ( i , j ) ∗ ( m a x ( i , j ) + 1 ) / 2 + m i n ( i , j )

最终矩阵存储的数据大约只有整个矩阵的一半:SymmetricMatrix.java

稀疏矩阵

稀疏矩阵是矩阵中大部分元素都是null0,只需要记录非0元素的位置就可以了,可以用一个三列的数组data[n][3]来记录。其中n是矩阵中非0(null)元素的个数+1+1是因为第一行需要记录矩阵的行列数和非0元素个数,这样才能在打印时确定矩阵的行列;其余行的前两列是元素在矩阵中对应的行列坐标,最后一列是坐标上的具体元素:SparseMatrix.java

对角矩阵

对角矩阵是只有主对角线上有非0(null)元素的矩阵,这就非常明显了,只需要记录对角线上的元素即可:DiagonalMatrix.java

矩阵的应用场景

图像处理方面用的很多,平时应用开发过程中用的不多,如果仅仅是存储数据,很多情况都可以简化为一维表,如果需要做矩阵相关的计算,才会使用到矩阵,目前没有特别使用过矩阵的场景。

广义表

如果表中的所有元素都是原子的、不可再分的非集合元素,这个表就是线性表;如果某个元素是一个可分的集合元素,那么这样的“线性表”成为广义表。

广义表由于元素在广度上的不确定性,就像是稀疏矩阵一样,如果使用数组存储,将浪费很多空间,所以一般都使用链式存储。

诸如树、图、散列等都是广义表,后面的数据结构都是对广义表的研究。

最后

以上就是动人钢笔为你收集整理的【DSaAA】矩阵和广义表矩阵和广义表的全部内容,希望文章能够帮你解决【DSaAA】矩阵和广义表矩阵和广义表所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部