首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

数组稀疏数组

文章目录 一,稀疏数组 1.定义 2.存储 3.存储方式 1.普通存储 2.链式存储 a.普通链式存储 b.行式链式存储 c.十字链式存储 4.代码实现 3.将稀疏数组存到此磁盘中 4.从磁盘中读取稀疏数组...5.完整代码 一,稀疏数组 1.定义 稀疏数组可以看做是普通数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组 形如: 0 0 0 0 0 0 0 0 0...我们可以使用java的IO流将稀疏数组存放到磁盘中,原数组稀疏数组比较,肯定是稀疏数组体积更小,占用空间更小 /** * 将稀疏数组存入磁盘(文件) * */ public...在这里有个缺陷就是我不能动态的知道稀疏数组一共有几行,所以我选择传参的方式,这样其实是不太友好的 /** * 读文件获取稀疏数组(获取指定行数的稀疏数组)【不足】 * @return...System.out.println("----------->稀疏数组转回原始数组"); //读取磁盘中的稀疏数组 try {

1.1K40

稀疏数组

稀疏数组 先看一个实际的需求 五子棋程序中,有存盘退出和续上盘的功能。 ? 分析问题: 因为该二维数组的很多值是默认值0, 因此记录了很多没有意义的数据.->稀疏数组。...1.1 稀疏数组介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。...将i存到稀疏数组[0][0]的位置 将j存到稀疏数组[0][1]的位置 将count存到稀疏数组[0][2]的位置 将各个有效值的行列存到稀疏数组下一行,例如[1][0]=行,[1][1]=列,[1][...1.2 转换思路 二维数组稀疏数组的思路: 遍历原始的二维数组,得到有效数据的个数sum 根据sum就可以创建稀疏数组sparseArr int[sum+1][3] 将二维数组的有效数据数据存入到稀疏数组...稀疏数组转原始的二维数组的思路: 1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如上面的chessArr2 =int[5][6] 2.在读取稀疏数组后几行的数据,并赋给原始的二维数组即可

37930
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    稀疏数组

    稀疏数组 当一个数组大部分为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组 稀疏数组的处理办法是: 1.记录数组一共有几行几列,有多少个不同的值 2.把具有不同值的元素的行列及值记录在一个小规模的数组...(稀疏数组 )中,从而缩小程序的规模 如下例:将一个二维数组转换为稀疏数组 稀疏数组第一行保存的值是二维数组有多少行和列,有多少个不同的值。...13个有意义的值,那么原来的二维数组还是 7*6=42,而转换后稀疏数组则是 14*3=42,如果原来的二维数组有14、15、16、...个等有意义的值,那么稀疏数组的大小将会超过原先二维数组的大小,这里就得不偿失了...这里就得到两个结论: 二维数组的有效值越少,转换为对应的稀疏数组就越高效 稀疏数组适用于空数据较多的情况下 在使用稀疏数组之前一定要具体问题具体分析,不能一股脑的用!...代码实现 还是以一个五子棋盘为例 为了对棋盘进行压缩,我们将原来的二维数组的方式转换为稀疏数组的方式 稀疏数组第一行存储的是原来二维数组的行和列以及有效的数据 第二行后存储的是每一个数据的位置和具体值

    44720

    稀疏数组

    ,2020.2 IDEA 激活码 一、稀疏数组的定义 ---- 稀疏(sparsearray)数组:可以看做是普通数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组。...当遇到此种情况时,可以使用稀疏数组。 ? 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。...二、应用实例 ---- 我们将下图所示的棋盘使用稀疏数组进行存盘退出操作: ?...【1】将上面类似的二位数组棋盘保存到稀疏数组中,并存放至外部备份文件 sparsearray.text 中:稀疏数组可以简单的看作为是压缩,在开发中也会使用到。...【3】将稀疏数组文件中的内容恢复至传统的二维数组棋盘; /** * 将稀疏数组文件中的内容恢复至传统的二维数组棋盘 */ public class SparseArrayClass { public

    63430

    稀疏数组

    稀疏数组 一、介绍 稀疏数组可以看作是普通数组的压缩,当一个数组中大部分元素为0或同一个值时,可用稀疏数组来保存该数组。...由此可以发现,当一个数组上出现大量无用的数组时,我们可以使用一些方法将其压缩成稀疏数组进行存储,等到使用的时候再进行解压还原。...,里面的有效值个数有三个, 那么转为稀疏数组后,将会变成一个4*3的稀疏数组。...,如下图所示 由此可以分析出来,将二维数组转换成为稀疏数组只需要这么几步就可以成功。...遍历原数组,得到原数组中有效值的个数num 创建一个稀疏数组,大小为(num+1)*3 稀疏数组的第0行存放,原数组的行个数,列个数,以及有效值的个数 将有效值的行、列、值转换写入稀疏数组

    33320

    02 稀疏数组

    2.问题分析 上面棋盘可用二维数组进行记录,但是二维数组的很多值是默认值0,因此记录了很多没有意义的数据->稀疏数组 3.基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组...稀疏数组的处理方法是: 记录数组一共有几行几列,有多少个不同的值。 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩程序的规模。...4.应用实例 (1)使用稀疏数组,来保留类似前面的二维数组(棋盘、地图等) (2)把稀疏数组存盘,并且可以重新恢复原来的二维数组 public class MySparseArray {...tempSparseArray[i,1] }\t{ tempSparseArray[i,2] }"); } Console.WriteLine("5.稀疏数组还原二维数组...(0); i++) { //根据稀疏数组提供的行和列找到对应的位置,将值插入即可。

    31210

    稀疏数组详解

    稀疏数组 基本介绍 当一个数组中大部分元素为0,或者同一个值的数组时,可以使用系数数组来保存该数组稀疏数组的处理方法是: 记录数组一共有几行几列,有多少个不同改的值。...把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模 稀疏数组转换 二维数组稀疏数组的思路: 遍历 原始的二维数组,得到有效数据的个数sum 根据sum就可以创建 系数数组sparseArr...intsum+1 将二维数组的有效数据存入到稀疏数组 稀疏数组转原始的二维数组的思路 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组。...、 在读取稀疏数组后几行的数据,并赋给原始的二维数组即可。...代码示例 /** *当前类用于将普通的二维数组转换为稀疏数组进行存储 */ public class SparseArray { public static void main(String

    57740

    稀疏数组和队列

    # 稀疏数组和队列 稀疏 sparsearray 数组 先看一个实际的需求 稀疏数组基本介绍 应用案例 代码实现 课后作业 队列 队列的一个使用场景 队列介绍 数组模拟队列思路 代码演示 数组模拟环形队列...分析问题 因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据.->稀疏数组。 # 稀疏数组基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。...稀疏数组的处理方法是: 记录数组一共有几行几列,有多少个不同的值 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模 稀疏数组举例说明 # 应用案例 使用稀疏数组,来保留类似前面的二维数组...转 稀疏数组 //1....,比如map.data.txt 恢复原来的数组时,读取map.data进行恢复 说下我的思路: 使用输出流把稀疏数组写入到磁盘(我是使用把稀疏数组元素遍历的方式把元素一个一个写入到文件,并在每个元素后面拼接

    39220

    稀疏数组 & 环形队列

    一、稀疏数组 1、是什么? 比如有一个 11 * 11 的五子棋盘,我们要用程序模拟,那肯定就是二维数组。...所以稀疏数组一行应该是: 行 列 值 6 7 8 稀疏数组第二行开始,每行记录的是,原始数组中非0值所在的行、所在的列、值的大小。...比如第二行要记录22在原始数组中的行、列、值,那么稀疏数组第二行就是: 行 列 值 0 3 22 然后用此方法记录15、11、17、-6、39、91、28的相关信息,所以最终由该原始数组转化出来的稀疏数组就是...4、原始数组稀疏数组相互转换思路: 原始数组稀疏数组: 遍历二维数组得到有效数组的个数count; 根据count就可以创建稀疏数组 int[count + 1][3]; 将有效数组存入稀疏数组 稀疏数组转原始数组...: 读取稀疏数组第一行,根据第一行数组可以知道原始数组有几行几列,然后创建原始数组; 读取稀疏数组后几行的数组,赋值给原始数组即可 5、代码实操: public class SparseArray {

    44720

    JAVA实现稀疏数组转化

    1.稀疏数组使用场景 1.数据稀疏性较高的情况:当大部分元素的值相同或为默认值(如 0),而只有少数元素具有不同的值时,使用稀疏数组可以节省存储空间。 2. ...2.转化为稀疏数组时如图: 此时我们就将普通数组中的非0数值记录在稀疏数组中,从而简化了数组,空间利用效率大大提升,提高了运算效率。...3.实现稀疏数组的步骤 1.创建一个二维数组,并用增强循环实现遍历 2.遍历这个二维数组,得出非零数据的个数 3.创建对应的稀疏数组,列数为3列,行数要根据非零数值的个数来表示 4.将非零数值的行列,以及它本身的值赋值给稀疏数组对应的位置中去...小编这里使用的否循环遍历二维数组,将非零数的行,列,值赋值给对应的稀疏数组,并且用一个变量来表示稀疏数组的行,所以每次循环都要加一,即一行赋值完成后进行第二行的赋值,0,1,2,表示的是稀疏数组的行,列...在转化为普通数组时,普通二维数组的行列总数分别等于稀疏数组的第一行第一列与第一行第二列。再求对应的数值时要在稀疏数组中找到对应的行数,与列数。

    7110

    Java稀疏数组的应用

    文章目录 需求 存储结构 分析问题 稀疏数组 稀疏数组存储结构 整体思路 代码示例 需求 编写一个五子棋程序,可以完成存盘退出和继续上局的功能。...0,因此记录了很多没有意义的数据 =>所以采用稀疏数组 处理流程: 1)棋盘 二维数组 => (稀疏数组) =>写入文件【存档功能】 2)读取文件 =>稀疏数组 =>二维数组 => 棋盘 【接上局】...稀疏数组 稀疏数组 (Sparse array) ,所谓稀疏数组就是数组中大部分的内容值都未被使用(或都为零),在数组中仅有少部分的空间使用。...稀疏数组存储结构 稀疏数组的处理方法是: 1)记录数组一共有几行几列,有多少个不同的值 2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序占用的空间 整体思路 二维数组稀疏数组的思路...: 1、遍历原始的二维数组,得到有效数据的个数 sum 2、根据sum就可以创建稀疏数组 sparseArr int[sum+1][3] 3、将二维数组的有效数据存入到稀疏数组 稀疏数组转原始二维数组的思路

    32240

    JavaScript 中的稀疏数组世界

    在这篇文章中,我将谈论:✅ 什么决定了数组的长度✅ 稀疏数组和稠密数组的区别✅ 如何处理稀疏数组神秘数组长度的案例还记得第一次你以为自己掌握了数组吗?我也是。我以为数组的长度是由定义的元素数量决定的。...确实,这不是你每天都会遇到的数组。这就是我们所谓的稀疏数组。...如果你想知道稀疏数组是什么,试着将数组记录在控制台:console.log(arr) -> [ , 5 ] 你会注意到值 5 之前有两个空位。...稀疏数组遇上 map( ) 函数一个惊喜那么,当你在我们的稀疏数组上运行 map() 函数时会发生什么呢?...总结✔️ 不是所有的数组都是密集的。有些有空隙,我们称之为稀疏数组。✔️ 为了找到长度,我们必须计算空隙。✔️ map() 方法会忽略空隙,但它不会删除它们。

    21130

    数据结构之稀疏数组

    概念 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。...稀疏数组的处理方式是:记录数组一共有几行几列,有多少个不同值;把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模 如下图:左边是原始数组,右边是稀疏数组 解析 代码 package...("\n得到的稀疏数组为"); for (int i = 0; i < sparseArr.length; i++) { System.out.printf("%...; sparseArr[0][1] = chessArr[0].length; sparseArr[0][2] = sum; // 遍历二维数组,将非0的值存入稀疏数组...,根据第一行的时间,创建原始数组 int[][] chessArr = new int[sparseArr[0][0]][sparseArr[0][1]]; // 2.再读取稀疏数组后几行的数据

    8710

    GO数据结构(一)——稀疏数组

    稀疏数组 稀疏数组(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() { // 定义一个结构体,用来存放稀疏矩阵的值...type ValNode struct{ row int // 所在行 col int // 所在列 val int // 值 } // 定义一个二维数组——棋盘 // 其他都为

    19410

    【说站】java稀疏数组是什么

    java稀疏数组是什么 特点 1、它可以压缩数据,减少内存空间的使用。 过程 2、记录数组元素的坐标和值。...3、稀疏数组有3列,分别是行、列、值,行数是原数组不同值的数加1; array[0]记录一组行数和列数,以及不同值的数; 然后每行记录一个值在原数组的行列下标记和自己的值。...      //下面将二维数组转化为稀疏数组     //1.先遍历二维数组,得到非0数据的个数     int sum = 0;       for (int i = 0; i < 11; i++) ...();       //下面将稀疏数组恢复成二维数组     //先读取稀疏数组的第一行元素,根据其数据,创建原始的二维数组     int chessArr2[][] = new int[sparesArr...[0][0]][sparesArr[0][1]];         //读取稀疏数组后几行的元素(从第二行开始),并赋值给原始的二维数组即可       for (int i = 1; i < sparesArr.length

    31940

    数据结构与算法——稀疏数组

    引言 本篇介绍稀疏数组,二维数组稀疏数组之间的相互转化,如果你需要了解其他数据结构,请点击下面链接查看!!!...了解更多:数据结构与算法目录整理 稀疏数组 一、稀疏数组的定义 当一个数组(包括多维数组)中的大部分元素为0或者为同一个数值的数组时,为了节约空间起到压缩的效果,将数据用另一种结构来表示,即稀疏数组...二、根据二维数组稀疏数组 遍历二维数组,得出有效数据的个数 sum 根据有效数据的个数,确定稀疏数组 sparseArr[sum+1][3] 遍历二维数组,给稀疏数组赋值 /** * *二维数组稀疏数组...//给稀疏数组的第一行赋值 //sparseArr[0][0]=二位数组的行, //sparseArr[0][1]=二位数组的列, //sparseArr[0][2]=二位数组中的有效值...三、根据稀疏数组转二维数组 根据稀疏数组的第一行确定二位数组的大小 遍历稀疏数组给二维数组赋值 /** * *稀疏数组转二维数组 * @author 蜡笔小新 * */ public class

    46310

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券