一维数组的地址计算

设每个元素的大小是 \(size\),首元素的地址是 \(a[1]\) ,则

a[i] = a[1] + (i-1)*size

若首元素的地址是 \(a[0]\)

a[i] = a[0] + i*size

二维数组的地址计算 (\(m * n\)的矩阵)

行优先

设每个元素的大小是 \(size\) ,首元素的地址是 \(a[1][1]\) ,则 \(a[i][j]\) ?

分析:\(a[i][j]\) 位于第 \(i\) 行,第 \(j\) 列。它之前有 \(i-1\) 行,在第 \(i\) 行它之前有 \(j-1\) 个元素。

即 \(a[i][j] = a[1][1] + [n*(i-1) + (j-1)]*size\)

三维数组的地址计算 (\(r*m*n\)) \(r\) 行 \(m\) 列 \(n\) 纵

行优先

首元素的地址 \(a[1,1,1]\)

\(a[i,j,k] = a[1,1,1] + [(i-1)*n*m + (j-1)*n + (k-1)]*size\)

压缩存储:指为多个值相同的元素只分配一个存储空间,对零元素不分配存储空间,其目的是为了节省存储空间。

二维数组通常用来存储矩阵,特殊矩阵分为两类

(1)元素分布没有规律的矩阵,按照规律对用的公式实现压缩。

(2)无规律,但非零元素很少的稀疏矩阵,只存储非零元素实现压缩。

一、三角矩阵

包括上三角矩阵,下三角矩阵和对称矩阵

(1)若 \(i<j\) 时,\(a[i,j]=0\) ,则称此矩阵为下三角矩阵。

(2)若 \(i>j\) 时,\(a[i,j]=0\),则称此矩阵为上三角矩阵。

(3)若矩阵中的所有元素满足 \(a[i,j]=a[j,i]\) ,则称此矩阵为对称矩阵。

二、三对角矩阵

带状矩阵的压缩方法:将非零元素按照行优先存入一维数组。

(1)确定一维数组的存储空间大小:\(2+(n-2)*3+2 = 3n-2\)

(2)确定非零元素在一维数组中的地址

$loc(i,j) = loc(1,1) + $ 前 \(i-1\) 行非零元素个数 \(+\) 第 \(i\) 行中 \(a[i,j]\) 前非零元素的个数

前 \(i-1\) 行:\(3 * (i-1) - 1\),因为第一行只有两个,所以要减去 \(1\)

第 \(i\) 行中 \(a[i,j]\) 前非零元素的个数 \(=(j-i)+1,\)

\(j-i\) 有三种情况:

(1)\(j<i ,j-i=-1\)

(2)\(j==i\) **\(,j-i=0\) **

(3)\(j>i ,j-i=1\)

\[loc(i,j) \\= loc(1,1) + 3(i-1)-1 + j-i+1 \\= loc(1,1) + 2(i-1) + j-1 \\= loc(1,1) + 2i+j-3
\]

