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

ECS 游戏框架背景知识 1.ECS 框架背景知识 1.1 系统、实体、组件 组件是游戏数据的集合 实体是组件的集合 系统是方法的集合 因此: 一个实体的意义取决于其组件的组合 一个系统的意义取决于其方法集处理的组件集 例如: 一个实体是否拥有运动组件代表着玩家能否操控这个实体运动 是否拥有碰撞体组件代表着这个实体是否参与碰撞 是否拥有刚体组件代表着这个实体是否参与物理模拟 是否拥有角色组件代表这个实体是否参与伤害流程 一个系统获取到实体的运动组件,计算实体的速度,然后获取到实体的碰撞体组件,检查是否干涉,最后得到实体的移动后的位置 阅读详情

稀疏数组

稀疏数组与二维数组

当一个数组中大部分元素都是0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。

二维数组转成稀疏数组:
在这里插入图片描述
从图中可以看出:
稀疏数组的行、列、值的
(1)[0]行:二维数组 a(6*7)的行值,列值,以及元素值不为0的个数(8个)
(2)[1]行:二维数组的值 22 是第 a[0] 行,第 a[3] 列
(3)[2]行:二维数组的值 15 是第 a[0] 行,第 a[6] 列
(4)[3]行:二维数组的值 11 是第 a[1] 行,第 a[1] 列

从而知道:
稀疏数组的value 值,就是二维数组中不为0的元素值,一行一行,从上到下记
稀疏数组的行,列,就是对应value值在二维数组中的位置,比如22 在a[0][3],11在a[1][1],-6在a[2][3]。

稀疏数组和二维数组的转换

在这里插入图片描述
根据思路可以书写代码进行测试:

  1. 创建二维数组
public class Demo {

    public static void main(String[] args) {
        // 创建二维数组
        int[][] array = new int[11][11];
        array[1][2] = 1;
        array[2][3] = 2;
        array[3][4] = 2;
        // 遍历数组打印看看
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                System.out.print(a[i][j] + " ");
            }
            System.out.println();
        }
    }
}

可以得到如下的数组:
在这里插入图片描述

  1. 将得到的二维数组转换成稀疏数组
class ArrayUtil {
	// 传入二维数组
    public void convert(int[][] a) {
        // 记录二维数组不为0的个数
        int sum = 0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if (a[i][j] != 0) {
                    sum++;
                }
            }
        }

        // 根据sum创建稀疏数组,稀疏数组固定列为 3 列,包括row, col, val
        int[][] sparseArray = new int[sum + 1][3];
        // 行 row
        sparseArray[0][0] = a.length;
        // 列 col
        sparseArray[0][1] = a[0].length;
        // 值 val
        sparseArray[0][2] = sum;

        // 遍历二维数组,将不为 0 的值放入稀疏数组中
        // count 用于在稀疏数组中记录是第几个非 0 的数值
        int count = 0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                // 遍历稀疏数组并赋值
                if (a[i][j] != 0) {
                    count++;
                    sparseArray[count][0] = i;
                    sparseArray[count][1] = j;
                    sparseArray[count][2] = a[i][j];
                }
            }
        }

        // 输出稀疏数组
        System.out.println("二维数组对应的稀疏数组:");
        for (int i = 0; i < sparseArray.length; i++) {
            System.out.printf("%d\t%d\t%d\t\n", sparseArray[i][0], sparseArray[i][1], sparseArray[i][2]);
        }
    }

}
  1. 完整代码
public class Demo {

    public static void main(String[] args) {
        // 创建二维数组
        int[][] array = new int[11][11];
        array[1][2] = 1;
        array[2][3] = 2;
        array[3][4] = 2;
        // 遍历数组打印看看
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }
        new ArrayUtil().convert(array);
    }
}

