服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言数组学习之特殊矩阵的压缩存储

C语言数组学习之特殊矩阵的压缩存储

2022-03-10 14:39kikokingzz C/C++

矩阵在计算机图形学、工程计算中都占有举足轻重的地位,本文将讨论如何将矩阵更有效地存储在内存中,并且能够方便地提取矩阵中的元素。感兴趣的同学可以了解一下

首先最开始我们先回忆一下数组的概念

1.数组的定义

数组是由n个相同类型的数据元素构成的有限序列,每个数据元素称为一个数组元素,每个元素在n个线性关系中的序号称为该元素的下标,下标的取值范围称为数组的维界。

数组与线性表的关系

数组是线性表的推广

  • 一维数组可以视为一个线性表
  • 二维数组可视为其元素为定长线性表的线性表
  • 数组一旦被定义,其维数和维界就不再改变,因此除了数组结构的初始化和销毁外,数组只能执行存储元素和修改元素的操作

在了解完数组的定义后,我们再了解一下数组在内存中是如何存储的

 

2.数组的存储结构

一个数组的所有元素在内存中占用一段连续的存储空间

一维数组的存储如下:

C语言数组学习之特殊矩阵的压缩存储

对于多维数组,比如二维数组来说,有两种映射方法:按行优先 和 按列优先

按行优先:先行后列,先存储行号较小的元素,行号相等先存储列号较小的元素

C语言数组学习之特殊矩阵的压缩存储

按列优先:先列后行,先存储列号较小的元素,列号相等先存储行号较小的元素

C语言数组学习之特殊矩阵的压缩存储

习题1

C语言数组学习之特殊矩阵的压缩存储

在了解数组在内存中的存储方式后,我们可以开始用数组来存储矩阵中的元素了!

 

3.对称矩阵

概念

对于一个n阶方阵A中的任意一个元素ai,j都有ai,j=aj,i,则称为对称矩阵

对于一个对称矩阵我们可以将其中的元素划分为3个部分:上三角区,主对角线和下三角区

C语言数组学习之特殊矩阵的压缩存储

存储方法选择

土办法

用一个n*n的数组去完完整整地将整个矩阵中的元素给存储下来。

压缩存储

我们发现对于n阶对称矩阵,上三角区的所有元素与下三角区的所有元素相同,若采用上述的土办法,将会浪费几乎一半的空间,因此我们将其中重复相同的元素只存放一次。

存储主对角线和下三角区

C语言数组学习之特殊矩阵的压缩存储

可见,采取行优先的原则将主对角线和下三角区的元素存入数组B当中

那么在数组B当中,ai,j对应B[?]呢?我们可以自己通过计算得出一个映射公式

C语言数组学习之特殊矩阵的压缩存储

习题1

C语言数组学习之特殊矩阵的压缩存储

习题2

C语言数组学习之特殊矩阵的压缩存储

 

4.三角矩阵

概念

C语言数组学习之特殊矩阵的压缩存储

存储方法选择

土办法

用一个n*n的数组去完完整整地将整个矩阵中的元素给存储下来。

压缩存储法

与对称矩阵不同之处在于,存储完下三角区和主对角线上的元素之后,紧接着存储对角线上方的常量一次。

按行存储主对角线和下三角区+常量C

C语言数组学习之特殊矩阵的压缩存储

按行存储主对角线和上三角区+常量C

C语言数组学习之特殊矩阵的压缩存储

 

5.三对角矩阵

概念

对角矩阵称为带状矩阵;在三对角矩阵中,所有非零元素都集中在以主对角线为中心的3条对角线的区域,其他区域的元素都为零

C语言数组学习之特殊矩阵的压缩存储

存储方法选择

压缩存储法

C语言数组学习之特殊矩阵的压缩存储

习题1

C语言数组学习之特殊矩阵的压缩存储

 

6.稀疏矩阵

概念

矩阵中非零元素的个数t,相对矩阵元素的个数s来说非常少,即s>>t的矩阵称为稀疏矩阵。

C语言数组学习之特殊矩阵的压缩存储

存储方法选择

三元组存储

C语言数组学习之特殊矩阵的压缩存储

十字链表法

 C语言数组学习之特殊矩阵的压缩存储

到此这篇关于C语言数组学习之特殊矩阵的压缩存储的文章就介绍到这了,更多相关C语言 矩阵的压缩存储内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://kikoking.blog.csdn.net/article/details/121750093

延伸 · 阅读

精彩推荐
  • C/C++深入C++拷贝构造函数的总结详解

    深入C++拷贝构造函数的总结详解

    本篇文章是对C++中拷贝构造函数进行了总结与介绍。需要的朋友参考下...

    C++教程网5182020-11-30
  • C/C++C语言实现双人五子棋游戏

    C语言实现双人五子棋游戏

    这篇文章主要为大家详细介绍了C语言实现双人五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    两片空白7312021-11-12
  • C/C++使用C++制作简单的web服务器(续)

    使用C++制作简单的web服务器(续)

    本文承接上文《使用C++制作简单的web服务器》,把web服务器做的功能稍微强大些,主要增加的功能是从文件中读取网页并返回给客户端,而不是把网页代码...

    C++教程网5492021-02-22
  • C/C++关于C语言中E-R图的详解

    关于C语言中E-R图的详解

    今天小编就为大家分享一篇关于关于C语言中E-R图的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看...

    Struggler095962021-07-12
  • C/C++C语言main函数的三种形式实例详解

    C语言main函数的三种形式实例详解

    这篇文章主要介绍了 C语言main函数的三种形式实例详解的相关资料,需要的朋友可以参考下...

    ieearth6912021-05-16
  • C/C++c/c++实现获取域名的IP地址

    c/c++实现获取域名的IP地址

    本文给大家汇总介绍了使用c/c++实现获取域名的IP地址的几种方法以及这些方法的核心函数gethostbyname的详细用法,非常的实用,有需要的小伙伴可以参考下...

    C++教程网10262021-03-16
  • C/C++OpenCV实现拼接图像的简单方法

    OpenCV实现拼接图像的简单方法

    这篇文章主要为大家详细介绍了OpenCV实现拼接图像的简单方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    iteye_183805102021-07-29
  • C/C++c/c++内存分配大小实例讲解

    c/c++内存分配大小实例讲解

    在本篇文章里小编给大家整理了一篇关于c/c++内存分配大小实例讲解内容,有需要的朋友们可以跟着学习参考下。...

    jihite5172022-02-22