非线性数据结构-稀疏数组

UE5 AI寻路全攻略:从Nav Mesh基础到动态障碍与多模式导航 在游戏开发中,AI寻路是赋予非玩家角色自主移动能力的关键技术。其核心原理是通过预计算或实时生成一个表示可行走区域的导航网格,AI路径查找算法(如A*)在此网格上规划最优路径。这项技术的价值在于,它能极大提升游戏世界的真实感和交互性,使NPC能够智能地绕开障碍、穿越复杂地形,广泛应用于开放世界、RPG、策略游戏等多种场景。本文聚焦于虚幻引擎5的寻路系统,深入探讨其寻路网格体配置。针对动态环境挑战,文章详细介绍了如何利用寻路修饰体积和动态障碍物组件实现导航网格的实时更新;同时,针对游泳、飞行等特殊移动需求,解析 阅读详情

线性结构:
数组、链表、队列、栈
非线性结构:
二维数组、稀疏数组、广义表、树、图

稀疏数组

数组中大多数元素为0时考虑使用
原理:记录几行几列,有多少个不为0的值
应用:保存棋盘、地图
压缩<->恢复
在这里插入图片描述
代码实现:

public class Demo {
    private static final String DIR = "D://sparseArr.data";

    public static void main(String[] args) {
        // 定义原始数组
        int[][] chessArrOrg = new int[11][11];
        chessArrOrg[1][2] = 1;
        chessArrOrg[2][3] = 2;
        chessArrOrg[4][4] = 2;
        System.out.println("定义的原始数组:");
        for (int[] row : chessArrOrg) {
            for (int data : row) {
                System.out.printf("%d\t", data);
            }
            System.out.println();
        }

        // 压缩为稀疏数组
        int rowLen = chessArrOrg.length;
        int colLen = chessArrOrg[0].length;
        int sum = 0;
        for (int[] row : chessArrOrg) {
            for (int data : row) {
                if (data != 0) {
                    sum++;
                }
            }
        }
        int[][] sparseArr = new int[sum+1][3];
        sparseArr[0][0] =  rowLen;
        sparseArr[0][1] =  colLen;
        sparseArr[0][2] =  sum;
        int rowIndex = 0;
        for (int i = 0; i < rowLen; i++) {
            for (int j = 0; j < colLen; j++) {
                if (chessArrOrg[i][j] != 0) {
                    rowIndex++;
                    sparseArr[rowIndex][0] = i;
                    sparseArr[rowIndex][1] = j;
                    sparseArr[rowIndex][2] = chessArrOrg[i][j];
                }
            }
        }
        System.out.println("压缩后的稀疏数组:");
        for (int[] row : sparseArr) {
            for (int data : row) {
                System.out.printf("%d\t", data);
            }
            System.out.println();
        }

        // 存盘
        System.out.println("将压缩后的稀疏数组存入磁盘...");
        try {
            FileWriter fileWriter = new FileWriter(DIR);
            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
            for (int[] row : sparseArr) {
                StringBuilder sb = new StringBuilder();
                for (int data : row) {
                    sb.append(data).append(" ");
                }
                bufferedWriter.write(sb.toString());
                bufferedWriter.newLine();
            }
            bufferedWriter.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

        // 从磁盘中读取
        System.out.println("从磁盘中读取...");
        List<Integer> list = new ArrayList<>();
        try {
            FileReader fileReader = new FileReader(DIR);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            String content = null;

            while ((content = bufferedReader.readLine()) != null) {
                String[] strNums = content.split(" ");
                for (int i = 0; i < strNums.length; i++) {
                    list.add(Integer.parseInt(strNums[i]));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 恢复为稀疏数组
        System.out.println("恢复为稀疏数组...");
        int sparseArrRow = list.get(2) + 1;
        int[][] sparseArr2 = new int[sparseArrRow][3];
        rowIndex = 0;
        for (int i = 0; i < list.size(); i=i+3) {
            sparseArr2[rowIndex][0] = list.get(i);
            sparseArr2[rowIndex][1] = list.get(i+1);
            sparseArr2[rowIndex][2] = list.get(i+2);
            rowIndex++;
        }
        System.out.println("恢复后的稀疏数组...");
        for (int[] row : sparseArr2) {
            for (int data : row) {
                System.out.printf("%d\t", data);
            }
            System.out.println();
        }

        // 恢复为原始数组
        System.out.println("稀疏数组还原为原始数组...");
        int[][] chessArr2 = new int[ sparseArr2[0][0] ][ sparseArr2[0][1] ];
        for (int i = 1; i < sparseArr2.length; i++) {
            chessArr2[ sparseArr2[i][0] ][sparseArr2[i][1]] = sparseArr2[i][2];
        }
        System.out.println("恢复后的原始数组...");
        for (int[] row : chessArr2) {
            for (int data : row) {
                System.out.printf("%d\t", data);
            }
            System.out.println();
        }
    }
}
定义的原始数组:
0	0	0	0	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	2	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	2	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
压缩后的稀疏数组:
11	11	3	
1	2	1	
2	3	2	
4	4	2	
将压缩后的稀疏数组存入磁盘...
从磁盘中读取...
恢复为稀疏数组...
恢复后的稀疏数组...
11	11	3	
1	2	1	
2	3	2	
4	4	2	
稀疏数组还原为原始数组...
恢复后的原始数组...
0	0	0	0	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	2	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	2	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	

Process finished with exit code 0

jenkins连接外部k8s集群 k8s连接集群外Jenkins 阅读详情

相关推荐

SAR成像系列:【3】合成孔径雷达(SAR)的二维回波信号与简单距离多普勒(RD)算法 (附matlab代码)

二维回波信号分析

zr2006_7的专栏 2万+

Java实现稀疏数组-数据结构( 线性结构和非线性结构)

把具有不同值的元素的行列即值记录在一个小规模的数组中,非线性结构则是指数据元素之间存在一对多或多对一。另一部分是用于存储这些非零元素所在位置的索引。稀疏数组是一种在计算机科学中使用的数据结构,中存放数据元素以及相邻元素的地址信息。其中索引数组用于存储非零元素的位置,将二维数组的有效数据存入到稀疏数组中。线性结构拥有两种不同的存储结构,顺序存储的线性表称为顺序表,中的存储元素不一定是连续的,一部分是用于存储非零元素的数。链式存储的线性表称为链表,线性结构是—种数据结构,是数据元素之间存在—对—

qq_64948664的博客 163

[3D检测系列-PV-RCNN] PV-RCNN实战指南:从论文解析到代码调试全流程

本文提供了PV-RCNN在3D目标检测领域的实战全流程指南。文章深入解析了其Point-Voxel融合的核心思想,并详细演示了从环境搭建、数据准备、代码复现到模型训练与调试的具体步骤,特别针对常见的报错问题给出了解决方案,帮助开发者高效掌握这一经典算法。

weixin_29189381的博客 480

数据结构(一)线性链表、非线性链表、稀疏数组与队列、单向链表

数据结构和算法的关系 ➢数据data结 构(structure)是一门研究组织数据方式的学科,有了编程语言也就有了 数据结构.学好数据结构可以编写出更加漂亮更加有效率的代码。 ➢要学习好数据结构就要多多考虑如何将生活中遇到的问题,用程序去实现解决. ➢程序=数据结构+算法 ➢数据结构是算法的基础,换言之,想要学好算法,需要把数据结构学到位。 线性链表和非线性链表 数据结构包括:线性结构和非线性结构。 线性结构 1)线性结构作为最常用的数据结构,其特点是数据元素之间存在- -对- - 的线性关系(a[0]=3

codinglover5的博客 3675

无需Root!安卓模拟器+BurpSuite轻松搞定微信小程序抓包

本文详细介绍了如何在不root安卓设备的情况下,使用安卓模拟器和BurpSuite实现微信小程序抓包。通过夜神模拟器降级安卓版本、配置BurpSuite代理及安装证书等步骤,开发者可以轻松绕过微信的证书绑定,高效抓取小程序数据包。文章还提供了常见问题排查和高阶技巧,帮助开发者提升抓包效率。

weixin_29213655的博客 365

M2DGR数据集在主流SLAM框架中的实战配置指南:从ORB-SLAM到FAST-LIO的完整流程

本文提供了M2DGR多传感器数据集在主流SLAM框架中的实战配置指南。详细介绍了从ORB-SLAM、VINS-Mono等视觉/视觉惯性框架,到A-LOAM、FAST-LIO等激光/激光惯性框架的完整配置流程、参数调整要点及常见问题解决方案。通过实际测试对比,分析了各算法在M2DGR数据集上的表现,为机器人定位与建图研究提供了宝贵的实战经验。

k9l0m1的博客 481

Java实现稀疏数组

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

baolingye的博客 5683

V.PhyloMaker实战:从物种列表到维管束植物系统发育树的完整流程

本文详细介绍了使用V.PhyloMaker工具包,从物种列表快速构建维管束植物系统发育树的完整实战流程。内容涵盖R包安装、物种名标准化、核心函数phylo.maker的三种构建方案选择、结果树的可视化与导出,以及与picante包的联动分析,为生态学和生物地理学研究提供了高效解决方案。

weixin_29057237的博客 378

java数据结构与算法(线性,非线性结构,稀疏数组,队列,链表)

1. 线性结构 2. 非线性结构 3. 稀疏sparsearray数组 4. 队列 5. 环形队列 6. 链表Linked List 7. 双向链表

qq_48627750的博客 549

SAP SD科目确定:从配置到凭证的财务集成核心

本文深入解析SAP SD科目确定的核心价值与配置实践,涵盖从主数据准备到财务凭证生成的全流程。通过六步配置法和KOFI00过程拆解,帮助企业实现销售与财务模块的高效集成,确保收入、成本等数据准确归集至对应会计科目,提升财务自动化水平与数据准确性。

weixin_33491377的博客 251

基于Kubernetes的ML平台架构设计

本文在Kubernetes开源组件的基础上,对ML平台各部分组件的作用进行了介绍,并且进行了组件选型,初步设计了ML平台的技术架构。

2401_83124266的博客 2052

数据结构与算法 之 稀疏数组(线性结构和非线性结构)

目录 线性结构 非线性结构 稀疏数组和队列 先看一个实例需求 稀疏数组 基本介绍 案例 稀疏数组转化的思路分析 二维数组转稀疏数组的思路 稀疏数组转原始二维数组的思路 ==稀疏数组要进行存盘== 文件进行存盘 代码展示 运行截图 出现了数组下标越界的现象 线性结构 1)线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 2)线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中存储的元素是连续的。 3)链式

m0_60237095的博客 999

第21章 分层架构软件测试

技术人员和客户代表对代码服务相关的技术进行详细的交流,由此确定代码审计的方案(哪些代码要审计、用什么方式审计、审计的时间、审计的要求等)代码审计报告提交和沟通之后,跟开发人员针对代码审查发现的问题进行修改,然后代码审查人员进行回归的检查,然后提交复查的报告;本层不需要了解其它层的实现细节,只需要考虑与本层相关的两层之间的接口和调用的情况。然后对客户要求的功能点进行人工的代码审查,对源代码的扫描结果进行人工的分析和确认;结合自动化扫描的结果和人工审查的结果生成测试对象的代码审查报告,最后提交给客户;

李黏黏的博客 3272

数据结构之二维数组到稀疏数组,保存到磁盘,从磁盘中读取

JAVA数据结构二维数组=》稀疏数组,保存到磁盘,从磁盘中读取为稀疏数组=》二维数组

qq_44847284的博客 600

SAP B1中文培訓教材_SDK

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

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数据结构与算法—线性与非线性结构、稀疏矩阵和队列

尚硅谷韩老师数据结构与算法:线性与非线性结构、稀疏矩阵和队列

weixin_49429082的博客 569

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

线性数据结构和非线性数据结构(java版)

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

xiaoxiao66668的博客 1293

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Java数据结构之稀疏数组

元素之间存在严格顺序关系,每个元素都与唯一的一个元素相邻,一个元素的前一个元素就是它的前驱元素,后一个元素就是它的后继元素。玩五子棋游戏,会有一个存档的功能,如果将盘上的所有的点都存下来会影响性能,这个时候可以通过稀疏数组来压缩棋盘来存储对应的位置,精确记录非默认值元素的信息,以节省存储空间和处理效率。这些线性结构在计算机科学和编程中都有广泛的应用,每种结构都适用于不同的问题和场景,根据需求选择合适的数据结构可以提高算法的效率和代码的可读性。多维数组可以被视为非线性结构,因为元素之间的关系不仅仅是线性的。

qq_41857955的博客 1541

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

数据结构和算法 一、线性结构和非线性结构 数据结构包括:线性结构和非线性结构 1、线性结构 (1)线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 (2)线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构(链表),顺序存储的线 性表称为顺序表,顺序表中的存储元素是连续(指地址连续)的链式存储的线性表称为链表,链表中的 存储 (3)元素不一定是连续的,元素节点中...

one111a的博客 260

【尚硅谷】数据结构和算法——稀疏数组

跟着B站的尚硅谷学习数据结构与算法,语言为java,目前是第一个代码内容——稀疏数组尚硅谷——稀疏数组提示:以下是本篇文章正文内容,下面案例可供参考当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法:1)记录数组一共有多少行,有多少个不同的值2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。

