数据结构与算法(Java版) | 稀疏数组的应用场景

2023-05-16

接下来,我们就要正式进入第三章——稀疏数组和队列的学习中了,顾名思义,在这一章节我会为大家介绍两种数据结构,即稀疏数组和队列。当然,按照我们这套系列教程的安排,首先我会为大家讲解稀疏数组,稀疏数组讲解完毕才会给大家讲解队列。

还记得之前我给大家介绍我们这套系列教程时,讲过的我们这套系列教程所采用的一个授课方式嘛?不记得的,我这里再赘述一遍吧!我们这套系列教程采用的是如下这样一个授课方式,即:

先说一下要讲的数据结构或者算法的应用场景,然后引出该数据结构或者算法,接着剖析原理,紧接着分析实现步骤,当然,在这一步骤中,少不了需要用画图的方式来向大家进行说明,也就是说我会以图文并茂的方式来讲这一步,这样大家理解起来也会容易许多,最后则就是代码实现了

于是,按照规矩,接下来我就要先给大家讲一讲稀疏数组的应用场景了。

稀疏数组的应用场景

先看一个实际的需求

这里,咱们不妨先来看一个实际的需求。

五子棋游戏,如下图所示,相信大家应该都有玩过吧!它算是一个比较经典的游戏了,我想没人没玩过吧,要是这个游戏你都没玩过,那你的童年到底是有多缺失啊!

在这里插入图片描述

如果你玩过这个游戏,那么不妨来思考一下这样一个问题,假设现在棋盘(注意,该棋盘是一个11×11的棋盘)上有两个子,如下图所示,一个黑子,一个蓝子,如果此时我们想要将该棋盘给保存起来,那么你会选择怎么做呢?

在这里插入图片描述

我想,大家脑海中能想到的最简单的一个思路就是将以上棋盘用一个二维数组给保存起来吧!如下图所示,可以看到该二维数组一共有11行11列,其中第2行第3列保存的是数据1,第3行第4列保存的是数据2,很显然,1代表的是黑子,而2代表的则是蓝子。

在这里插入图片描述

虽然将以上棋盘转成二维数组(即使用二维数组来记录棋盘)对于我们来说没有任何难度,非常简单,但是你有没有想过这样一个问题呢,就是以上二维数组里面保存的很多值竟都是默认值0,而如果要是这样的话,那不就是记录了很多没有意义的数据吗?于是,我就要问大家了,此时我们应该如何去解决这个问题呢?很简单,使用稀疏数组即可解决,说得具体点,就是使用稀疏数组来对以上二维数组进行一个压缩。

那么,问题又来了,稀疏数组是什么呢?我想,你一定很想急于知道吧,不是有那么一句话嘛,人这一生,要么忙着去活,要么忙着去死,听过这句话吧,言归正传,接下来我还是来给大家简单介绍一下稀疏数组吧!

稀疏数组的基本介绍

关于稀疏数组,大家首先需要知道的一点是,当一个数组中大部分元素为0,或者为同一个值时,我们就可以使用稀疏数组来保存该数组了

其次,大家还需要知道的便是稀疏数组的处理方法了,即:

  1. 记录数组一共有几行几列,有多少个不同的值。

    说白了,就是稀疏数组的第一行会记录原先二维数组的行数、列数以及一共有多少个不同的值。关于这一点,大家现在不理解也没关系,因为马上你就会知道稀疏数组长啥样了,知道稀疏数组长啥样之后,你自然便能理解这一点了。

  2. 把具有不同值的元素的行、列及值记录在一个小规模的数组中,从而缩小程序的规模。而这个所谓的小规模的数组,就是我们所说的稀疏数组。

那么,稀疏数组到底长啥样呢?这里,我们不妨先看一个图,如下所示,可以看到这是一个原始的二维数组,一共有6行7列,试想一下,如果我们就原封不动地保存这个原始的二维数组,那么是不是一共就得保存42个数据啊!

在这里插入图片描述

可要是使用稀疏数组来保存的话,那就变成下面这个样子了。

在这里插入图片描述

可以看到,稀疏数组的第一行记录的是原始二维数组共有几行几列以及多少个不同的值,其中,第1行第1列记录的是原始二维数组的行数,第1行第2列记录的是原始二维数组的列数,第1行第3列记录的是原始二维数组一共有多少个不同的值,注意,这些不同的值可都是非0的哟!

搞清楚稀疏数组的第一行记录的是什么之后,接下来我们就要搞清楚它下面的每一行记录的又是什么了。其实,你只要知道了稀疏数组的处理方法,你自然就能知道稀疏数组第一行下面的每一行记录的是什么了,很简单,记录的就是每一个非0值的行、列及其具体的数据大小。

现在大家该知道使用稀疏数组的好处了吧!就是可以缩小原始二维数组的规模。你想啊,使用稀疏数组之后,原先一个6×7的二维数组就变成了一个3×9的二维数组(也即稀疏数组),原先得保存42个数据,而现在则只需要保存27个数据就行了,这可不就起到了一个缩小原始二维数组规模的效果嘛!

