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

 更新时间:2021年12月08日 09:25:00   作者:kikokingzz  
矩阵在计算机图形学、工程计算中都占有举足轻重的地位,本文将讨论如何将矩阵更有效地存储在内存中,并且能够方便地提取矩阵中的元素。感兴趣的同学可以了解一下

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

1.数组的定义

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

数组与线性表的关系

数组是线性表的推广

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

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

2.数组的存储结构

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

一维数组的存储如下:

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

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

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

习题1

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

3.对称矩阵

概念

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

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

存储方法选择

土办法

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

压缩存储法

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

存储主对角线和下三角区

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

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

习题1

习题2

4.三角矩阵

概念

存储方法选择

土办法

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

压缩存储法

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

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

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

5.三对角矩阵

概念

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

存储方法选择

压缩存储法

习题1

6.稀疏矩阵

概念

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

存储方法选择

三元组存储

十字链表法

 

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

相关文章

  • C语言中函数栈帧的创建和销毁的深层分析

    C语言中函数栈帧的创建和销毁的深层分析

    在C语言中,每一个正在运行的函数都有一个栈帧与其对应,栈帧中存储的是该函数的返回地址和局部变量。从逻辑上讲,栈帧就是一个函数执行的环境:函数参数、函数的局部变量、函数执行完后返回到哪里等等
    2022-04-04
  • Qt之使用GraphicsView框架实现思维导图的示例

    Qt之使用GraphicsView框架实现思维导图的示例

    思维导图可以更方便的整理知识,本文主要介绍了Qt之使用GraphicsView框架实现思维导图的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • C++高精度计时的几种方法总结(测试函数运行时间)

    C++高精度计时的几种方法总结(测试函数运行时间)

    本文介绍了C++中常用的几种程序计时方法,包括clock()函数、GetTickCount()、QueryPerformanceCounter()以及C++11中的chrono库函数,这篇文章主要介绍了C++高精度计时的几种方法,需要的朋友可以参考下
    2024-09-09
  • C++函数指针+对象指针+this指针+指向类静态和非静态成员的指针

    C++函数指针+对象指针+this指针+指向类静态和非静态成员的指针

    这篇文章主要介绍了C++函数指针+对象指针+this指针+指向类静态和非静态成员的指针,函数指针定义和赋值的语法指其中数据类型代表指向函数的返回类型,形参表为指向函数的形参表,更多相关资料需要的朋友可以参考一下下面文章内容
    2022-03-03
  • C语言实现红黑树详细步骤+代码

    C语言实现红黑树详细步骤+代码

    大家好,本篇文章主要讲的是C语言实现红黑树详细步骤+代码,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • C语言自定义实现strlen函数的3种方法总结

    C语言自定义实现strlen函数的3种方法总结

    这篇文章带大家了解C语言中自定义实现strlen函数的3种方法,计数器,递归以及指针,这三种方法通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • C语言计算器的3种实现方法代码

    C语言计算器的3种实现方法代码

    这篇文章主要给大家介绍了关于C语言计算器的3种实现方法,文中通过代码介绍的非常详细,对大家的学习或者工作具有一的参考借鉴价值,需要的朋友可以参考下
    2007-01-01
  • c语言实现词频统计的简单实例

    c语言实现词频统计的简单实例

    下面小编就为大家带来一篇c语言实现词频统计的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • C语言容易被忽视的函数设计原则基础

    C语言容易被忽视的函数设计原则基础

    C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.那么C语言函数设计的一般原则和技巧都是怎样的呢,下面带你了解
    2022-04-04
  • C++冒泡排序算法实例

    C++冒泡排序算法实例

    这篇文章主要介绍了C++冒泡排序算法实例,本文先是介绍了什么是冒泡排序,然后给出了实现代码,需要的朋友可以参考下
    2014-10-10

最新评论