文章目录 一,稀疏数组 1.定义 2.存储 3.存储方式 1.普通存储 2.链式存储 a.普通链式存储 b.行式链式存储 c.十字链式存储 4.代码实现 3.将稀疏数组存到此磁盘中 4.从磁盘中读取稀疏数组 5.完整代码 一,稀疏数组 1.定义 稀疏数组可以看做是普通数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组 形如: 0 0 0 0 0 0 0 0 0 int[][] sparseArray = new int[sum+1][3]; //给稀疏数组赋值 sparseArray[0][0] = 11; sparseArray 将稀疏数组存到此磁盘中 我们可以使用java的IO流将稀疏数组存放到磁盘中,原数组和稀疏数组比较,肯定是稀疏数组体积更小,占用空间更小 /** * 将稀疏数组存入磁盘(文件) * */ int[][] sparseArray = new int[sum+1][3]; //给稀疏数组赋值 sparseArray[0
稀疏数组也是一个二维数组,行 取决于有效值的个数+1,列 固定为3 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。 首行解释 6代表二维数组中一共6行 7代表二维数组中一共7行 8代表二维数组中一共8个有效值 第二行及之后的解释 0和3表示在二维数组中的坐标,值为22。 也就是原数组中[0][3]的位置是22 应用实例: 使用稀疏数组,来保留类似前面的二维数组(棋盘、地图等等) 把稀疏数组存盘,并且可以从新恢复原来的二维数组数 整体思路分析 ? 1.2 转换思路 二维数组转稀疏数组的思路: 遍历原始的二维数组,得到有效数据的个数sum 根据sum就可以创建稀疏数组sparseArr int[sum+1][3] 将二维数组的有效数据数据存入到稀疏数组 创建对应的稀疏数组 int[][] sparseArr = new int[sum + 1][3]; //3.
13个有意义的值,那么原来的二维数组还是 7*6=42,而转换后稀疏数组则是 14*3=42,如果原来的二维数组有14、15、16、...个等有意义的值,那么稀疏数组的大小将会超过原先二维数组的大小,这里就得不偿失了 2.如果反过来原来二维数组的有效值只有8个,那么原来的二维数组还是 7*6=42,如果转换为稀疏数组则是9*3=27,可以看到有明显的压缩了。 思路分析 二维数组转换为稀疏数组 1.遍历原始的二维数组,得到要保存的有效数据的个数(sum) 2.根据sum就可以创建稀疏数组 sparseArr int[sum+1][3],即行=sum+1行,列永远等于 3列 3.将二维数组的有效数据存入到稀疏数组即可 public static void main(String[] args) { //1.创建一个原始的二维数组 / 1.先读取稀疏数组的第一行(因为第一行数据保存了原来二维数组的行列和有效数据的个数) 2.根据第一行的数据数据创建原始的二维数组 chessArr2 = int[11][11] 3.在读取稀疏数组后几行的数据
,2020.2 IDEA 激活码 一、稀疏数组的定义 ---- 稀疏(sparsearray)数组:可以看做是普通数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组。 当遇到此种情况时,可以使用稀疏数组。 ? 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 【1】将上面类似的二位数组棋盘保存到稀疏数组中,并存放至外部备份文件 sparsearray.text 中:稀疏数组可以简单的看作为是压缩,在开发中也会使用到。 表示第一行 + 不为零的值,第一行用于存放(行列值:3列数据) int[][] sparseArray = new int[sum+1][3]; sparseArray[ 【3】将稀疏数组文件中的内容恢复至传统的二维数组棋盘; /** * 将稀疏数组文件中的内容恢复至传统的二维数组棋盘 */ public class SparseArrayClass { public
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方法是: 1)记录数组一共有几行几列,有多少个不同的值 2)把具体不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。 ? 二维数组转稀疏数组 public class SpareseArray { public static void main(String[] args) { /** chessArr1[2][3] = 2; /** * 输出原始的二维数组 */ System.out.println("原始的二维数组 创建稀疏数组,行数=sum+1 ,多出来的1行是对稀疏数组中总行数、总列数以及非0个总个数的 sparseArr[0][0] = chessArr1.length; sparseArr
稀疏数组 一、介绍 稀疏数组可以看作是普通数组的压缩,当一个数组中大部分元素为0或同一个值时,可用稀疏数组来保存该数组。 由此可以发现,当一个数组上出现大量无用的数组时,我们可以使用一些方法将其压缩成稀疏数组进行存储,等到使用的时候再进行解压还原。 ,里面的有效值个数有三个, 那么转为稀疏数组后,将会变成一个4*3的稀疏数组。 遍历原数组,得到原数组中有效值的个数num 创建一个稀疏数组,大小为(num+1)*3 稀疏数组的第0行存放,原数组的行个数,列个数,以及有效值的个数 将有效值的行、列、值转换写入稀疏数组中 = 1; arrays[2][4] = 2; arrays[3][3] = 1; for (int[] array : arrays) {
2.问题分析 上面棋盘可用二维数组进行记录,但是二维数组的很多值是默认值0,因此记录了很多没有意义的数据->稀疏数组 3.基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组 稀疏数组的处理方法是: 记录数组一共有几行几列,有多少个不同的值。 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩程序的规模。 4.应用实例 (1)使用稀疏数组,来保留类似前面的二维数组(棋盘、地图等) (2)把稀疏数组存盘,并且可以重新恢复原来的二维数组 public class MySparseArray { 创建稀疏数组"); //稀疏数组记录有多少行、有多少列、有多少非0的值 int[,] tempSparseArray = new int[sum + 1, tempSparseArray[i,1] }\t{ tempSparseArray[i,2] }"); } Console.WriteLine("5.稀疏数组还原二维数组
稀疏数组 基本介绍 当一个数组中大部分元素为0,或者同一个值的数组时,可以使用系数数组来保存该数组。 稀疏数组的处理方法是: 记录数组一共有几行几列,有多少个不同改的值。 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模 稀疏数组转换 二维数组转稀疏数组的思路: 遍历 原始的二维数组,得到有效数据的个数sum 根据sum就可以创建 系数数组sparseArr intsum+1 将二维数组的有效数据存入到稀疏数组 稀疏数组转原始的二维数组的思路 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组。 、 在读取稀疏数组后几行的数据,并赋给原始的二维数组即可。 [] args){ int a[][] = new int[6][6]; a[2][2] = 1; a[3][4] = 2; a[3][3
# 稀疏数组和队列 稀疏 sparsearray 数组 先看一个实际的需求 稀疏数组基本介绍 应用案例 代码实现 课后作业 队列 队列的一个使用场景 队列介绍 数组模拟队列思路 代码演示 数组模拟环形队列 分析问题 因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据.->稀疏数组。 # 稀疏数组基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方法是: 记录数组一共有几行几列,有多少个不同的值 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模 稀疏数组举例说明 # 应用案例 使用稀疏数组,来保留类似前面的二维数组 转 稀疏数组 //1. int sparseArr[][] = new int[sum+1][3]; //给稀疏数组赋值 sparseArr[0][0] = 11;
记录原数组有几行几列,有多少个不同的值 把具有不同值的元素的行列及值记录在一个小规模的数组中,这个小规模的数组就叫稀疏数组 ---- java开发那些事 ---- 3、案例: 现有如下的 6 * 7 比如第二行要记录22在原始数组中的行、列、值,那么稀疏数组第二行就是: 行 列 值 0 3 22 然后用此方法记录15、11、17、-6、39、91、28的相关信息,所以最终由该原始数组转化出来的稀疏数组就是 4、原始数组与稀疏数组相互转换思路: 原始数组转稀疏数组: 遍历二维数组得到有效数组的个数count; 根据count就可以创建稀疏数组 int[count + 1][3]; 将有效数组存入稀疏数组 稀疏数组转原始数组 : 读取稀疏数组第一行,根据第一行数组可以知道原始数组有几行几列,然后创建原始数组; 读取稀疏数组后几行的数组,赋值给原始数组即可 5、代码实操: public class SparseArray { [11][11]; arr1[1][2] = 1; arr1[2][3] = 2; // 原始数组转稀疏数组 // 1.
大规模矩阵运算:在处理大规模的矩阵数据时,如果矩阵中存在大量的零元素,使用稀疏数组能显著减少存储和计算开销。 3. 游戏开发:例如表示地图或棋盘上的状态,其中大部分位置可能是空的。 3.稀疏数组转化 1.原理 稀疏数组的列数是固定的,为三列,分别为行数,列数,值。 第一行代表的是普通二维数组的总行数与总列数,即是一个几乘几的矩阵,后面的值代表非零元素的个数。 3.实现稀疏数组的步骤 1.创建一个二维数组,并用增强循环实现遍历 2.遍历这个二维数组,得出非零数据的个数 3.创建对应的稀疏数组,列数为3列,行数要根据非零数值的个数来表示 4.将非零数值的行列,以及它本身的值赋值给稀疏数组对应的位置中去 创建对应的稀疏数组,列数为3列,行数要根据非零数值的个数来表示。 在稀疏数组中所有的列数都为3列,且行数得根据对应的非零的值的个数来表示,并且数值对应的行列要在第二行开始,所以行数为对应非零数组加一。
0,因此记录了很多没有意义的数据 =>所以采用稀疏数组 处理流程: 1)棋盘 二维数组 => (稀疏数组) =>写入文件【存档功能】 2)读取文件 =>稀疏数组 =>二维数组 => 棋盘 【接上局】 稀疏数组 稀疏数组 (Sparse array) ,所谓稀疏数组就是数组中大部分的内容值都未被使用(或都为零),在数组中仅有少部分的空间使用。 : 1、遍历原始的二维数组,得到有效数据的个数 sum 2、根据sum就可以创建稀疏数组 sparseArr int[sum+1][3] 3、将二维数组的有效数据存入到稀疏数组 稀疏数组转原始二维数组的思路 [] args) { int[][] chessArr1 = new int[15][15]; chessArr1[2][2] = 1; chessArr1[3][3] = 2; = new int[sum + 1][3]; //给稀疏数组赋值 sparseArr[0][0] = 15; sparseArr[0][1] = 15; sparseArr
概念 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方式是:记录数组一共有几行几列,有多少个不同值;把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模 如下图:左边是原始数组,右边是稀疏数组 代码实现 public int[][] b = new int[sum+1][3]; b[0][0] = 11; b[0][1] = 11; b[0][2] = sum; //遍历二维数组,将非0的值存放到稀疏数组 int count = 0; for (int i = 0; i < a.length; i++ :"); //读取稀疏数组 int[][] c = new int[b[0][0]][b[0][1]]; //还原数组的值 for (
概念 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方式是:记录数组一共有几行几列,有多少个不同值;把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模 如下图:左边是原始数组,右边是稀疏数组 解析 代码 package 表示蓝子 int[][] chessArr1 = new int[11][11]; chessArr1[1][2] = 1; chessArr1[2][3] int[][] sparseArr = new int[sum + 1][3]; // 给稀疏数组赋值 sparseArr[0][0] = chessArr.length ; sparseArr[0][1] = chessArr[0].length; sparseArr[0][2] = sum; // 遍历二维数组,将非0的值存入稀疏数组
在这篇文章中,我将谈论:✅ 什么决定了数组的长度✅ 稀疏数组和稠密数组的区别✅ 如何处理稀疏数组神秘数组长度的案例还记得第一次你以为自己掌握了数组吗?我也是。我以为数组的长度是由定义的元素数量决定的。 console.log(arr.length) -> 3 是的,arr.length 是 3,而不是 1! 确实,这不是你每天都会遇到的数组。这就是我们所谓的稀疏数组。 JavaScript 数组也是如此运作的:在索引 2 处标记一个位置意味着在它之前有两个其他的位置(在索引 0 和 1 处),从而使数组的长度为 3。 稀疏数组遇上 map( ) 函数一个惊喜那么,当你在我们的稀疏数组上运行 map() 函数时会发生什么呢?
稀疏数组简单介绍 当一个数组中大部分元素是 0 或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组处理方法: 记录数组一共有几行几列,有多少个不同的值。 [11][11]; chessArr1[1][2] = 1; chessArr1[2][3] = 2; //输出原始二维数组 System.out.println int[][] sparseArr = new int[sum+1][3]; //给稀疏数组赋值 sparseArr[0][0] =11;//sparseArr ,将非 0的存储到稀疏数组 int count = 0;//用于记录是第几个非 0数据 for (int i=0; i < chessArr1.length; i++){ 》》》原始的二维数组 int[][] chessArr2 = new int[sparseArr[0][0]][sparseArr[0][1]]; //把稀疏数组赋值给原来的二维数组
稀疏数组 稀疏数组(sparsearray) 基本介绍: 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 本质上就是压缩数组。 稀疏数组的处理方法: 1. 记录数组一共有几行几列,有多少个不同的值。 2. 把具有不同值的元素的行列以及值,记录在一个小规模的数组中,从而缩小程序的规模。 1.1 实际问题(棋盘) 如下面的二维数组,我们可以假设成是一个棋盘,1代表白子,2代表黑子,现在我们要对其进行存盘以及续盘的操作,如果我们将整个数组都存起来,势必会造成内存的浪费,那么我们可以考虑使用稀疏数组来解决这个问题 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.1.1 存盘 func writeSparse() { // 定义一个结构体,用来存放稀疏矩阵的值 0 var chessMap [11][11]int chessMap[1][2] = 1 chessMap[2][3] = 2 // 定义一个切片 var sparseArr []ValNode
java稀疏数组是什么 特点 1、它可以压缩数据,减少内存空间的使用。 过程 2、记录数组元素的坐标和值。 3、稀疏数组有3列,分别是行、列、值,行数是原数组不同值的数加1; array[0]记录一组行数和列数,以及不同值的数; 然后每行记录一个值在原数组的行列下标记和自己的值。 [][] = new int[11][11]; //下面先固定二维数组的元素,后面可优化~ chessArr1[1][2] = 1; chessArr1[2][3] = 2; = new int[sum + 1][3]; //给稀疏数组赋值 sparesArr[0][0] = 11; sparesArr[0][1] = 11; sparesArr (); //下面将稀疏数组恢复成二维数组 //先读取稀疏数组的第一行元素,根据其数据,创建原始的二维数组 int chessArr2[][] = new int[sparesArr
掌握知识: 数组的初始化和赋值 结构体的初始化和赋值 字符串和整型之间的转换以及其它的一些操作 类型断言 读取文件 写入文件 对稀疏数组进行压缩 package main import ( " var chessMap [11][11]int chessMap[1][2] = 1 chessMap[2][3] = 2 return chessMap } func value interface{} } var sparseArr []valNode func doParseArr(chessMap [11][11]int) []valNode { //稀疏数组 col: 11, value: 0, } //初始化存储稀疏数组 sparseArr = append(sparseArr, val) for i, )) } return sparseArr } func writeParseArr(sparseArr []valNode, filepath string) { //将稀疏数组存储
了解更多:数据结构与算法目录整理 稀疏数组 一、稀疏数组的定义 当一个数组(包括多维数组)中的大部分元素为0或者为同一个数值的数组时,为了节约空间起到压缩的效果,将数据用另一种结构来表示,即稀疏数组 二、根据二维数组转稀疏数组 遍历二维数组,得出有效数据的个数 sum 根据有效数据的个数,确定稀疏数组 sparseArr[sum+1][3] 遍历二维数组,给稀疏数组赋值 /** * *二维数组转稀疏数组 =0) sum++; } } //根据有效数据的个数,确定稀疏数组 sparseArr[sum+1][3] int [][]sparseArr=new int[sum+1][3]; 三、根据稀疏数组转二维数组 根据稀疏数组的第一行确定二位数组的大小 遍历稀疏数组给二维数组赋值 /** * *稀疏数组转二维数组 * @author 蜡笔小新 * */ public class {2,7,6}, {3,2,1}, {5,5,3}, {7,1,4}, {8,7,9} }; //根据稀疏数组的第一行确定二位数组的大小