以上便是稀疏数组的应用场景,嘻嘻😊,终于算是给大家讲完了,快累死我了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构与算法(Java版) | 稀疏数组的应用场景 的相关文章

  • layer 弹框 cropper 裁剪上传图片,thinkphp 3 使用 CropAvatar.class.php

    最近要做一个上传裁剪图片功能 xff0c 但是网上收出来的东西 xff0c 知识点都是对的 但是就是没说清楚 xff0c 也无法连续起来用 经过自己整理出来的一套代码 xff0c 亲测可用 xff01 不用多说 xff0c 直接上菜 PS
  • 解决mysql登录出现10061的问题

    问题出现的原因 xff1a 可能是系统自动关闭了mysql服务的运行 解决方法 xff1a 任务管理器 文件 运行新任务 services msc 找到mysql 启动即可成功 任务管理器 文件 运行新任务 services msc 找到m
  • Archlinux配置邮件(以qq邮箱为例)

    Archlinux配置邮件 以qq邮箱为例 安装s nail span class token function sudo span pacman S s nail 配置SMTP发送邮件 开启IMAP SMTP服务 打开qq邮箱网页版 gt
  • 电子爱好者总结的28个电子行业技术网站

    以下是一位电子爱好者总结的28个电子行业技术网站 21IC 电子 http www 21IC COM 中国电子资源网 xff1a http www ec66 com 中国电子进修网 http www studydz com 电子设计技术网
  • S_OK,S_FALSE,E_FAIL

    今天在调试一个ICOP的操作的时候 xff0c 发现连接被动关闭的时候老是会在一处断言处失败 xff0c 跟了很久终于发现了问题 在此记录一下 xff1a 断言报错的代码如下 xff1a HRESULT CIoCPWorker UnregI
  • Win7 应用程序无法正常启动(0xc000000d)的解决方法

    自从重装了WIN7系统后 xff0c VS2010编译出来的项目程序就不能正常启动 xff0c 启动的时候总是提示 应用程序无法正常启动 xff08 0xc000000d xff09 请单击 确定 关闭应用程序 在网上查找了很多解决方案 x
  • MySQL存储过程where条件执行失败的问题

    前几天对服务器实体做了属性缓存机制 xff0c 当时测试也没有出现大的问题 xff0c 昨天有人跟我说 xff0c 登陆的时候角色等级显示错误 xff0c 我复测了一下 xff0c 发现不只是等级错误 xff0c 进入游戏后角色位置 金钱
  • 程序员与厨师

    不管你信不信 反正我是信了 每一个程序员上辈子都是呆在厨房的厨子 好吧 你不信 我来证明给你看 1 下厨前 你得知道做的是早餐还是中晚餐 中晚餐的话 怎么也得走趟超市 如遇到好友聚会 怎么着也得做出一桌对得起朋友的饭菜 还有你得分析 朋友中
  • VS2010/VS2012 设置全局头文件和库路径

    在VS2010之前 xff0c 设置项目的全局头文件和库路径是非常方便的 xff0c 直接选择菜单Tools gt Options gt Projects and Solutions gt VC 43 43 Directories xff0
  • Linux下rz/sz安装及使用方法

    新搞的云服务器用SecureCRT不支持上传和下载 xff0c 没有找到rz命令 记录一下如何安装rz sz命令的方法 一 工具说明 在SecureCRT这样的ssh登录软件里 通过在Linux界面里输入rz sz命令来上传 下载文件 对于
  • 关于mysql存储过程创建动态表名及参数处理

    转载请注明出处 xff1a 帘卷西风的专栏 http blog csdn net ljxfblog 最近游戏开始第二次内测 xff0c 开始处理操作日志 xff0c 最开始把日志放到同一个表里面 xff0c 发现一天时间 xff0c 平均1
  • 关于mysql自增id的获取和重置

    转载请注明出处 xff1a 帘卷西风的专栏 http blog csdn net ljxfblog mysql获取自增id的几种方法 使用max函数 xff1a select max id from tablename 优点 xff1a 使
  • 关于SQL中Union和Join的用法

    转载请注明出处 xff1a 帘卷西风的专栏 http blog csdn net ljxfblog 一直以来 xff0c 对于数据库SQL方面都是半吊子水平 xff0c 能写一些基本的增删改查的语句 xff0c 大部分时间都是用下Where
  • 使用Cmake生成跨平台项目编译解决方案

    项目最近有需求在windows下面运行 xff0c 我花了几周时间将linux的服务器移植到windows下面 xff0c 目前已经能够正常运行服务器 xff0c 目前又有了新需求 xff0c 两边的代码结构和组织是分开的 xff0c 因此
  • linux下shell技巧

    经常看到一些大牛操作linux的时候 xff0c 双手运指如飞 xff0c 指令如流水般输出 xff0c 会不会感到羡慕呢 xff1f 本文就整理了一些linux下shell的技巧 xff0c 保管你学会之后 xff0c shell输出ap
  • Cmake在windows支持预编译头文件(stdafx.h)

    最近一直在研究cmake构建项目 xff0c 之前接触cmake的时候就感觉不太喜欢cmake xff0c 觉得它太乱了 xff0c 产生了太多的中间文件 xff0c 产生的项目文件也不是特别友好 xff0c 在windows下 xff0c
  • win服务器设置开机自动登录

    之前设置了一个开机自动执行脚本 xff0c 发现重启服务器之后没有生效 xff0c 原因在于 xff0c 服务器重启之后 xff0c 不会自动登录用户 xff0c 因此没有执行脚本 xff1b 因此第一步先设置服务器启动之后自动登录用户 x
  • Zynq ZC702平台 QSPI + eMMC实现

    预备知识 xff1a UG821 The processor system boot is a two stage process Another boot mode supported through FSBL is eMMC boot
  • 什么是Vista?

    Vista是微软下一代操作系统 xff0c 以前叫做Longhorn xff08 微软当初内部的代号 xff09 7月22日微软对外宣布正式名称是Windows Vista 作为微软的最新操作系统 xff0c Windows Vista第一
  • Android识别模拟器,判断是模拟器还是真机

    文章目录 前言原理禁止模拟器安装apk代码识别验证最后 前言 对于android开发者来说 xff0c 模拟器是开发工具 xff0c 但是对用户来说 xff0c 可能就是薅羊毛 找漏洞的赚钱工具 不管是活动风控还是内容保护等等其他的出发点

随机推荐