数据结构:特殊矩阵 及其存储

embedded/2024/10/11 5:29:31/

特殊矩阵的压缩存储是一种优化存储空间的技术,主要针对具有许多相同矩阵元素或零元素,且这些元素分布具有一定规律性的矩阵。这些矩阵包括对称矩阵、三角矩阵(上三角矩阵和下三角矩阵)、对角矩阵(如三对角矩阵)以及稀疏矩阵等。以下是对这些特殊矩阵压缩存储的详细介绍及例子。

一、特殊矩阵的定义及特点

  1. 对称矩阵
    • 定义:若一个n阶方阵A中的元素满足a_ij = a_ji(1≤i, j≤n),则称A为对称矩阵
    • 特点矩阵元素关于主对角线对称。
  2. 三角矩阵
    • 定义:若一个n阶方阵A的上(或下)三角区元素均为同一常量(或零),则称A为上(或下)三角矩阵
    • 特点矩阵的一半元素具有相同的值。
  3. 对角矩阵
    • 定义:若一个n阶方阵A中的非零元素都集中在以主对角线为中心的带状区域中,则称A为对角矩阵。特别地,当带状区域的宽度为1时,称为三对角矩阵
    • 特点矩阵的大部分元素为零,非零元素集中在主对角线及其附近的带状区域内。
  4. 稀疏矩阵
    • 定义矩阵中零元素的个数远远多于非零元素的个数,且非零元素的分布没有特定规律的矩阵称为稀疏矩阵
    • 特点矩阵的大部分元素为零。

二、压缩存储的方法

  1. 对称矩阵
    • 方法:只存储上三角区(或下三角区)的元素,另一半元素可以通过对称性得出。
    • 例子:对于一个3阶对称矩阵A,其元素为:
      A = | a11 a12 a13 |  | a21 a22 a23 |  | a31 a32 a33 |

      由于对称性,只需存储上三角(或下三角)部分,如只存储下三角部分:a11, a21, a22, a31, a32, a33,这些元素可以存放在一维数组B中。

对于对称矩阵,由于矩阵元素关于主对角线对称,因此只需要存储上三角区(或下三角区)的元素即可。在压缩存储时,通常将上三角区(不包括主对角线)的元素按照行优先的顺序存储到一个一维数组中。对于元素a[i][j](其中i < j,即上三角区元素),其在一维数组中的位置k可以通过以下公式计算得出:

这里,ij分别是二维数组中的行下标和列下标(通常从0开始),而k是一维数组中的下标。这个公式基于等差数列求和的思想,首先计算出第i行之前(包括第i行)所有元素的总数,然后再加上第i行中从第i列到第j列(不包括第i列)的元素数。

  1. 三角矩阵
    • 方法:只存储非常量元素所在的区域(即上三角区或下三角区中的非常量元素),常量元素则无需存储。
    • 例子:对于一个3阶下三角矩阵A,其元素为(假设上三角区元素全为0):
      A = | a11  0   0  |  | a21 a22  0  |  | a31 a32 a33 |
      只需存储下三角部分(包括主对角线):a11, a21, a22, a31, a32, a33

对于上三角矩阵,由于下三角区的所有元素均为同一常量(通常为0),因此只需要存储主对角线及其以上的元素。在压缩存储时,同样可以采用一维数组来存储这些元素。对于元素a[i][j](其中i <= j,即包括主对角线),其在一维数组中的位置k可以通过以下公式计算得出:

或者,更简洁地表示为(注意这里的下标可能从1开始计数,具体取决于实现):

其中,n矩阵的阶数,ij是二维数组中的行下标和列下标,k是一维数组中的下标。这个公式考虑了上三角矩阵中每行元素数量的递减特性。

  1. 对角矩阵
    • 方法:只存储带状区域内的非零元素,其余元素默认为零,无需存储。
    • 例子:对于一个3阶三对角矩阵A,其元素为:
      A = | a11 a12  0  |  | a21 a22 a23 |  |  0  a32 a33 |
      只需存储三条对角线上的元素:a11, a12, a21, a22, a23, a32, a33

      对于三对角矩阵,非零元素仅出现在主对角线上以及主对角线上方和下方的各一条对角线上。在压缩存储时,可以将这些非零元素按行优先的顺序存储到一个一维数组中。对于元素a[i][j](其中|i - j| <= 1),其在一维数组中的位置k可以通过以下公式计算得出:

      或者,如果数组下标从0开始,则:

      这里,ij分别是二维数组中的行下标和列下标,k是一维数组中的下标。这个公式基于三对角矩阵中每行非零元素数量的固定性(对于n矩阵,每行有3个非零元素,但第一行和最后一行可能少于3个)。

  2. 稀疏矩阵
    • 方法:常见的压缩存储方法包括顺序存储(如三元组表)和链式存储(如十字链表)。
    • 例子:对于一个4x5的稀疏矩阵A,其非零元素较少,可以使用三元组表(i, j, aij)来存储非零元素的位置和值。

