稀疏数组

数组我们都应该知道是怎么回事,但是稀疏数组可能有些小伙伴就不清楚了,那么他到底是干啥得呢?

 

举个栗子

五子棋大家都玩过,这个游戏大致是这样的。

是一种两人对弈的纯策略型棋类游戏,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成5子连线者获胜。

我们可以用数组来抽象模拟五子棋。大致是这样的:

我们直接把棋盘抽象成一个15*15得二维数组,1代表黑棋,2代表白棋。

               
               
    122        
     1         
               
               
               
               
               
               
               
               
               
               
               

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

这样做其实是没有大的问题的,但是我们玩这个游戏得时候通常会有保存当前游戏得功能,这个时候用二维数组来存储就有点浪费空间了(此时我们的空间是15*15=225),因为对于这个二维数组来说大多数得空间都是空的,无意义的。所以我们需要优化。

如果我们用稀疏数组呢。。。。

稀疏数组顾名思义也还是个数组,所以它有固定的三列   行   列   值

但是它的行数是不固定的,是由当前需要保存的数据的个数num决定的(以上面的例子来说,两个1两个2,所以是2个黑棋2个白棋,那么需要保存到数据其实就是4个),我们的行数需要num+1;那么上面的二维数组写成稀疏数组是啥样子呢?大致是这样的:

15154
241
252
262
351

这个稀疏数组的第一行,也是是15 15 4 这行交代的是我们二维数组的规模,两个15分别是二维数组的行和列的数量,4代表二维数组中有值的个数。

那么这个稀疏数组所占用的空间是3(列)*5(行)=15,远远小于225.

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值