class ArrayUtil {
	// 传入二维数组
    public void convert(int[][] a) {
        // 查询二维数组不为0的个数
        int sum = 0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if (a[i][j] != 0) {
                    sum++;
                }
            }
        }

        // 根据sum创建稀疏数组,稀疏数组固定列为 3 列,包括row, col, val
        int[][] sparseArray = new int[sum + 1][3];
        // 行 row
        sparseArray[0][0] = a.length;
        // 列 col
        sparseArray[0][1] = a[0].length;
        // 值 val
        sparseArray[0][2] = sum;

        // 遍历二维数组,将不为0的值放入稀疏数组中
        // count 用于在稀疏数组中记录是第几个非 0 的数值
        int count = 0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                // 遍历稀疏数组并赋值
                if (a[i][j] != 0) {
                    count++;
                    sparseArray[count][0] = i;
                    sparseArray[count][1] = j;
                    sparseArray[count][2] = a[i][j];
                }
            }
        }

        // 输出稀疏数组
        System.out.println("二维数组对应的稀疏数组:");
        for (int i = 0; i < sparseArray.length; i++) {
            System.out.printf("%d\t%d\t%d\t\n", sparseArray[i][0], sparseArray[i][1], sparseArray[i][2]);
        }
    }

}

打印:
在这里插入图片描述

  1. 将稀疏数组转二维数组
    在上面的基础上,在后面添加代码
		// 稀疏数组转成二维数组
        System.out.println("稀疏数组转成二维数组:");

        // 创建二维数组
        int[][] chessArr2 = new int[sparseArray[0][0]][sparseArray[0][1]];
        // 遍历稀疏数组非 0 值的行,并赋值
        for (int i = 1; i < sparseArray.length; i++) {
            // 将稀疏数组中0, 1列的值对应到二维数组下标;2列的值对应到所在下标的值
            chessArr2[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
        }

        // 遍历数组打印看看
        for (int i = 0; i < chessArr2.length; i++) {
            for (int j = 0; j < chessArr2[i].length; j++) {
                System.out.print(chessArr2[i][j] + " ");
            }
            System.out.println();
        }
  1. 完整代码:
public class Demo {

    public static void main(String[] args) {
        // 创建二维数组
        int[][] array = new int[11][11];
        array[1][2] = 1;
        array[2][3] = 2;
        array[3][4] = 2;
        // 遍历数组打印看看
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }
        new ArrayUtil().convert(array);
    }
}

class ArrayUtil {

    public void convert(int[][] a) {
        // 查询二维数组不为0的个数
        int sum = 0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if (a[i][j] != 0) {
                    sum++;
                }
            }
        }

        // 根据sum创建稀疏数组,稀疏数组固定列为 3 列,包括row, col, val
        int[][] sparseArray = new int[sum + 1][3];
        // 行 row
        sparseArray[0][0] = a.length;
        // 列 col
        sparseArray[0][1] = a[0].length;
        // 值 val
        sparseArray[0][2] = sum;

        // 遍历二维数组,将不为0的值放入稀疏数组中
        // count 用于在稀疏数组中记录是第几个非 0 的数值
        int count = 0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                // 遍历稀疏数组并赋值
                if (a[i][j] != 0) {
                    count++;
                    sparseArray[count][0] = i;
                    sparseArray[count][1] = j;
                    sparseArray[count][2] = a[i][j];
                }
            }
        }

        // 输出稀疏数组
        System.out.println("二维数组对应的稀疏数组:");
        for (int i = 0; i < sparseArray.length; i++) {
            System.out.printf("%d\t%d\t%d\t\n", sparseArray[i][0], sparseArray[i][1], sparseArray[i][2]);
        }

        // 稀疏数组转成二维数组
        System.out.println("稀疏数组转成二维数组:");

        // 创建二维数组
        int[][] chessArr2 = new int[sparseArray[0][0]][sparseArray[0][1]];
        // 遍历稀疏数组非 0 值的行,并赋值
        for (int i = 1; i < sparseArray.length; i++) {
            // 将稀疏数组中0, 1列的值对应到二维数组下标;2列的值对应到所在下标的值
            chessArr2[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
        }

        // 遍历数组打印看看
        for (int i = 0; i < chessArr2.length; i++) {
            for (int j = 0; j < chessArr2[i].length; j++) {
                System.out.print(chessArr2[i][j] + " ");
            }
            System.out.println();
        }

    }


}

将稀疏数组写入磁盘(类五子棋游戏的保存)