三、压缩存储的优势

  • 节省存储空间:通过只存储必要的元素,显著减少存储空间的占用。
  • 提高存储效率:对于大规模的特殊矩阵,通过压缩存储可以显著提高程序的运行效率。
  • 简化矩阵运算:在压缩存储的基础上,可以简化矩阵的运算过程,提高运算速度。

http://www.ppmy.cn/embedded/119222.html

相关文章

robomimic基础教程(四)——开源数据集

robomimic开源了大量数据集及仿真环境&#xff0c;数据集标准格式为HDF5 目录 一、基础要求 二、使用步骤 1. 下载数据集 2. 后处理 3. 训练 4. 查看训练结果 三、HDF5数据集结构与可视化 1. 数据集结构 &#xff08;1&#xff09;根级别&#xff08;data 组 group&a…

828华为云征文|华为云弹性云服务器FlexusX实例下的Nginx性能测试

本文写的是华为云弹性云服务器FlexusX实例下的Nginx性能测试 目录 一、华为云弹性云服务器FlexusX实例简介二、测试环境三、测试工具四、测试方法五、测试结果 下面是华为云弹性云服务器FlexusX实例下的Nginx性能测试。 一、华为云弹性云服务器FlexusX实例简介 华为云弹性云服…

JavaScript 中的闭包的形成及使用场景

JavaScript 中的闭包 闭包&#xff08;Closure&#xff09; 是 JavaScript 中一个非常重要且独特的概念&#xff0c;它指的是 函数能够记住并访问其词法作用域内的变量&#xff0c;即使这个函数在其词法作用域之外执行。 通俗地说&#xff0c;闭包是 一个函数可以“记住”它在…

论文笔记:iCaRL: Incremental Classifier and Representation Learning

1. Contribution 提出了一种新的训练策略&#xff0c;iCaRL&#xff1a;允许以增量方式学习&#xff1a;只需要同时存在一小部分类别的训练数据&#xff0c;新类别可以逐步添加。同时学习分类器和数据表示&#xff1a;iCaRL能够同时学习强大的分类器和数据表示&#xff0c;这与…

Tkinter制作登录界面以及登陆后页面切换--用户数据从数据库获取并进行合法性校验(二)

Tkinter制作登录界面以及登陆后页面切换&#xff08;二&#xff09; 新增功能1. 数据库管理&#xff08;SqlLite&#xff09;2. 用户表创建&#xff08;用户信息增删改查操作&#xff09;3. 完善登录校验 续接上集&#xff0c;废话不多说&#xff0c;开搞! 新增功能 数据库管理…

Android平台使用VIA创建语音交互应用

Android平台使用VIA创建语音交互应用 概述 在 Android 平台上开发一款语音助手应用需要整合多种技术,包括语音识别(ASR)、文字转语音(TTS)、以及热词检测(Hotword Detection)。这些技术共同构成了语音助手应用的核心交互方式,使用户能够通过语音命令与设备进行无缝交…

数据仓库简介(一)

数据仓库概述 1. 什么是数据仓库&#xff1f; 数据仓库&#xff08;Data Warehouse&#xff0c;简称 DW&#xff09;是由 Bill Inmon 于 1990 年提出的一种用于数据分析和挖掘的系统。它的主要目标是通过分析和挖掘数据&#xff0c;为不同层级的决策提供支持&#xff0c;构成…

单位向量的定义和举例说明

单位向量是指长度为 1 的向量。在数学中&#xff0c;单位向量通常用于表示方向&#xff0c;因为它只有方向信息&#xff0c;而没有大小信息。 单位向量的定义&#xff1a; 一个向量 v \mathbf{v} v 被称为单位向量&#xff0c;如果它的**模&#xff08;长度&#xff09;**等…