你真的懂稀疏数组吗?进来看!
稀疏数组
当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方式是:记录数组一共有几行几列,有多少个不同值把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模。从字面上我们也可以得知,它仍然是一个数组,他的作用就是将一个对应的数组数据进行优化。
1.背景
需求:编写五子棋游戏中,有存盘退出和继续上一盘的功能。
2.二维数组记录棋盘数据
比如,我们可以将棋盘进行抽象化,用一个 11*11 的二维数组来表示,然后用 0 表示空点,用 2 表示白子,用 1表示黑子,于是就可以抽象为如下模样。
不足之处:
整个数组我们用了11*11(共121)个点来保存数据,但其中有119个都是0。实际上我们只需要将黑白棋子的数据保存起来就可以。
把这样没有价值的数据起来,不但会浪费存储空间的大小,如果写入到磁盘中,还会增大 IO 的读写量,影响性能,这就是用普通二维数组来表示棋盘数据的不足之处。
3.稀疏数组记录棋盘数据
当我们使用稀疏数组时,就变成了以下的样子,第0行代表这是一个11行11列且有2个有效值的数组,第1行代表着第一个有效值的位置在第1行第2列和该值的大小为1。(这是事先约定好的)
从这个二维数组你可以看出我们只使用了一个3*3的数组就存储了之前11 * 11的数组存储的数据,这存储效率大大的。
4.二维数组转稀疏数组
下面是详细的代码实现
1 | import java.util.Arrays; |
本文采用CC-BY-SA-3.0协议,转载请注明出处
作者: Lee
作者: Lee