weixin_54533016的博客 606

数据结构和算法一:稀疏数组

文章目录1.数据结构分类2.稀疏数组2.1代码实现 1.数据结构分类 数据结构包括:线性结构和非线性结构 线性结构 线性结构是最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中的存储元素时连续的 链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息 线性结构常见的有:数组、队列、链表和栈 非线性结构 非线性结构包括:二维数组,多维数组,广义表,

生活不止眼前的苟且 252

Java-数据结构与算法分析(1)——稀疏数组与二维数组的转换

一、 数据结构和算法内容介绍 字符串匹配问题:KMP算法(部分匹配表) 汉诺塔游戏:分治算法 八皇后问题:回溯算法 马踏棋盘算法:图深度优化遍历算法(DFS)+贪心算法优化 二、 数据结构与算法概述 数据结构和算法的关系:数据结构是算法的基础;程序=数据结构+算法 数据结构:线性结构和非线性结构 线性结构:元素之间一对一的线性关系;顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序...

sinat_41395911的博客 390

数据结构-稀疏数组

概述 解决问题方法的效率,与数据的组织方式有关 解决问题方法的效率,跟空间的利用效率有关 程序 = 数据结构 + 算法 线性结构和非线性结构 线性结构 1.数据元素是一对一的 2.有两种不同的存储结构:顺序存储结构(数组)和链式存储结构(链表) 顺序存储的线性表称为:顺序表,顺序表中的存储元素是连续的 链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息 3.常见的线性结构有:数组、队列、链表和栈 非线性结构 二维数组、多维数组、广义表、树

Ther233的博客 1325

Java数据结构与算法——01 数据结构概述与稀疏数组实现

数据结构概述 数据结构包括线性结构与非线性结构。 线性结构的两种不同的存储结构:顺序存储结构(数组)和链式存储结构(链表)。 顺序存储的线性表为顺序表,即存储地址连续。 链式存储的线性表成为链表,存储地址不一定连续,元素节点中存放该节点数据以及相邻的节点存储地址。 线性结构常见的有:数组、链表、队列、栈 非线性结构:二维数组、多维数组、广义表、树结构、图结构 稀疏数组 如果一个原有数组中大部分是相...

GM. 202

数据结构概述和稀疏数组

数据结构和算法概述,稀疏数组和原始数组相互转换。

Zero摄氏度的博客 708

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

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

weixin_46161565的博客 933

java数据结构之线性结构和非线性结构

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

不一样的花朵的博客 9804
上一篇: 04.SpringBoot整合Redis
下一篇: 线性数据结构-环形队列
SideBySun
博客等级 码龄8年 45粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值