稀疏数组的实现过程

稀疏数组竟如此简单 从一个场景来分析,为什么需要稀疏数组! 二维数组 我们以一个二维数组模拟五子棋为例,用二维数组模拟创建一个棋盘,数字1代表黑子,二代表白子。在某些场景下,我们需要保存游戏的进度,如果采用原始的二维数组的方式进行保存的话,我们可以看见存储量是非常大的。 所以,当我们采用稀疏数组进行存储后是这个样子的: 我们可以看出稀疏数组给我们节约了相当一部分的空间。 定义 稀疏数组也是一个数组,可以把它看成是一个普通数组的压缩。(一般情况下我们认为如果一个数组的无效数据量远大于有效数据的情况下,对数组进行压缩) 稀疏数 阅读详情

首先把一个大数组内容遍历然后提取行和列以及数据创建新的数组三行n+1列n是数据将数据存入就是存取 

package com.sparseArray;

public class SparseArray {
    public static void main (String[] args) {

        //创建一个原始二维数组
        //0表示没有棋子,1表示黑子2表示蓝
        int chessArr1[][] = new int[11][11];
        chessArr1[1][2] = 1;
        chessArr1[2][3] = 2;
        for (int[] row :chessArr1
             ) {
            for (int data:row
                 ) {
                System.out.printf("%d\t",data);
            }
            System.out.println();
        }

        //将二维数组转化稀疏数组
        //1.先遍历二维数组 得到非零的个数
        int sum = 0;
        for (int i=0;i<11;i++){
            for (int j=0;j<11;j++){
                if(chessArr1[i][j]!=0)
                    sum++;
            }
        }
        //创建对应的稀疏数组
    int sparseArr[][] = new int[sum+1][3];
        //给稀疏数组赋值
        sparseArr[0][0]=11;
        sparseArr[0][1]=11;
        sparseArr[0][2]=sum;
    //将数据导入
        //遍历数组将非零数据导入
        int count = 0;//记录是第几个非零数据
        for (int i=0;i<11;i++){
            for (int j=0;j<11;j++){
                if(chessArr1[i][j]!=0) {
                    count++;
                    sparseArr[count][0] = i;
                    sparseArr[count][1] = j;
                    sparseArr[count][2] = chessArr1[i][j];
                }
            }
        }
        System.out.println();
       for (int i=0;i<sparseArr.length;i++){
           System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
       }


    //1先读取第一行数据的行列创建恢复原始数组
    int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];

       //再将数组内容导入
        for (int i=1;i<sparseArr.length;i++){
            chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
        }

        System.out.println();
        for (int[] row :chessArr2
        ) {
            for (int data:row
            ) {
                System.out.printf("%d\t",data);
            }
            System.out.println();
        }

    }
}

