Java数据结构和算法-稀疏数组的实现

Sparse array
以棋盘为例:
思路:
将棋盘看成一个二维数组,可以用二维数组对其进行相应的存储,在这个棋盘中有黑棋和红棋,没有棋子的是空白,黑棋用1进行表示,红棋用2进行表示,空白就用0 进行表示。 如果单纯的将棋盘进行存储,有很多空白的空格,导致存储空间利用的不够充分。如下图:
在这里插入图片描述这是一个11*11的表格作为棋盘,空间中有效数字的各数是有限的,但是大多数是没有用到的,都是以0来表示的,这样空间中重复的数值很多,我们可以用数组将相同的数据记录下来,放在数组里面,减少空间的浪费,记录一共有几行几列。

上图中一共有两个有效数字,分别所在的位置按二维数组的编号分别是(1,2)和(2,3)其余的部分都是0
可以这样来创建数组
在这里插入图片描述上图中一共有11行11列,有效数字是2,第二行1在(1,2)棋盘上的位置,有效数据是1;第三行2是在(2,3)棋盘上的位置。有效数据是2如何得到这个二维数组呢

二维数组转稀疏数组思路:
1遍历原始的二维数组得到有效的数据的个数sum,
2根据sum就可以建立稀疏数组sparse int [sum+1][3]
3将二维数组的有效数据存入到二维数组中

稀疏数组转成原始数组的思路
1读取稀疏数组的第一行,根据第一行的数据还原原始的二维数组
2.后几行读取后再将其赋值给原始二维数组中相应的位置。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
稀疏数组记录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值