00:00
它写一下好,那现在呢,我们来编写一下这个代码,来我们编写一下这个代码,走一个。好,我们就以这个为例,这是我们的第18章。第18章我先写到这儿,CHAPTER18。幺八,好,我们先写第一个案例。叫SPASPA非常简单。同学们,我们写一个object。啊不,我们一起来写哈。啊,我们这边演示一个,演示一个稀疏,稀疏数组的一个使用,首先呢,我们先把原先那个数组定下来,比如说我们原先有个地图对吧,叫C。On。这个叫做棋盘的一个地图,那么现在我先写个二维数组二。r.d of d,然后呢,这边呢,我们把这个类型写进去,就是我们存的都是int类型的多少呢?11行,11列。
01:08
好,根据它的这个理解,刚才这个理解呢,我们这个图里边有一个一和二这两个11行11列,我们也可以把它呃放进去啊,也可以放进去,这个倒无所谓,愿意放就放,那现在呢。我们先进行一个初始化,它的位置。因为我这没有没有界面,我只能自己直接这样写初始化。初始化这个地图。注意听,那初始化这个例子呢,根据刚才这个理解呢,啊,就是它的一。二这个位置存的是一个黑字。看对不对。一二对一二存的是一,一代表黑子吧,咱们假设一代表。表示黑字。黑色的黑子。然后呢,再来切实二三。
02:00
二三这个呢,给他来一个二。这个表示什么呢?A2,我们表示白纸,表示白色的纸,也可以表示白纸。非常简单,好,现在呢,我们把这个地图给打印出来,看看长的样子是不一样的啊,我们现在输出一下这个数组。输出这个原始的,原始的这个地图。这个对我来说应该很很简单,好同学们,我们把它打印出来,呃,那怎怎怎么整呢,好,我们变一下。遍历一个下map,好,同学们,当我们遍历遍历出来过后,这个item其实它仍然是一个数组,对吧,这是一个一位数组,同学们在前面已然学过了,好,我们再遍历IT2。好,假设这样子,我就简单变一下,遍历完了过后呢,我们把它打印出来,打印的时候,诶在这里边。便利呢,我们就不要换行了,我就这样打。对,就百分号D。
03:01
啊,然后呢,打一个斜杠T摆放D呢,就是IT2。整个做完了以后,我们再换一个行。好,同学们,我们先看原始的这个地图,跟我们想的一不一样,先运行一下。好,同学们看到原始地图呢,确实跟我们想的一样的,没有问题,就一二好,我们现在呢,如果要把这个地图保存起来。啊,如果把这个地图保存起来,发现有效数据就是有两个,我们很不划算,怎么办呢?诶,我们先把它做成一个压稀疏数组。啊,将这个切。Map转成。转成一个稀疏数组。系数、数组,当然同学们都知道这两个字肯定是固定的,这个咱们就多少行多少列,可以直接保存,那保存的时候怎么保存呢?你想一想同学们,根据刚才的分析,你看为什么老师要说这个分析呢?因为你这边要保存行列值,那么怎么保存比较合理呢?
04:07
对,是不是我们也并不知道将来这个有多大呀。这有两种思路,不同的语言有不同思思路有些有些代码呢,实际上是先扫描。有些代码他先扫描你有几个有效数据,然后直接开辟空间。那既然我们这儿有这个可变数组,那干脆我们这样做,我的思路这样子的啊,听一下老师的思路,就说不管你是怎么实现。你只要达到这个效果就行,数据结构没有一个固定的写法,就是你比如看你看C加加版,它是这么写的,你看C版啊,那样写的,Java又是种写法,但是殊途同归,它的效果就达到压缩。哦,不管怎么写,效果是。效果是达到达到对这个数据的压缩就可以。那现在呢,我的思路这是干脆我们简单一点,我们定一个。
05:03
这个节点,No的节点。这个漏的节点里面呢,我们认为有肉。有可能有之。大家明白我的意思了,那然后呢,我们把这个节点放在哪里呢?我们放在一个二位八分里面去。对吧,我往里面这个扔来一个,我就扔一个,来一个扔一个就完了,就我不我也不管你将来有多大,我就往里面放就可以啊,就往里面放就可以,好,这是我的一个思路,那现在呢,我们就简单了来,首先我们先创建一个漏的节点,这个漏的节点里面呢,好,我们就直接放直了啊,那首先我们来一个VL。就是int类型。对。Column,诶也来一个VR,因为到时候我们要去这个进行这个这个保存嘛,它的信息要保存起来好,然后这边呢,有一个roll column int,还有一个词。
06:04
VL,好,VL。类型。好,这个就写完了。好,写完以后呢,我们就开始来便利往里面扔东西了,首先呢,我们先创建一个buffer。A。R buffer。BF等于什么呢?我们把这个二八法创建起来。Buffer。BF,那里面这个泛型先该写好,就是类型写成no,这个大家应该能看懂对吧?好,然后呢,就往里面放东西了,那怎么样才能放呢?我便利一下。我要便利,但是这个时候便利要要拿到他的这个下标,不然的话都是恢复恢复不了,所以这个时候便利呢,要跟前面不太一样。怎么变异呢,I?零。Until。
07:00
我们便利的是原先这个这个切。宿主。好。这个地方其实就是压缩的,压缩数组呢,我们要便利这个点嫩。点认识,然后这个拿到过再便利接。好,同学们看到这个代码啊,0UNTIL,然后呢,我们变的是什么呢?好遍的都是Che里面的这个节点认识。啊,写错了ii点认识。因为你这里面呢,就是不知道将来他是呃那个下标,这个I和节就是下标吗。那我就可以保存起来,好保存起来过后呢。我们现在可以放第一个节点啊,第一个节点啊,这个节点呢,我们先这样放。首先我们判断。你等不等于零,如果你就等于零,那就说明这个数据是无效的,就是等于零,我就默认值嘛,所以说我们判断。
08:00
判断该词该词。该值是否为零?OK,那如果不为零我们才保存,如果为零就不保存了啊,如果不为零就保存。好,这个呢,对我们来说应该是比较简单的,就IF1句好的,就是我们用map。I。结如果不等于零,我就将起放进去,那首先我们构建一个。构建一个这个就是node。啊,现在我们解决的是数据的压缩的问题,同学们待会儿呢可以感受到啊,那就六一个no。又一个node,好,把字放进去吧,No。首先第一个参数是它的I,第二个是解,第三个是它的值。对,这个词呢,就是这个词。OK。好放进去,放进去过后呢,我们拿到了一个节点。
09:02
诶,这个地方是VAR no的节点,就有了,这个节点要干什么呢?要被加入到奥瑞buffer,其实这个就是稀疏入组,那么改,把它改个名字叫稀疏。PAR系数数组好,这样子更合理系数组,然后我们怎么加进去呢?End是它是一个end的一个方法是吧,我就把它加进去选漏。加进去,其实在这之前呢,应该还咱们应该还把那个它的大小先记记记录下去,加应该先放第一个节点啊,待会儿我们再加进去,也可以先把它做完,这个就是加入到加入到我们这个系数数组。其实这个地方呢来说呢,只有就两个点。啊,因为就两个点,好整个这个做完了以后,我们看看稀疏数组长什么样子,我们来输出稀疏数组。输出稀疏数组很简单,我们复一下,因为现在你这个呃吸疏组已经有了,我们来遍利一下这个稀疏数组好no的节点。
10:08
从吸收入取出来,我们看现在长什么样子啊,输出来一个呢,我们就输一下啊,比如说待会我们要输的这个效果呢,这样写就是一个格式化。英格说白名号D。啊,来一个斜杠T,再摆放D,再来一个斜杠T。再来一个白毛地。好,同学们,第一个呢,就是我这个肉里面的肉。行,第二个就是我这个肉的里面的column,第三个就是这个肉的节点里面的value。好,每打一个呢,我们就给他来一个啊这个地方。这个还不行,就直接就换成了。好,我们看看稀疏数组现在经过压缩变成什么样子了,我们数一下稀疏数组。对吧,稀疏宿主。走一个。
11:00
好,同学们,我跑一下,注意啊,这是我们第一个最简单的数组,所以大家不会有太大压力,很简单,121232对不对,但是其实呢,我们在这之前应该再把它的原始的那个行列保存起来。对吧,而且呢,按理说这个个数你也把它保留一下也是可以的,好,这个呢,我们后面再加也行,无所谓啊,待会再加,这就是一个奇数数,很简单,你看原先这么大的一个东西,诶,经过你的处理变小了。说老师那这也不对,那将来假设这个数据很多怎么办呢?那所以说这个数组呢,它是有应用场景的,就说它是在一个很大的地图,刚好你的数据量很小才能压缩,打个比方,同学们,你们都用过这个图片吧,你看这是。你你们看一个这个压缩,它是有场景的,你比如说看这是个文本,我写很多哈,你们看人家这个地方你复制很多。我。我给大家演示一下它这个压缩的一个效果啊,你看这。
12:04
你们可能没有没有玩过这个,你看啊,你看我这个地方给大家扶持。好,我整体再复制一份,你们可以看到这个压缩过后会变成多大。好保存。保存过后呢,我们先看原来的大小是多大呢,它是。啊,4242个字节,OK 424个字节,然后我把它压了。压缩。当我们压缩完了过后呢,我们再来看这个文件大小,你看22个字节。那为什么呢?其实它的效果我们一样,他发现有些单词是一样的,他就记一次。它的顺序就到你是哪个位置,那但是不是所有的使用哦。不是所有的使用,你打个比方说,老师,我们再来玩一个。我给大家。来一个图片。各位,我写一个图片,这个图片我们就用这个JPG的,大家都知道JPG图片本身就是压缩图片。
13:06
你看这个高高高呦呦呦。哎,你看这个图片是不是有这么大。诶,怎么没有属性了呢。好,你看是不是这么大一个,这么大一个,你看我压下。你看我压一下。这部。压完了,我们再来看大小。你发现其实没有变化。有没有大家看一下啊,是变了变了小一点,那一点活跃不进啊,忽略不及,你看。其实你有什么太大变化吗?变了一个KB是吧。1157雅Y157,这个是158。为什么这个不行呢?因为这个图片它本身就是压缩性质的。表述清楚,你看有些有些视频它压缩过你,你都不能快播,你快播它都不支持。啊,所以说你看那个电影你就不能压缩,说老师我这下了个电影啊,下了电影,哎,我压一下,哎还这么大,没准变得更大了是吧?哎,那也是也有可能的呀,所以说这个压缩呢,就是有应用场景,回到我们这儿也是一个道理,就说不是说什么数据你都压,假如你数字本身它这个数据量就很大,你这个压缩了没,这变大了。
14:18
所以应用场景要有一个好,现在我们恢复一下来,同学们。有了。
我来说两句