随机子空间与稀疏结合代码_数据结构-你是否也听过稀疏数组?

简述

数组是我们最常用也是最基础一种数据结构之一,它是一种有序的元素序列。常见的数组有一维数组,二维数组...N维数组。而今天的主角是数组中不常见的——稀疏数组

稀疏数组基本理解

稀疏数组主要是为了节省存储空间、避免内存浪费而设计的,比如:声明一个int类型12*12的二维数组,并随机赋值如下图:

3a25a5c9a8806c18bded0fe15213f73c.png

标红部分就是随机赋值。但是我们能看到整个矩阵结构中有大量的0,意味着这些坐标都没有数据。当我们要对这份数组进行存储或者备份时,就会存储大量无用的数据,造成资源浪费。而事实上有用的数据只有三个。于是我们引了稀疏数组。下图是一个二维数组转成稀疏数组的示意图:

282a066a62ad398e2929691fc0c023ae.png

看到这里相信很多人还是有点蒙圈,但是唯一可以确定的是,整个数据量是不是变小了。接下来才是重点~~~~

转换逻辑

  1. 稀疏数组的第一行的值是固定,用来记录原二维数组的基本大小以及一共有多少个值。比如上图中的 12 12 3 表示的是记录了原二维数组是一个12行12列且一共有3个值的数组。
  2. 从第二行开始,我们要记录每个值所在的位置。比如 1 2 2 表示的是在原二维数组中的第二行第三列有个值为2的数据(数组下标从0开始,所以1标识第二行,列也一样)
  3. 稀疏数组转成二维数组的方式也很简单:先读取稀疏数组的第一行,得到二维数组的大小。然后逐行读取到对应的值以及值的坐标,按坐标赋值即可
  4. 就是这么简单~!

使用场景

二维数组与稀疏数组的结合使用,最经典的场景就是:围棋和五子棋。多用于悔棋、保存棋局等场景。总的来说,就是需要精简存储的使用场景

核心代码

29d38baaa18586ea9ac0bc70b07e643a.png

稀疏数组转二维数组

b92f3b23fd7eaeb48d3a0e4308d512f6.png

感谢您的收看与支持~

感谢这么优秀的你还愿意为我点赞~

感谢这么优秀的你还愿意帮我转发~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值