文件写入写出

 //文件写入
        try {
          FileWriter  s = new FileWriter("map.txt");
        for (int i = 0; i <sparseArr.length; i++) {
            for (int j = 0; j <3 ; j++) {
                    s.write(sparseArr[i][j]);
            }}
            s.flush();
            s.close();
            }catch (IOException e) {
            e.printStackTrace();
        }


        int[][] sparseArr2 = new int[sum+1][3];
        int getNum = 0;
        try {
            FileReader  reader = new FileReader("map.txt");

            for(int i =0; i < sparseArr2.length; i++) {
                for(int j =0; j < 3; j++) {
                    getNum = reader.read();
                    sparseArr2[i][j] = getNum;
                }
            } reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
                System.out.println();
        System.out.println("读取后稀疏数组为");
        for(int i =0; i < sparseArr2.length; i++) {
            System.out.printf("%d\t%d\t%d\n", sparseArr2[i][0],sparseArr2[i][1],sparseArr2[i][2]);
            //格式化输出
        }
        System.out.println();
        //输出一下的稀疏数组

 

docker部署zabbix6.2.7+grafana docker部署zabbix6.2.7+grafana。 阅读详情

相关推荐

VS2019中C++动态链接库(DLL)的创建与调用

VS2019中C++动态链接库(DLL)的创建与调用,及一些进阶技巧。

qq_42232522的博客 7563

为Array实现一个Reader,通过接口getReader获取,Reader 有一个接口 read(n)

为Array实现一个Reader,通过接口getReader获取,Reader 有一个接口 read(n) 每次调用会按顺序读区数组的n(默认为1)个元素,调用不会改变数组本身的值,若数组已全部读取完则返回空数组,若传入的参数不为正整数则抛出异常 例: const arr = [1, 2, 3, 4, 5, 6] const reader = arr.getReader() console.log(reader.read(‘1’)) // Error console.log(reader.read(-1).

weixin_45740510的博客 586

深入Google DroidGuard:剖析其自定义虚拟机如何守护Android应用安全(附pcbc文件机制解析)

本文深入解析Google DroidGuard自定义虚拟机如何通过独特的架构设计和加密机制保护Android应用安全。DroidGuard采用动态密钥派生、全加密执行环境和pcbc文件机制,有效防御逆向工程和自动化攻击,为移动安全提供新思路。

weixin_34254464的博客 307

Java 大文本多线程高效读取

本文介绍 Java多线程读取大文件性能提升的高效方案。 前沿 我们在读取一个正常文件的时候,将使用,BufferedReader.read() 的三种方法: BufferedReader.read()  单字节,这个效率最低,基本不考了 BufferedReader.read(char[] cbuf)   根据传入 cbuf 的长度,顺序读取。此方法如果单线程的时候,可以考虑,显然

lianghuaxm的专栏 3206

告别安装烦恼!Orange3 3.38.0 Windows绿色版下载即用,附保姆级汉化与组件配置指南

本文详细介绍了Orange3 3.38.0 Windows绿色版的下载与使用,包括中文汉化、组件配置及高效管理技巧。这款无需安装的数据科学工具特别适合快速验证想法的研究人员和移动办公用户,支持多种数据源和可视化工具,大幅提升工作效率。

weixin_30897233的博客 602

数据权限设计

随着IT新技术不断完善成熟,企业数字化建设得到全面的发展,数据将成为一个创造财富的重要来源,并且越来越多地被视为一项值得重视的企业资产。未来,很多企业之间的竞争,其实也是资源和数据竞争。那么针对数据资产,如何保障它的安全性呢?数据的权限管理无疑是必不可少的。数据权限从数据源来控制不同的用户能够查看、使用和授权不同的数据表数据(其实就是数据表行列的管控),就如同筑起了一道道护城墙,为数据安全提供了保障。

qq_40664711的博客 1万+

什么是稀疏数组?稀疏数组详解

【1】背景 如下图所示,这里有一个 15 ×15 的棋盘,如果现在要让你通过编码的方式,让你将这盘棋局保存起来,你会怎么做呢? 面对行列数据的保存,我相信大多人第一时间都会想到用二维数组进行保存。 【2】普通数组保存棋盘数据 比如,我们可以将棋盘进行抽象化,用一个 15 × 15 的二维数组来表示,然后用 0 表示空点,用 1 表示白子,用 2 表示黑子,于是就可以抽象为如下模样。 于是,我们可以通过如下代码,将数据保存到二维数组中。 /** * 将棋盘数据保存为二维数组 */ .

小白一个 9482

论文翻译:Automatic Lesson Plan Generation via Large Language Models with Self-critique Prompting

在本文中,我们利用大型语言模型(LLMs)的理解和生成能力来自动生成定制化的课程计划。这解决了传统计划可能无法充分满足不同教学环境和学生群体的特定需求的常见挑战。我们提出了一个新颖的三阶段过程,包括使用检索增强生成(RAG)逐步生成课程计划的每个关键组成部分,通过LLMs进行自我批评,以及随后的细化。我们使用这种方法为小学2至5年级生成了涵盖80多个主题的数学课程计划。邀请了三位经验丰富的教育工作者制定全面的课程计划评估标准,然后使用这些标准将我们的LLM生成的课程计划与同一主题的实际课程计划进行基准比较。

CSPhD-winston的博客 1101

稀疏数组详解

稀疏数组 一、什么是稀疏数组? 1、系数矩阵的官方定义 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。 2、稀疏数组 当一个数组中大部分元素为0,或者为同一值(也就是说可以不是0)的数组时,可以使用系数数组来保存该数组。 2.1、大部分怎么去理解 通常认为矩阵中非零元素的总数比上矩阵所有元素总数的值小于等于0.05时,则称该矩阵为稀疏矩阵

m0_52209438的博客 1724

华为OD机试 - 打印机队列 - 优先队列(Python/JS/C/C++ 双机位C卷 200分)

这个问题要求模拟打印机的文件调度过程,关键在于正确处理每个打印机队列中的文件优先级和文件进入队列的顺序。优先级处理:每个文件有一个 1 到 10 的优先级,数字越大优先级越高,打印机应首先处理优先级最高的文件。在打印机 1 的队列中插入了 3 个文件,分别有不同的优先级,其中编号 3 的文件优先级最高,先被取出。因为打印的文件内容有轻重缓急之分,所以队列中的文件有1~10 不同的 优先级,其中数字越大优先级越高。在打印机 2 的队列中插入了 1 个文件,优先级为 1,因此它被首先取出。

学Java,找哪吒 1079

Win10 系统下VisualStudio2022 配置点云库 PCL1.13.0

Win10 系统下VisualStudio2022 配置点云库 PCL1.13.0与Win10 系统下 VisualStudio2019 配置点云库 PCL1.11.1流程基本相同,主要区别有两点: * 从PCL1.12.0版本开始需要进行`启用增强指令集`的设置。 * 附加依赖项添加的内容不同。

点云侠的博客 7006

稀疏数组 - SparseArray

一、稀疏数组的概念 当一个数组中大部分元素是0,或为同一个值的时候,可以使用稀疏数组来保存数组。 它是一个十分有效的存储结构,便于节省存储空间。 它的处理方式是: 1、记录数组一共有几行几列,有多少不同的值; 2、把具有不同值的元素的行、列及值记录在一个小规模二维数组中(稀疏数组),从而缩存储数据的规模。 ...

kayyoo的博客 1441

redhawk:avgTW maxTW minTW minWC的区别

分析dynamic ir drop报告时会遇到这几个值,avgTW maxTW minTW minWC,如下图。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 695

稀疏数组实现过程及原理

当我们想要存储一个多维数组,且这个多为数组一样的元素很多(超过90%)我们就可以采用稀疏数组对其进行存储; 实现过程:首先我们自己构建一个二位数组,然后们把二维数组转为稀疏数组,再把稀疏数组进行还原操作; 在我们的代码中我们有一个将稀疏数组储存到文件中的一个过程; import java.io.*; /** * @author: zfq * @date: 2021/8/4 15:34 * @description: */ public class SparesArray { pub

csdn学子 275

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

稀疏数组的定义作用和Java代码实现过程及结果

一、什么是稀疏数组 稀疏数组,是一种特殊的二维数组,对二维数组中无意义的数据进行压缩,达到节省空间的目的 二、实现稀疏数组 1、创建一个二维数组并打印出来 打印出以下结果 可以看出,对于二维数组中的0同样占据空间,因此可以通过将二维数组转换为稀疏数组保留有效数据节省空间。 2、利用for循环将上面二维数组中的有效数字的个数提取出来 3、开始创建一个稀疏数组 array01[0][0]对应着二维数组行的个数=11 array01[0][1]对应着二维数组列的个数...

weixin_46478061的博客 313

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

jsonarray转string数组_一次稀疏数组的实现过程(附解答思路)

絮叨很简单的一个题哦,就是类似于压缩,解压想办法节省空间题目如图一个棋盘,那我们应该怎么保存这个下棋的记录呢?其实我们可以把它变成一个数组来表示,如下图所示。我们可以看到原始数组中,有很多0的元素,占用了很多的空间,那么我们的目的就是把这些0的元素去掉,然后压缩一下这个二维数组,把它变成一个稀疏数组。如下所示本来占用的空间是11x11 现在是3x3是不是减少了很多的存储。那么我们在代码中是如何去实...

weixin_39980234的博客 226

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

遍历二维数组_一次稀疏数组的实现过程(附解答思路)

絮叨很简单的一个题哦,就是类似于压缩,解压想办法节省空间题目如图一个棋盘,那我们应该怎么保存这个下棋的记录呢?其实我们可以把它变成一个数组来表示,如下图所示。我们可以看到原始数组中,有很多0的元素,占用了很多的空间,那么我们的目的就是把这些0的元素去掉,然后压缩一下这个二维数组,把它变成一个稀疏数组。如下所示本来占用的空间是11x11 现在是3x3是不是减少了很多的存储。那么我们在代码中是如何去实...

weixin_31904867的博客 139

vb datatable转二维数组_一次稀疏数组的实现过程(附解答思路)

絮叨很简单的一个题哦,就是类似于压缩,解压想办法节省空间题目如图一个棋盘,那我们应该怎么保存这个下棋的记录呢?其实我们可以把它变成一个数组来表示,如下图所示。我们可以看到原始数组中,有很多0的元素,占用了很多的空间,那么我们的目的就是把这些0的元素去掉,然后压缩一下这个二维数组,把它变成一个稀疏数组。如下所示本来占用的空间是11x11 现在是3x3是不是减少了很多的存储。那么我们在代码中是如何去实...

weixin_39569747的博客 185

数据结构(Java)--稀疏数组(实现过程):

稀疏数组: 当一个数组的大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组; 稀疏数组的处理方法: 记录数组有几行几列,有多少个不同的值; 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小存储的空间; 应用实例: 使用稀疏数组保留像棋盘地图等的二维的数据; 二维数组转稀疏数组的思路: 遍历原始的二维数组,得到有效数据的个数; 根据sum创建稀疏数组,sparseArr int[sum+1][3] 将二维数组的有效数据存入到稀疏数组; 稀疏数组转原始的二维数组的

WangCode 184

Java实现稀疏数组

一、线性结构 线性结构是最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 线性结构有两种不同存储结构,即顺序存储结构和链式存储结构 顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的,即在内存中是连续的,例如数组 链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息,但好处是可以充分利用碎片地址 线性结构常见的有:数组、队列、链表和...

baolingye的博客 5683

稀疏数组(最详解)

概念 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方式是:记录数组一共有几行几列,有多少个不同值;把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模 如下图:左边是原始数组,右边是稀疏数组 代码实现 public class SparseArray { public static void main(String[] args) { //创建一个二维数组 11*11 0:没有棋子, 1:黑..

白夜行 9063

数据结构(Java实现)- 稀疏sparsearray数组

1、先看一个实际的需求 2、基本介绍 3、实现 3.1二维数组转稀疏数组 3.2稀疏数组转二维数组 4、代码实现: 1、先看一个实际的需求 在编写的五子棋程序中,有存盘退出和续上盘的功能。 这时候就要求我们要使用二维数组来记录棋盘,如下图所示: 在上图的二维数组中用1表示黑棋,用2表示蓝棋 分析问题:我们可以发现该二维数组的很多值是默认值0,因此记录了很多没有意义的数据。这时候就需要用稀疏数组对这个二维数组进行压缩。 2、基本介绍 当一个数组中大部分元素为0,或者为同一...

jQueryZK的博客 9540

Java实现稀疏数组以及将稀疏数组存储到硬盘和从硬盘种读取操作

Java实现稀疏数组 原二维数组—>稀疏数组 稀疏数组—>原二维数组 将稀疏数组保存到硬盘中 将稀疏数组读入内存 为了扩展思维,练习编程,所以写法不一 从上到下看就好,没有对函数进行封装 package zc; /** * Java实现稀疏数组 * 原二维数组--->稀疏数组 * 稀疏数组--->原二维数组 * 将稀疏数组保存到硬盘中 * 将稀疏数组读入内存 ...

yuchen_lucky的博客 1574

java实现稀疏数组

java实现稀疏数组 稀疏数组用于减少对存储资源的占用,只适用于数据稀疏的情况,当数组中存储的的数据过多的时候,存储在稀疏数组中的数据量,可能比原数组的中数据量还大,就不适用了。 注:来还债了,初学数据结构。 二维数组转稀疏数组的思路: 1.遍历原始的二维数组,得到有效数据的个数sum 2.根据sum就可以创建稀疏数组sparseArr int[sum + 1][3] 3.将数组的有效数据存入到稀疏数组 稀疏数组转原始数组的思路: 1.先读取稀疏数组的第一行,根据第一行的数据, 创建原始的二维数组,比如上

qq_41006650的博客 300

Java代码详细实现稀疏数组的转换,稀疏数组与二维数组的互相转换,二维数组转稀疏数组存文件,再读取文件将稀疏数组恢复成二维数组

稀疏数组与二维数组的互相转换,二维数组转稀疏数组存文件,再读取文件将稀疏数组恢复成二维数组 package com.ja.sparseArray; import java.io.*; /** * 稀疏数组练习 * 创建二维数组 --》 转换稀疏数组 --》 存文件 --》 读取--》 还原二维数组 */ public class SparseArray { public stat...

weixin_45481772的博客 496

稀疏数组原理及代码实现

1.什么是稀疏数组 想象有一个11x11的二维数组,其中只有几个地方有值,其余的地方都是0或者别的同一个值。为了减少空间的占用,我们可以使用稀疏数组来对数据存储。如下图: --->>> 可以看到,在稀疏数组中,第一行存储了原始数组的大小以及非零的值的数量。从第二行开始,存储每一个非零数值的位置信息和具体...

256
上一篇: 祭奠自己逝去的三年时光
下一篇: 用数组实现队列
大哥的叔
博客等级 码龄8年 72粉丝 295原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值