一维数组的地址计算

设每个元素的大小是 \(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. 面向对象java前三次pta作业

    目录: 1.前言 2.设计与分析 3.踩坑心得 4.主要困难及改进建议 5.总结 1.前言 面向对象程序设计(Object-Oriented Programming,简称OOP)是一种编程范式,它以对 ...

  2. C/C++ 开发SCM服务管理组件

    SCM(Service Control Manager)服务管理器是 Windows 操作系统中的一个关键组件,负责管理系统服务的启动.停止和配置.服务是一种在后台运行的应用程序,可以在系统启动时自动 ...

  3. PX4环境安装

    1.安装ROS 利用鱼香ros一键安装: wget http://fishros.com/install -O fishros && . fishros 调用的命令为: roscore ...

  4. Oracle ADG容灾端部署Rman备份的一些实践经验

    随着数据库中数据量的不断增加.业务的复杂性提高.各种政策颁布的系统容灾等级要求,数据库备份的工作及备份文件的有效性及备份文件的管理变得愈发重要.在Oracle数据库中提供了强大的备份和恢复工具,其中R ...

  5. springboot实现反向代理,动态代理目标地址

    网上找了很多文章,各种照搬,只能自己实现 基于开源项目HTTP-Proxy-Servlet实现 开源项目地址:https://github.com/mitre/HTTP-Proxy-Servlet 1 ...

  6. 使用Python合并多个Excel文件

    合并Excel可以将多个文件中的数据合并到一个文件中,这样可以帮助我们更好地汇总和管理数据.日常工作中,合并Excel主要有以下两种需求: 将多个Excel文件合并为一个文件 将多个Excel工作表合 ...

  7. AntDesignBlazor示例——Modal表单

    本示例是AntDesign Blazor的入门示例,在学习的同时分享出来,以供新手参考. 示例代码仓库:https://gitee.com/known/BlazorDemo 1. 学习目标 创建Mod ...

  8. postman——请求与相应

    一.新建一个项目 直接点击左边栏上面的添加目录图标来新增一个根目录,这样就等于新建了一个项目,我们可以把一个项目或一个模块的用例都存放在这个目录之下,并且在根目录之下我们还可以在建立子目录来进行功能用 ...

  9. 数据结构入门之单链表代码实现(java)

    1:单链表是: 单链表是一种链式存取的 数据结构 用一组地址任意的 存储单元 存放线性表中的数据元素. 链表中的数据是以结点来表示的,每个结点的构成:元素 ( 数据元素 的映象) + 指针 (指示后继 ...

  10. libGDX游戏开发之游戏纹理精灵切割(十六)

    libGDX游戏开发之游戏纹理精灵切割(十六) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和 ...