DS | 一维数组 & 二维数组 & 对称矩阵 & 三角矩阵 & 三对角矩阵地址的计算的更多相关文章

  1. Java基本语法-----java数组(一维数组二维数组)

    嘿嘿!你们懂的,又是图片,委屈大家了. java数组(一维数组二维数组) [正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!下面有个"顶"字,你就 ...

  2. Java一维与二维数组的拷贝与排序

    Java一维与二维数组的拷贝与排序 目录 Java一维与二维数组的拷贝与排序 Arrays.sort() 一维数组升序排序 二维数组按行升序排序 二维数组按列升序排序 Java中的数组 Java中数组 ...

  3. 数据结构 二维数组-->稀疏数组-->二维数组

    稀疏数组基本概念: 稀疏数组应用场景: 当一个数组大部分的元素为"0",或者为同一个值的数组时,可以使用稀疏数组来保存该数组 处理方法: 1>记录数组一共有几行几列,有多少不 ...

  4. php获取一维,二维数组长度的方法(有实例)

    在php中获取数组长度方法很简单,php为我们提供了两个函数可以计算一维数组长度,如count,sizeof都可以直接统计数组长度哦,下面我们来看几个实例吧.php如何获取数组的长度,使用php函数c ...

  5. Java 一维数组 二维数组 三维数组

    二维数组包含一位数组  三维数组就是在二维数组的基础上,再加一层.把二维数组看做是一维数组就可以了,按照上述理解类推.   下面是 一维 二维 三维数组例子   一维数组: int[] array1 ...

  6. 10-20C#基础---一维、二维数组&&冒泡排序

    一.一维数组 1.定义:是某一种数据类型的数据的组合,数组用来分组基本类型或相同类型的对象.数组中的实体叫做数组的元素或成员. 2. 格式:int[ ] shuzu=new int[ 6];存放int ...

  7. Java一维数组二维数组详解API

    所谓数组,是有序的元素序列. 若将有限个类型相同的变量的集合命名,那么这个名称为数组名.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.用于区分数组的各个元素的数字编号称为下标 ...

  8. egret之一维,二维数组

    一维数组转换成二维数组下标公式: 行=下标/二维数组列数 列=下标%二维数组列数+1 ] + ); ] + ); 二维数组转一维数组: 下标=(二维数当前行-1)*列数+二维数当前列-1: let i ...

  9. 一维、二维数组 与 常用的返回数组 以及 fetch_all与fetch_row的区别

    一维数组:单行单列的数组. 二维数组:多行多列的数组.       (至少两行两列) 索引数组: fetch_all() 返回所有数组 fetch_row() 返回一行或一列数组  (第二行需要输入两 ...

  10. 《Java基础知识》一维,二维数组的申明和使用

    为什么要使用数组: 因为不使用数组计算多个变量的时候太繁琐,不利于数据的处理. --------   数组也是一个变量,是存储一组相同类型的变量 声明一个变量就是在内存中划出一块合适的空间 声明一个数 ...

随机推荐

  1. 月薪3w的报表工程师要会哪些技能?报表工程师的招聘要求解读

    对于月薪3w的报表工程师,通常需要具备以下技能: 1. 数据分析与处理 - 数据仓库:了解数据仓库的设计原则和架构,能够构建和优化数据仓库结构. - SQL语言:熟练掌握SQL查询语言,能够编写复杂的 ...

  2. Git 安装与配置教程

    一.下载Git 1.官网地址 下载地址 2.下载 二.安装 1.下载完成后,直接点击安装包安装,即可. 2.开始安装,然后下一步 3.可以在此处自定义地址,然后下一步 3.选择组件 此处默认即可,但我 ...

  3. MINA框架

    一.小程序MINA框架分为三个部分: 有 View(视图层).App Service(逻辑层)和 Natice(系统层). 1.View(视图层) 视图层包含了小程序多个页面.每个页面都有WXML文件 ...

  4. [CF1844G] Tree Weights

    题目描述 You are given a tree with $ n $ nodes labelled $ 1,2,\dots,n $ . The $ i $ -th edge connects no ...

  5. [CF1748E] Yet Another Array Counting Problem

    题目描述 The position of the leftmost maximum on the segment $ [l; r] $ of array $ x = [x_1, x_2, \ldots ...

  6. C++ Qt开发:ProgressBar进度条组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍Progres ...

  7. Tensorflow2.0:使用Keras自定义网络实战

    tensorflow2.0建议使用tf.keras作为构建神经网络的高级API 接下来我就使用tensorflow实现VGG16去训练数据 背景介绍: 2012年 AlexNet 在 ImageNet ...

  8. 如何将 Python 项目打包成 exe,另带卸载功能!

    前言 虽然我是做 web 的,但是对 Python 的众多开源项目一直都很关注.像之前的 stable diffusion 的 AI 绘画,和 so-vits-svc 音色替换等源码的部署文档都很完善 ...

  9. 安装了华企盾DSC防泄密,所有进程的加密文件都无法打开

    用pchunter等工具查看系统回调中是否有文件厂商不存在的(system目录的除外),在恢复模式删除掉,或者用360系统急救箱查杀一下

  10. 华企盾DSC控制台无法登录常见处理方法

    1.查看服务器服务是否正常运行 2.服务器电脑的防火墙关闭了 3.telnet服务器IP和端口(服务器端口和数据库端口)是否是通的 4.如果是外网需要再控制台安装目录改setting配置文件 5.my ...