00:00
所以说这个压缩呢,就是有应用场景,回到我们这儿也是一个道理,就说不是说什么数字你都压,假如你数字本身它这个数据量就很大,你这个压缩了没准变大了,所以应用场景要有一个好,现在我们恢复一下来,同学们。有了这个过后呢,我们恢复一把。我们恢复,假如这个数组现在你要去存盘,这个呢,同学们,我给大家一个任务啊,存盘你们自己去做一下。这个存盘照做很简单,跟Java的那个存盘大同小异,我我现在一想到存盘,我想到PP语言是多么简单是吧,一句话直接扔进去就完事了啊好存盘,存盘完了过后,那么这个存盘工作就完做完了,做存盘过后你再去读盘。读盘你读到的是什么呢?你读到的其实就是这个系数数组。好,现在呢,我们读盘完了过后,我们通这个稀疏数组恢复。
01:01
啊,恢复到我们的原始数组,我们看这个过程怎么操作的原始数组。好,这个地方呢,其实变得就比较简单了,比较简单,那你既然有这个元素数,你首先你这两个词得定下来是吧。好,那这两个定下来,我们才能够去确定你,你原先是1111,那你怎么知道你原先是1111呢?那就是因为你原先有个点我们忘了存了,是不是最最早我们说了,首先你这个地方要把原始的和有有几行几列析出,那这个我们要马上把它加进去,否则我们无法。无法去这个恢复,因为你一旦存盘了,你这个111可就找不到了,是吧,哎各位,所以说我们事先呢,要干一件事,把这个代码呢,我们得动脑筋写啊各位同学。也不是那么简单的,得动脑筋啊,首先呢,我们在这个之前先把这个第一个节点做出来。
02:02
好,各位同学,我写个漏。No。OK,等于我们六一个这什么事。什么事粘过来,因为你原先这个这个地方的这个,呃,第一个应该是应该是。诶,这个横坐标纵坐标应该是什么呀。这个这个其实不重要是吧,因为到时这个I和节我是用来干什么事儿,我用来恢复成那个数组的大小的,是不是就它的行和列嘛,所这个地方呢,这两个地方其实理论上是从哪儿过来的,是从这儿过来的,也就说你原先最早的时候呢,这个有行的大小和列的大小是吧,那也就是说你最早应该有一个roll size。幺幺。有一个column塞和幺幺,这个能理解哈,那就是说实际上你原先最早的时候应该是这样放进去。代码也没有影响,那到时候我们存进去的时候,这两个变量呢,我们也得把它搞进去,Row set,还有一个roll啊,这个qua s后面这个词其实一时半会呢,我们也用不到啊,当然也可以用,这一定要存的话,那就。
03:18
那就说那你只能这样子了,那你便历完了过后,有一个有一个看的不停的去看里面资金,你是再把它填进去就完了是吧?啊但是这个样子呢,就说这个节点你得放到最前面。那这个还还得有,有一个想法,我们先暂,因为这暂时不用它,为什么我说暂时不用,因为我便利几个节点,到时候我就恢复几个嘛,因为它那个节点的值和位置这个个数其实一时半会还用不上,所以说我可以写个默认值。啊,写个默认值在这儿好,如果这样写的话,这个系数数现在长什么样子呢?同学看一下。这个时候这个习叔叔长得是这样子的。诶,怎么没出来呢。哦,是不是没加进去啊,你这做了一个动作,你没把它加进去,好,我们加一个end,把这个节点也放进去,各位来跑一下。
04:08
这时我们已经把它恢复出来了。111,因为我现在就关心这两个,所以这个词呢,我一时半会不用啊,无所谓,因为我下面有几个,我通过这个也是能知道的,对吧,也是知道,反正我要去走一次,好,现在呢,我们就要开始恢复了,诶恢复的时候怎么办呢,首先。这个速度是不是要重新拿回来呀?好,那首先我们来看要读第一个节点。先第一步读取。啊读。读取我们稀疏数组的第一个节点。啊,第一个节点,那因为你已经从存盘,你读盘完了过后,已经恢复成这个系数数组,你存读盘的时候,你要想办法把这个节点。恢复成吸收乳,这个不并不难,因为你存的时候肯定也是一排一排的,按照这个格式嘛,你存盘的样子应该大致是这样子的啊。
05:06
就是大家也学过Java,大致呢,你这个数组在在底层这个文件长得也是这样子的。那你读一行吗?读一行。再把这个一个split。肯定就能拿到幺幺和幺幺好。假如我们现在这个已经拿到了我第一个节点,读取第一个,第一个节点我们先恢复一下。走row size,因为上面我已经定过这个size子了,比如说我写个六啊比,因为我现在为了恢复又在同一个文件,理论上说你将来恢复不在同一个文件啊,你肯定是不同的文件,那你们写完了在一个程序员里恢复嘛,所以说我这写个二好吧,大家知道什么意思就可以了,那这个时候怎么读呢?好的,郭同学那这样写。我们这个SPA的点,他读第一个。
06:00
怎么读呢?怎么读呢?我们要读到第一个节点,怎么读啊?有是不是直接就一个零就可以了,是吧,很简单,因为我们这地方数组嘛,我直接把这个节点拿出来。啊,比如说我们也叫,哎这个名字不好写,这叫look这个节点,因为都放在同一个文件的,有点有点讨厌,叫做嗯,叫做这个这个NO6吧,New node全部加个6NEW node好等于。啊,等于,然后我们的系数数值里面第一个拿到了,拿到过后从这边开始取东西。点什么呢?第一个肉拿到了来,再去column s2等于谬一个no的点column。好,后面那个我不要有了,这两个过后呢,我们这个数组就可以构建起来了。好把这个数组我们认为是第二个就是回复回来呢,我们叫第二个叫二。
07:05
然后这里面呢,一个是row size2,一个是COLUMN2。好,其实是一样的,但是我这儿要体现出读了一下嘛,如果说我直接写个11,那就没啥意思了,好有了这个东西过后,好怎么恢复呢?因为它默认的情况下是不是全部都是零的呀。你只要做一件事情。便利我们这个。便利我们这个系数数组,然后把节点拿出来就行,For循环。好,OK,我们仍然从这个稀疏数组里面取东西。跑去。那这个时候有一个问题,取的时候第一个节点我们要跳过去。对吧,我们要跳过去,那你不跳过去的话,那肯定到时候这个就就出问题。那呃,如果要跳过去,我们怎怎么跳呢?有什么方法呢。
08:02
那如果这样做的话,是不是要跳过去,呃,由咱们可不可以这样做呢?就是我们不像这样便利,这样便利行不行,就I从1ON until,我们换一个思路来遍利可不可以,就是点认识这个可以吗?同学们。可以的,对吧,我我我从一走嘛,零我就不变量,你没必要再去设个变量。对不对?哎,这样就一下就能解决问题,但这东西要灵活一点,这就是所谓的一个思路,当然如果你有更好的思路更好。好,这样从一开始走。啊,一开始走好,一开始走的话呢,那代码就可以这样子了,Node,诶我们拿到这个node了,等于什么呢?SPA,诶,I取出来了,取出来过后,下面我们就这个load里面是不是有它的这个行列和词啊,诶very good,那我们只需要做一件事情,什么呢?就是no的点这个肉。
09:02
对,然后我们load的点column等于road load点它的value咱们就写完了。那经过一番折腾啊,便利可以了,那现在呢,我们来看看打出这个恢复过后的跟我们想象的有没有区别,好,这是我们从稀疏数组啊,从稀疏数组恢复后后的,OK,同学们,我们来跑一下代码看看,那老师就不写了,因为前面遍历这个是有的,我就不再写遍了,输出这个恢复后的地图。习叔叔恢复后的地图。非常的简单。啊,还是那句话,就是中西呢,你要是看别的你就看好久的说了,哎,老师你这么一讲我就听懂了呢,是这样子的啊就你你总觉得反正老师一讲你就懂,但是一看书了你就看不懂,就就就这样子的,呃,你你讲我都懂了,没看书我看不懂。那是因为老师理解了对吧。
10:02
那你要是自己看懂了,那肯定是看懂,所以说老师一讲你觉得都不难啊,包括什么这个二叉树啊哈西啊,什么这个最优的这个二叉树都都不难,但是你自己看你就看不懂,所以说你还是不懂对吧,还是不懂好我们跑一下,那这个时候我一遍利出来,我们看这个结果跟我们想的是不一样的呢,对吧?诶我们得比较一下,同学们可以看到是没问题啊,你看一二都没问题,你看经过就相当于这个系数数组在中间做了一个什么呀,做了一个压缩又恢复。其实这个这个道理啊,这种这种这种思想在很多地方都有用,就是一个大的先压缩,最后用的时候还得恢复。这就是一种思想,同学们呢?呃,以后在回答这种压缩,关于压缩的这种,不管是数据还是我们的这个,呃,数据都可以按这种思想来理解,只是怎么去压缩的问题是吸收数组呢,还是其他数据结构?OK,好,同学们,那关于这个系数数数呢,咱们就讲到这里,我把代码给大家整理一下啊各位。
11:02
那刚才我们讲的东西其实并不难,并不难,对好同学们看稀疏数组的整体的一个流程来吧。首先我们给大家介绍了一下稀疏数组的一个应用场景。对吧,就我们任何一个东西呢,都有一个场景的应用,我举的是一个什么呢?诶我觉得是,诶写错了。我举的案例是就是呃,编写这种小游戏的时候,存盘和退。退出的时候,诶,它的一个,呃,一个应用场景,诶我看到这儿写好像对吧。诶,这是一个地图,我们发现呢,有些地图其实有效的数据并不多,但是呢,我们却傻乎乎的把它全部都击杀了,这是不对的,所以我们就想了一个办法什么,分析了一个问题。啊,分析问题呢,我们就提出了用稀疏数组进行一个压缩。
12:01
啊,因为二楼数字很多,默认值记录没有意义,哎,就推出了我们系数数组。那推出系数数组以后呢,我就给各位同学简单的看了一下数系数数组的一个概念。啊,就是稀疏数组的一个基本介绍,非常的简单。啊,习俗主基本的介绍,习叔祖的特点有这么两个。对吧,诶,它主要的作用就是缩小程序的规模啊,不要小看这个,你可能现在觉得很无聊,但是实际上我们很多情况真的有这种大量无用的数据教你去分析。啊,没有一招搞定天下的老师,你一招搞定没有,每个都都具体的分析好,基本介绍里面呢,还有一个习俗,宿主的一个举例,我给同学们看一下。这是稀疏宿主的一个举例。呃,这个图呢,应该很清晰的把这个系数数组的一和和这个原始数组的关系搞清楚了。
13:02
把它放到这儿来。OK,下面呢,我们就举了一一个代码啊,用这个应用案例来讲一下,好的,我们分析了一下它的实现。把应用案例给大家放到这儿。我们首先做了这么一个分析,对吧?A说系数组保留前面的二维数组,然后把系数存盘已恢复,整体思路分析是深度,深度最后是代码实现。代码对吧,代码实现,那么这个整体的思路分析,我是怎么做的呢。诶,我是在这里。接了一个品。诶,把这个思路还是分析的很清晰的,同学们就知道了,好代码我也给大家反思过来。注意啊,你可能在别的地方看呢,看到诶苏老师跟跟老师的实现有点不太一样,这个无所谓这个,因为整体的效果最终的目的就是压缩,至于怎么实现。
14:00
各个方法唯有差别。截取一段视频。
我来说两句