到这,完成了稀疏数组和二维数组的转化。接下来,可以将稀疏数组 sparseArray 写入磁盘

		// 将稀疏数组写到磁盘中 map.data
        // 创建缓冲字符输出流
        BufferedWriter bw;
        try {
            bw = new BufferedWriter(new FileWriter("D:\\work\\workspace\\java-learn\\sparseArray\\map.data"));
            // 遍历稀疏数组,写入数据
            for (int i = 0; i < sparseArray.length; i++) {
                bw.write(sparseArray[i][0]+"\t"+sparseArray[i][1]+"\t"+sparseArray[i][2]+"\n");
            }
            // 写完后,将内存缓冲区的数据,刷新到文件中
            bw.flush();
            // 释放资源
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

上述代码执行后,会在相应目录下产生一个map.data文件,直接用txt打开,可以看到有4行3列的数据
在这里插入图片描述

从磁盘将数据取出

		// 从map.data中读取数据
        // 创建缓冲字符输入流
        System.out.println("------------------------------------");
        System.out.println("从文件中读出的稀疏数组:");
        BufferedReader br;
        List<String> list = new ArrayList<>();
        try {
            br = new BufferedReader(new FileReader("D:\\work\\workspace\\java-learn\\sparseArray\\map.data"));
            String line;
            while ((line = br.readLine()) != null) {
                // 可以将数据放入list或其他集合中,进行遍历还原出稀疏数组
                list.add(line);
            }
            // 释放资源
            br.close();

            // 创建稀疏数组
            int[][] sarr = new int[list.size()][3];
            // 遍历list数据
            for (int i = 0; i < list.size(); i++) {
                // 根据写入文件时的 \t 制表符分开放入数组中
                String[] s = list.get(i).trim().split("\t");
                sarr[i][0] = Integer.valueOf(s[0]);
                sarr[i][1] = Integer.valueOf(s[1]);
                sarr[i][2] = Integer.valueOf(s[2]);
            }
            // 遍历稀疏数组
            for (int i = 0; i < sarr.length; i++) {
                System.out.printf("%d\t%d\t%d\t\n", sarr[i][0], sarr[i][1], sarr[i][2]);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

可以看到打印出来的数据:
在这里插入图片描述

完整代码

package com.liwang.sparseArray;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author LiWang Chen
 * @Date 2023-01-06 13:26
 * @Version 1.0
 */
public class Demo {

    public static void main(String[] args) {
        // 创建二维数组
        int[][] array = new int[11][11];
        array[1][2] = 1;
        array[2][3] = 2;
        array[3][4] = 2;
        // 遍历数组打印看看
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }
        new ArrayUtil().convert(array);
    }
}

class ArrayUtil {

    public void convert(int[][] a) {
        // 查询二维数组不为0的个数
        int sum = 0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if (a[i][j] != 0) {
                    sum++;
                }
            }
        }

        // 根据sum创建稀疏数组,稀疏数组固定列为 3 列,包括row, col, val
        int[][] sparseArray = new int[sum + 1][3];
        // 行 row
        sparseArray[0][0] = a.length;
        // 列 col
        sparseArray[0][1] = a[0].length;
        // 值 val
        sparseArray[0][2] = sum;

        // 遍历二维数组,将不为0的值放入稀疏数组中
        // count 用于在稀疏数组中记录是第几个非 0 的数值
        int count = 0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                // 遍历稀疏数组并赋值
                if (a[i][j] != 0) {
                    count++;
                    sparseArray[count][0] = i;
                    sparseArray[count][1] = j;
                    sparseArray[count][2] = a[i][j];
                }
            }
        }

        // 输出稀疏数组
        System.out.println("二维数组对应的稀疏数组:");
        for (int i = 0; i < sparseArray.length; i++) {
            System.out.printf("%d\t%d\t%d\t\n", sparseArray[i][0], sparseArray[i][1], sparseArray[i][2]);
        }

        // 将稀疏数组写到磁盘中 map.data
        // 创建缓冲字符输出流
        BufferedWriter bw;
        try {
            bw = new BufferedWriter(new FileWriter("D:\\work\\workspace\\java-learn\\sparseArray\\map.data"));
            // 遍历稀疏数组,写入数据
            for (int i = 0; i < sparseArray.length; i++) {
                bw.write(sparseArray[i][0]+"\t"+sparseArray[i][1]+"\t"+sparseArray[i][2]+"\n");
            }
            // 写完后,将内存缓冲区的数据,刷新到文件中
            bw.flush();
            // 释放资源
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }


        // 从map.data中读取数据
        // 创建缓冲字符输入流
        System.out.println("------------------------------------");
        System.out.println("从文件中读出的稀疏数组:");
        BufferedReader br;
        List<String> list = new ArrayList<>();
        try {
            br = new BufferedReader(new FileReader("D:\\work\\workspace\\java-learn\\sparseArray\\map.data"));
            String line;
            while ((line = br.readLine()) != null) {
                // 可以将数据放入list或其他集合中,进行遍历还原出稀疏数组
                list.add(line);
            }
            // 释放资源
            br.close();

            // 创建稀疏数组
            int[][] sarr = new int[list.size()][3];
            // 遍历list数据
            for (int i = 0; i < list.size(); i++) {
                // 根据写入文件时的 \t 制表符分开放入数组中
                String[] s = list.get(i).trim().split("\t");
                sarr[i][0] = Integer.valueOf(s[0]);
                sarr[i][1] = Integer.valueOf(s[1]);
                sarr[i][2] = Integer.valueOf(s[2]);
            }
            // 遍历稀疏数组
            for (int i = 0; i < sarr.length; i++) {
                System.out.printf("%d\t%d\t%d\t\n", sarr[i][0], sarr[i][1], sarr[i][2]);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


        // 稀疏数组转成二维数组
        System.out.println("------------------------------------");
        System.out.println("稀疏数组转成二维数组:");

        // 创建二维数组
        int[][] chessArr2 = new int[sparseArray[0][0]][sparseArray[0][1]];
        // 遍历稀疏数组非 0 值的行,并赋值
        for (int i = 1; i < sparseArray.length; i++) {
            // 将稀疏数组中0, 1列的值对应到二维数组下标;2列的值对应到所在下标的值
            chessArr2[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
        }

        // 遍历数组打印看看
        for (int i = 0; i < chessArr2.length; i++) {
            for (int j = 0; j < chessArr2[i].length; j++) {
                System.out.print(chessArr2[i][j] + " ");
            }
            System.out.println();
        }

    }


}

在这里插入图片描述
在这里插入图片描述
可以看看我的个人博客:
网站:https://www.fuzm.wang / https://liwangc.gitee.io
—————————————————————————
作为初学者,很多知识都没有掌握,见谅,如有错误请指出,以期进步,感谢!。后续有新的学习,继续补充上来。

AMEsim柱塞泵的建模学习 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、为什么要对柱塞泵进行仿真?二、Amesim中柱塞泵的模型1.amesim中自己的定排量五柱塞的斜盘柱塞泵2.压力、流量仿真总结 前言 最近在学习Amesim进行柱塞泵的仿真学习,顺便在这里记录我的学习过程,这是我的初衷 提示:以下是本篇文章正文内容,下面案例可供参考 一、为什么要对柱塞泵进行仿真? 柱塞泵是功能和动力学比较复杂的流体机械。而在实际实验中,往往没有条件或者需要对柱塞泵做一些优化,所以需要我们利用仿真... 阅读详情

相关推荐

中小型微服务系统 硬件设备如何部署,QPS大概多少

作为一名合格的开发工程师,不仅仅要在前期开发阶段对业务和技术有深入了解,知道选用哪种合适的技术,业务如何拆分,还要思考后期线上环境,资源,延迟,性能等如何优化维护以及分布式系统一些线上生产的一些问题。 本篇主要针对之前了解的情况对硬件设备资源做一个简单的介绍: 首先分布式系统线上实践问题,我们应该对公司的流量,各个服务,网管,注册中心应该如何部署,部署多少台机器才合适,每台机器的配置如何,每天整体流量有多少,高峰期的请求量有多少,你的整体系统是否扛得住(注:很多公司现在直接使用K8S docker 实现

wangxuelei036的博客 1万+

[翻译转载] Sparse Set 稀疏集

翻译自 Sparse Set - GeeksforGeeks 如果有大量的查询,如何有效地进行以下操作 插入 删减 搜索 清理/删除所有元素 一种解决方案是使用自平衡二进制搜索树,如红黑树、AVL树等。这种解决方案的插入、删除和搜索的时间复杂度为O(Log n)。 我们也可以使用哈希法。在散列法中,前三个操作的时间复杂度是O(1)。但第四个操作的时间复杂度是O(n)。 我们也可以使用 bit-vector (或直接访问表),但 bit-vector 也需要O(n)时间进行清除。 稀疏集的性能优于所有.

Dead_Rabbit6_0的博客 2362

复现YOLOv8语义分割和目标检测训练自己的数据集

训练过程首先会显示你所使用的训练的硬件设备信息,然后下一段话则是你的参数配置,紧接着是backbone信息,最后是加载信息,并告知你训练的结果会保存在runs\segment\trainxx。(1)修改数据加载配置文件,在E:\project\MODEL\YOLO\yolov8-8.2.76\ultralytics-8.2.76\ultralytics\cfg\datasets。三、训练自己的数据集,segment数据集是json格式的。如果想使用多卡训练,device='\0,1,2,xxx\'

m0_56182552的博客 2764

稠密集与稀疏集

派生集如果不加过滤器,生成稠密集,其元素个数为各父集的笛卡尔积,往往造成模型占内存巨大,甚至溢出。然而,往往有用的只是笛卡尔积的一个子集,可以通过添加过滤器(注意此时要用&1,&2,...等表示各父集索引)将这个子集筛选出来(即将无用元组滤掉)得到稀疏集,这样就能使模型体积大为缩小。

东南隅 7744

ZYNQ裸机LWIP双网口实现

文章目录前言一、LWIP双网口二、使用步骤1.部分说明2.部分代码总结 前言 一、LWIP双网口 由于项目需要多通讯口,查阅资料发现lwip支持多网口操作。于是,就开搞了。 二、使用步骤 1.部分说明 利用xemac_add函数在网卡链表中添加一个网卡,即使用netif块重复xemac_add操作。 先用轮询的方式实现双网口,后期修改为中断模式 2.部分代码 导入官方例程LWip echo server, 修改main函数,增加一个netif块 #if LWIP_IPV6==0 #if L..

weixin_35865280的博客 1万+

CentOS 7下Synopsys DC综合工具安装与配置全攻略(附常见报错解决方案)

本文详细介绍了在CentOS 7操作系统上安装与配置Synopsys Design Compiler(DC)综合工具的完整流程。内容涵盖从系统环境准备、软件安装、许可证配置到实战综合的全过程,并针对DC综合工具在安装和运行中常见的报错问题提供了具体的解决方案,帮助数字IC设计初学者快速搭建稳定的EDA学习环境。

weixin_29159441的博客 257

LINGO学习笔记02

极力推荐观看教程作者视频,不止包含知识点,同时包含随堂练习帮助你巩固知识。我自己记的笔记肯定没有视频教程讲的仔细。链接 稠密集合与稀疏集合 稠密集合与稀疏集合都是派生集合 稠密集合:如果一个派生集合在定义时省略了元素列表,那么意味着它的元素是全部父集元素的所有组合构成,这样的集合称为稠密集合。(上一篇中使用的都是稠密集合) 稀疏集合:如果派生集合的元素只是稠密集合的一部分(子集),那么这样的派生集合就被称为稀疏集合。 稀疏集合的定义方法 直接罗列法 FACTORY/A`..`3/; SHOP/B1..B4/

Temmie1024的博客 3116

人大金仓数据库Kingbase FlySync同步程序安装

Kingbase FlySync同步程序(以下简称 KFS)是面向异地容灾、数据集中共享的场景推出的具备在异构数据平台间实现实时、增量数据同步的工具类产品,主要采用了物理日志解析技术,帮助用户解决不同数据平台的数据间可实现任意方向实时移动流转的问题,并保证此过程中数据不丢失,状态可监控,流转数据量可统计。KFS 需要安装的主要组件有 2 个,分别是后端同步程序和管理控制平台,另外KFS的部署方式也有2种,为分离部署何集中部署•集中部署:KFS与数据库部署在同一机器上。

weixin_44312518的博客 1178

SparseArray、ArrayMap和HashMap

在Android开发时,我们使用的大部分都是Java的api,比如HashMap这个api,使用率非常高,但是对于Android这种对内存非常敏感的移动平台,很多时候使用一些java的api并不能达到更好的性能,相反反而更消耗内存,所以针对Android这种移动平台,也推出了更符合自己的api,比如SparseArray、ArrayMap用来代替HashMap在有些情况下能带来更好的性能提升。 S...

Android百晓生的博客 526

C++面试八股文

和静态多态(又称编译期多态,即在系统编译期间就可以确定程序将要执行哪个函数),其中动态多态是通过虚函数实现的,虚函数是类的成员函数,存在存储虚函数指针的表叫做虚函数表,虚函数表是一个存储类成员虚函数的指针,每个指针都指向调用它的地方,当子类调用虚函数时,就会去虚表里面找自己对应的函数指针,从而实现“谁调用、实现谁”从而实现多态。而C++符号表中的符号不是以函数名命名的,称为函数名修饰规则,虽然函数名相同,但是函数参数等其他属性不同,取的符号也不同,所以不会产生查询歧义的问题,使得函数可以重载。

qq_46676829的博客 904

爬虫进阶必备:深入理解requests.Session(),提升爬虫效率与稳定性

前两天,有个朋友跟我吐槽,说自己写了个爬虫爬取某个电商网站的商品信息,刚开始跑得好好的,爬了大概几百页之后,突然就开始报错了。HTTP状态码一会儿429,一会儿403,最离谱的是有些页面明明登录了却显示未登录状态。他排查了半天也没找到原因,最后把代码发给我看。 我扫了一眼代码,发现一个典型问题:他每次请求都新建一个requests.Session(),甚至有些请求直接用了requests.get()。这就好比每次进超市都要重新注册会员,每次都重新跟服务器“握手”,不翻车才怪。 其实,这就是我们今天要聊的

2201_76125261的博客 1227

新星计划Day4【数据结构与算法】 稀疏数组与队列

新星计划Day4【数据结构与算法】 稀疏数组与队列 👩‍💻博客主页:京与旧铺的博客主页 ✨欢迎关注🖱点赞🎀收藏⭐留言✒ 🔮本文由京与旧铺原创,csdn首发! 😘系列专栏:java学习 💻首发时间:🎞2022年4月28日🎠 🎨你做三四月的事,八九月就会有答案,一起加油吧 🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦 🎧最后的话,作者是一个新人,在很多方面还做的不好,欢迎大佬指正,一起学习哦,冲冲冲 🛒导航小助手🎪 文章目录新星计划Day4【数据结构与算法】 稀疏数组与队列在这里插入图片描述🛒导

qq_46272491的博客 2293

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java数据结构和算法 day01 稀疏数组与队列

文章目录第一章 数据结构和算法概述几个经典的算法面试题数据结构和算法的重要性数据结构与算法框架数据结构和算法的关系(了解!!!)编程中实际遇到的几个问题(了解)线性结构和非线性结构第二章 稀疏数组与队列稀疏数组的应用场景稀疏数组转换的思路分析及实现队列的应用场景和介绍数组模拟队列的思路分析及实现数组模拟环形队列思路分析及实现Leetcode每日一练[1. 两数之和](https://leetcode-cn.com/problems/two-sum/)[5. 最长回文子串](https://leetcode-

杨丙寅 6808

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数据结构与算法(一)稀疏数组和队列

title: 数据结构与算法(一)稀疏数组和队列 date: 2021-11-26 21:08:27 tags: 数据结构与算法 1、数据结构与算法的关系 (1)数据(data)结构(structure)是一门研究组织数据方式的学科,有了编程语言也就有了数据结构,学好数据结构可以编写出更加漂亮的、更加有效率的代码 (2)要学好数据结构就要多考虑如何将生活中遇到的问题,用程序去实现解决 (3)程序 = 数据结构 + 算法 (4)数据结构是算法的基础 2、线性结构 (1)线性结构作为最常用的数据结构,其特点是.

weixin_46161565的博客 933

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

稀疏数组是一种优化策略,它利用了数组中大量重复或无效信息的特点,通过只存储有意义的数据,大大降低了存储成本并提高了处理效率,特别适用于具有大规模但低密度数据存储和计算的场景。将二维数组转换回稀疏数组时, 首先,需要对原始的二维数组进行逐行逐列遍历,统计其中非零元素的数量。根据统计出的有效(非零)数据个数count,创建一个新的三维数组作为稀疏数组,其大小通常是。之所以是count + 1是因为稀疏数组的第一行通常用来记录原二维数组的行数、列数以及有效元素总数。

m0_62988332的博客 1458

Java数据结构与算法_01 稀疏数组和队列

Java数据结构与算法_01稀疏数组应用实例代码实现队列 本人是个新手,写下博客用于自我复习、自我总结。 如有错误之处,请各位大佬指出。 学习资料来源于:尚硅谷 数据结构包括:线性结构和非线性结构。 线性结构: 1)线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。 2)线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构,顺序存储的线性表称为顺序表,顺序表中的存储...

一个努力学习的程序猿 480

JAVA数据结构与算法之稀疏数组

数据结构之稀疏数据的定义以及java语言描述

weixin_43905191的博客 1027

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

小总结:将二维数组转换为稀疏数组的:首先遍历二维数组,统计非零元素的个数。接着再次遍历二维数组,将非零元素的行、列、值信息保存到稀疏数组中。然后根据稀疏数组的后几行数据,将对应的值赋给二维数组。稀疏数组是一种特殊的数组数据结构,用于表示大部分元素值为默认值或者为零的数组。它通过只存储非默认值或非零元素的索引和对应的值,来减少内存占用。当数组中的元素值发生变化时,可以根据需要添加或删除相应的索引和值,以保持数组的稀疏性。:稀疏数组使用索引来映射元素值,使得对数组的访问更加高效。将稀疏数组转换为二维数组。

Benmao的博客 1289

Java数据结构与算法--将稀疏数组保存到硬盘,并恢复

package src; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class SparseArray02 { public static void main(String[] args) { // 稀疏数组代码实现 // 一、创建原始二维数组 int[][] begin =

鹿鸣的博客 319

数据结构与算法学习之稀疏数组

稀疏数组1、定义2、压缩办法3、压缩代码实现4、持久化效果5、稀疏数组还原 最近一段时间一直在弄个小项目,但是学习过程中发现数据结构与算法这块简直是残废,于是变写项目边补一补,慢慢记录记录。 1、定义 稀疏数组是对特定二维数组的一个压缩;这个二维数组是一个包含较少特定有效数值的二维数组,如下图: 从图中我们可以看到,这个二维数组的有效数值只有两个;但是我们对这个二维数组进行持久化时,也会将这些0...

a760352276的博客 418

JAVA数据结构与算法【稀疏数组】

先看一个实际的需求: 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方法是: 记录数组一共有几行几列,有多少个不同的值 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模 举例说明: 我们清晰的看出,数组由6*7,改用稀疏数组后为3*8 应用实例 使用稀疏数组,来保留类似前面的二...

乔治大哥的博客 671

【数据结构与算法 1】稀疏数组

一、稀疏数组 1、概念 当一个数组中部分元素是0,或者为同一个值的数组,可以使用稀疏数组来保存该数据。 稀疏数组的处理方法: 记录数组一共有几行几列,有多少个不同的值; 把具有不同值的元素的行列和值记录在一个小规模的数组中,从而缩小程序的规模。 2、存储 原数组中存在大量的无效数据,占据了大量的存储空间,真正有用的数据却少之又少; 压缩存储可以节省存储空间以避免资源的不必要的浪费,在数据序列化到磁盘时,压缩存储可以提高IO效率。 二、代码实例 package com.atguigu.s

学Java,找哪吒 8886

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

【代码】数据结构与算法_稀疏数组。

qq_47410940的博客 94

Java数据结构与算法之稀疏数组

1、稀疏数组定义 稀疏数组(sparse array)是一种只为数组中的非零元素分配内存的特殊类型数组,内存中存储了数组中非零元素的下标和值。 2、稀疏数组与二维数组 普通二维数组 二维数组转稀疏数组后 稀疏数组图解 将二维数组转称稀疏数组之后,在稀疏数组中存储的是二维数组中所有非0(不一定是非0,在实际应用中,可能是数组中大量存在的并且分布没有规律的元素)元素的下标和值。 ...

CodeJR 376

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

线性结构和非线性结构。线性结构线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中存储的元素是连续的(地址)。链式存储的线性表称为链表。链表中的存储元素不一定是连续的(地址),元素节点中存放数据元素以及相邻元素的地址信息。线性结构常见的有:数组,队列,链表和栈。非线性结构非线性结构包括:二维数组,多维数组,广义表,数结构,图结构等。

my_air的博客 493
上一篇: 数据结构与算法—链表之单链表
下一篇: Java-流和IO
liwangC
博客等级 码龄11年 38粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值