数组我们都应该知道是怎么回事,但是稀疏数组可能有些小伙伴就不清楚了,那么他到底是干啥得呢?
举个栗子
五子棋大家都玩过,这个游戏大致是这样的。
是一种两人对弈的纯策略型棋类游戏,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成5子连线者获胜。
我们可以用数组来抽象模拟五子棋。大致是这样的:
我们直接把棋盘抽象成一个15*15得二维数组,1代表黑棋,2代表白棋。
1 | 2 | 2 | ||||||||||||
1 | ||||||||||||||
这样做其实是没有大的问题的,但是我们玩这个游戏得时候通常会有保存当前游戏得功能,这个时候用二维数组来存储就有点浪费空间了(此时我们的空间是15*15=225),因为对于这个二维数组来说大多数得空间都是空的,无意义的。所以我们需要优化。
如果我们用稀疏数组呢。。。。
稀疏数组顾名思义也还是个数组,所以它有固定的三列 行 列 值
但是它的行数是不固定的,是由当前需要保存的数据的个数num决定的(以上面的例子来说,两个1两个2,所以是2个黑棋2个白棋,那么需要保存到数据其实就是4个),我们的行数需要num+1;那么上面的二维数组写成稀疏数组是啥样子呢?大致是这样的:
行 | 列 | 值 |
15 | 15 | 4 |
2 | 4 | 1 |
2 | 5 | 2 |
2 | 6 | 2 |
3 | 5 | 1 |
这个稀疏数组的第一行,也是是15 15 4 这行交代的是我们二维数组的规模,两个15分别是二维数组的行和列的数量,4代表二维数组中有值的个数。
那么这个稀疏数组所占用的空间是3(列)*5(行)=15,远远小于225.