首页 > 其他分享 >DS | 一维数组 & 二维数组 & 对称矩阵 & 三角矩阵 & 三对角矩阵地址的计算

DS | 一维数组 & 二维数组 & 对称矩阵 & 三角矩阵 & 三对角矩阵地址的计算

时间:2022-10-15 21:22:22浏览次数:61  
标签:loc 元素 矩阵 地址 数组 DS size

一维数组的地址计算
设每个元素的大小是 \(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 \]

标签:loc,元素,矩阵,地址,数组,DS,size
From: https://www.cnblogs.com/RioTian/p/16795070.html

相关文章

  • 初识C语言(2)——数组、操作符、关键字
    ......
  • 用栈操作构建数组
    给你一个数组target和一个整数n。每次迭代,需要从 list={1,2,3...,n}中依次读取一个数字。请使用下述操作来构建目标数组target:"Push":从list中读取一个......
  • 零一背包问题,滚动数组实现
    其实最难理解的内循环,也就是j的循环。j的条件是大于w[i],而w[i]则是当前第i个物品的重量,则j是一在从背包容量,向j-w[i]靠近。j-w[i]就是剩下来的空间,而这一波操作......
  • 校验数组是否为空
    校验数组是否为空constisNotEmpty=arr=>Array.isArray(arr)&&!!arr.length;isNotEmpty([1,2,3]);//Result:true回到顶部functiontopFunction(){d......
  • 对象数组:用于维护类的多个对象
    对象数组创建数组,来维护多个对象。将对象存到数组的语法:类名[]数组名=new类名[];例如:Studentstu1=newStudent();Studentstu2=newStudent();Studentstu3=new......
  • C语言习题:数组与选择排序、冒泡排序
    题目1.选择法排序。输入一个正整数n(1<n≤10),再输入n个整数,将它们从大到小排序后输出。试编写相应程序。2.冒泡法排序。输入一个正整数n(1<n≤10),再输入n个整数,将它们从......
  • 矩阵快速幂
    bylcx,zjy基础知识矩阵:由$m\timesn$个数排成的m行n列的数表其实就是二维数组矩阵加减法矩阵加减法的规则:\(A\pmB=C\)其中$C[i][j]$为\(A[i][j]\)与\(B[i][j]\)......
  • springboot如何处理矩阵参数类型的url
    矩阵参数类型的url如何处理首先要开启这个功能在webconfig类中创建Webconfigurer类并且设置urlPathHelper类中的removeSemicolonContent为false@BeanpublicWe......
  • leetcode1480.一维数组的动态和
    1.题目描述给你一个数组nums。数组「动态和」的计算公式为:runningSum[i]=sum(nums[0]…nums[i])。请返回nums的动态和。2.示例示例1:输入:nums=[1,2,3,4]输......
  • #yyds干货盘点#docker常用命令
    服务查看Docker版本信息 dockerversion查看docker简要信息 docker-v启动Docker systemctlstartdocker关闭docker systemctlstopdocker设置开机启动 systemctlen......