00:00
好了同学们,那么现在呢,我们开始下一个章节哈,下一个章节呢,我们叫做构语言核心编程知数据结构,那数据结构呢,我们先来做一个基本的介绍啊,数据结构是什么?数据结构是什么?其实数据结构啊,其实准确的讲,数据结构就是数据的一种组织的一种方式,也就是说在我们在编程的过程中呢。注意听我这句话啊,在编程和解决实际的问题过程中呢,很多这个程序员他们发现,他们发现有很多实际要解决的问题。都可以通过一种结构,都可都可以通过一种通用的一种模型或者一种结构来解决,于是乎就产生了一种叫结构的东西。那么在结构基础之上呢,才能产生这个算法。我记得当时我们在大学的时候啊。呃,教我们数据结构这个老师呢,他是比较有名气的,对吧,教那个严为民老师,他给我们讲。
01:06
他说这个数据结构有什么用呢?学完过后我们说我们也不知道有什么用。他就说数据结构,你可以这样理解。就好像你去做程序的一个基本功一样,就好像你你去踢球,你去踢球呢?呃,实际上有一样东西看起来没有什么用,比如说你的奔跑的速度跟你射门好像没有直接关系。没有直接关系,但是你跑的慢了,你实际上是永远不能把球带到球门上的,所带过去你就直接把你给干掉了,这个数据结构它是什么呢?它就是像我们做程序员开发的一种很很。就说很重要的一种内功,很重要的内功,当你把数据结构学完了之后,你会突然发现,哦,有好多好多这种比较麻烦的问题,如果你用数据结构来解决,你会发现很容易就解决了。
02:00
如果你脑海里面没有数据结构这个概念呢?你你会发现你不知道怎么去解决,就你感觉一头雾水。你比如说原先我在工作中的时候,对吧。我们那个CP他就跟我说,他说我这边给了你一堆这个GID,就是用户的ID,然后呢,他要求我不不能做数据库。然后呢,他要按照这个ID,按照按照一个从小到大的顺序返回,但是不能够数据库,因为够数据库这么多ID,你够数据库速度会变得很慢,数据库就撑不住。哎,如果当时我没有学这个链表的这种插入方式,那我肯定就解决不了这个问题,因为我一想,哦,原来你这个问题完全可以用链表来解决呀。因为列表它是可以在从在一个头节点,然后头节点我在加入的时候,在加的时候在内存里面就形成一个形成一个列表,而且呢,保证是从小到大,或者是从大到小的顺序,然后我把这个列表做好以后,我直接把这个链表按照一种方式给你打回去就完事了,对方呢他也能理解。
03:10
你再比如说当时我们有做这么一个东西,大家也可以欣赏一下。欣赏一下,你比如说当时呢,我们这个。做这个项目的时候,有这么一个小案例,比如说啊,同学们你看这里呢,我有一些资料给同学们分享啊,资料给同学们分享。在哪里呢?哎,我是放在这个位置的啊同学们。放在我的课件里边呢,我把这个算法项目的案例分享过来,然后呢,这里面呢,我把以前学过的这个课程也放到这儿了,其中呢,有一个这么一个案例,很经典的两个案例,一个叫做排排号,你比如说。让你去开发一个项目,这个项目呢,就是让你去做一个系统,这个系统呢,这个系统呢,就要解决一个什么问题,就是说哪一个人来了,比比如说你一个人来了,在银行要去办业务,那办业务的话,你你得讲一个先后顺序,他会有一个号,比如说诶所以呃,有一个业务员给一个客户服务完毕过后,他按下那个键。
04:21
按下盖该某某某某号到我这来服务。对不对,然后呢,这个人走了过后呢,另外你你有几个窗口,有五个六个十个都有可能你的你下面这个排队的客户呢,有很多,那哪一个。服务完了后,他就按下那个红色按钮,说到我这来,哎,其实呢。这个东西如果你学过队列的话,你就感觉有思路了,它都不是很难,就你学过这个队列发现哦,它其实就是个队列吗?你比如说。大家可以看一下这个小案例。啊,这个小案例,这就是一些很现实的问题,比如说我写一个go Java啊,当然我们现在不是讲Java啊bank我运行一下可以可以看到同学们可以看到你看这个地方,哎,在我点点点你看,哎这这有问题啊,这个我我重新来一下。
05:13
这个应该是点另外一个地方看看啊。这个地方是有小问题跑起来。好。这个地方怎怎么会跑出来一个这么大一堆错误呢?不应该啊,My bank。好大些的卖。大写的美。卡顿的这个这怎怎么回事,这个好重新来。Somebody。下面加啊。叫。My bank。好,我可能稍微慢一点啊。啊,有点可能当时没做的有有些小,因为他这个版本是以前很早很小以前写的,我在零零几年哈,应该是当时也不是零四年讲的,我应该是零六年的时候讲Java数据结构时候做的一个小案例啊,很早以前了,十几年前讲讲的东西了,好现在还能用,已经能跑起来,已经相当不容易了,如果有错误不给你们看啊,叫做。
06:22
大家可以看到我这里可以产生很多的,比如说我多了啊,比如说你看我这里多了,那么这个时候呢,你看某一个某一个人,这个相当于是一个服务人员,他服务完了后,他去叫号,叫号过后这个就飘过去。诶,最后服务完毕对吧,他有个服务时间,服务完毕过后大家都消失。那如果说这种系统的话,你要没有队列这个概念在里里面,你会觉得怎么做到的。再比如说,大家再看一个案例。再看你看这已经没有错了啊,你看我这还写着业务员四号为谁服务,为服务一号为谁服,我这都有都有这个指向,那么你再比如说大家再看一个小案例,你比如说吧。
07:05
你比如说,呃,我让你们做这样一个东西,就是汉洛塔,这是一个经典的回溯问题。那我们以前呢,呃,同学们肯定都都玩过这种小游戏,就是汉洛塔这个小游戏对吧,诶汉。呃,这个应该是套吧。To,回撤。好,同学们看到我们小时候呢,很多同学都玩过这种小游戏,就是把这边的盘子A塔的按照这个顺序搬到这个C塔,但是呢,有个前提,就是这个小大小盘子才能上在上面,大盘子在下边,不能颠倒过来,你比如说移动,你看这样子移动它是允许的。你把这个带挪到过是允许的,但是你不能把这个大的挪到这儿去,它不允许。对,那你这样一个题,像只有五个这样的盘子让你移动,一般都说我们人的大脑是可以反应过来的,但是这个盘子要是64个的话,我估计一般人基本就game over了,因为64个全部搬过去的话。
08:11
是一个非常复杂的过程,一般的人肯定是完成不了。但是如果你有这个。回递归回溯的这种思想,哎,你也能把它搞定,你看怎么做呢。你看他已经告诉你怎么做了,这个底层就是一个小算法。对,其实他这就用到一些递归的东西,你看没有,他最后这个很标准的一一步一步按照这个流程,只要你告诉他怎么做,他就可以帮你把这个东西给你做完。看到没有,大概是20多部吧,不到30部。你看呃,超过30不应该。走快完了啊,你看越到最后呢就越容易。越到最后就越容易了,过来好,这个就成功了,你看这就是他的一个很经典的一个小案例,当然这样的案例呢,还有很多,你比如说以前这个谷歌专门搞了一个,呃,算法编程大赛,里面还有很多经典的案例,比如说磁盘问题。
09:08
公交车问题,画图问题,矩阵查询单词路径问题,就是最短路径求和篮子问题,扔石头问题,好多好多。你看那些游戏,有些做游戏的那些朋友,他一般都会做游戏的啊。是,尤其是做这种比如说大型游戏的,它涉及到很多算法,像做游戏一般都会考察你们的算法。啊,他除非是做界面的。所以你看做游戏的一般他会要求是学这个CC加加的比较多一点,对吧,那这里面呢,它也会用到我们的一些数据结构,就是说数据结构的基础上,你才能产生产生这个算法,如果你离开这个数据结构,你的算法也是可以的,但是很难。就是说算法在算,算法在数据结构基础上,这个算法就显得很加很更加的优雅,很有很很有意思,如果你离开这个数据结构,你全是就是针对一些最基本的基本变量来玩这个算法,那这个就很难。
10:06
因为有些问题很复杂的好,所以说我这总结了一个什么问题呢,我就总结了这么两点,我就总结了说数据结构是一门研究算法的学科。只有编织,自从有了编程语言,也就有了数据结构。那么学好数据结构,可以编写出更加漂亮、更加效率高的代码。所以说有时候你去看有些比较厉害的人写的代码,短短的20行。你看不懂他在做什么?有些200行你可能几分钟就看完了,给你20行代码,我告诉你基本上你看不懂,就是你不知道他在说什么,因为里面大量都是。调用回溯或者是那个叠加的一些算法在里面就就很麻烦,对不对,但是呢,这种代码它往往比较有价值,比较有价值,所以说嗯,我们学习一下这个数据结构还是很有好处的。
11:01
那么学好这个数据结构呢?要多多的考虑如何将生活中遇到的问题用程序去解决,所以说曾经有一个老外,这个老外名字都忘了,叫什么啊,他说程序就等于数据结构加算法。啊,当然他这个站这个角度呢,呃,他这个角度站在这个底层的这个角度,其实这句话呢,也不能是完全正确,当然也不是错的,核心可以这么说,一个说程序的核心是这个,但是现在随着软件的发展,它融入了很多新的东西在里面,你比如说界面它也很重要,业务逻辑很重要啊,他不,他如果说程序只是等于数据一个加算法,那业务逻辑难道就不重要吗?有时候业务逻辑也是非常重要的,但是你的业务逻辑也要,也要靠什么来支撑呢?也要靠数据结构加算法来支撑。对不对,你比如说你们,呃,有些同学学过像工作流这些东西,它里面也有大量这些东西在里面,好,这是它的一个简单的一个介绍,那简单介绍呢,我们来再给大家简单说一下数据结构跟算法的一个关系啊,呃,是这样子的啊,算法首先是程序的灵魂。
12:08
对,那你说老师什么叫算法呢。什么叫算法呢?你比如说你去,呃,同学们可能会用过这样一些东西,什么叫算法?我举个例子,你比如说将来你们做这个go web方面的开发,那么大家都会知道go web开发一定要解决几个大的问题,就是一个高并发,海量吞吐这些问题,你看你的那个web服务器,大家都知道你web服务器现在最牛逼的NG科室就是比较厉害。对吧,呃,写的比较坚如磐石。那么大家可能会说,诶,网站使用那种服务器集群、数据库,读写分离和缓存技术,比如说red,那它就可以跑得很快了呀,就可以支撑这个大并发,高高并发和大流量,是的,你用的这些东西肯定是可以的,但是我们要深入的再问一句,这些优化技术又是怎么搞出来的?
13:04
它的底层又是什么呢?它还是最底层的,还是那些算法,就是说他之所以去给你搞了一个集群,搞了个读写分离,搞了一个缓存,他也考算法。最简单的例子,读写分离核心是什么?当你是s select语句的时候,我就去认为你是读。当你是其他操作,我认为是写光这一个东西,它就有很多算法在里面,难道仅仅靠一个select的一个关键词来判断吗?他肯定有些优化东西,诶一来我我怎么怎么去判断对吧,再比如说集群,你集群完了过,你同时跑了16个或者32个后台,跑了那么多服务器,那么我们用什么的什么样的算法让各个服务器能够充分发挥它的最大效率,而且保证它那个没问题,你再比如说有些同学说了像测心跳。有些有些服务器,它为了防止宕机,它一般都会有一个备用服务器,发现有一个服务器宕机了,它立马就撑上去了。
14:01
那想想这些东西怎么做,你肯定要用网络,咱们的网络肯定跑不了,跑不了他同时还有一个算法怎么样做,旁的就不说了,就说我们现在刚刚写的那个好友,就是维护这个好友在线。他有很多算法在里边,我们当时最经典的案例是这样子的。就说比如说张三,张三有一堆好友,那么这一堆好友他的状态是不是我每隔五分钟要把所有的好友全部放上去,问服务器要,诶这些好友是干什么的,不是不一定他是分包要的,他怎么分包呢?他先每次发十个过去。80个过去过后。发现这十个要了几次都没有,他他应该是这样子的,刚开始他要的人很多,比如说你现在有100个好友,我我可能第一次把100个全部发给你。到夫妻就回回过来,回国的时候呢,他肯定用一个用一个标识来标志他这个状态,到了第二次我又要了一次,发现其中有些状态是稳定的,我就要把这100个里面比较稳的塞出去,下次我不要了。
15:04
但不要了,过后呢,我再去要那个经常变化的人,等到有一段时间,我还得算一下,以前没有要的东西,我用一个算法再把它提出来,我还要问他要变,它里面就有很复杂的东西,里面到底是每隔多少时间要,而且要的时候是不是每次都像顶级服务器要,还是说中间做一个缓存。啊,他自己都有,比如说我客户端做一个缓存,缓存的时候,诶这个地方我每隔一天时间,我自动去我客户端偷偷的我去定时的要一下服务器。数据,所以它里面有很多算法在里边,我们再次请大家思考一个问题啊,就说你们一定要去思考,为什么不同的人写出来代码从功能上看是一样的,但是从效率上却有天壤之别。这句话只有你去跟一些大工,就是真正做过核心开发的人,你会有感受,这个我的感受是最深是哪个地方呢?我的感受啊,我我还是比较幸运的一个人,我之所以幸运是因为我参加工作的时候呢,确实遇到了真正的高手啊,不是不是假高手,现在动不动这个大牛那个大牛很多,但是真正大牛其实挺少的。
16:12
那大牛哦,你写个hello word或者说呃,会你不会的,他会那叫大牛,那不算大牛。真正大牛其实也不多,那为什么我说我幸运呢?第一个第一个就说我,我那个参加工作的时候,那个直接带我的那个人,他就是新浪的D任CTO,这个很以前老程序员是真的有本事啊,那是真真是真才实学,但我不说现在不行,因为那帮老程序员,他很多东西他是没有地方查询,是靠自己去研发出来的,你像现在你在网上去找点资料,别人会告诉你这怎么做。有也有书籍,那拨老程序员,他从1999几年,九七年,九五年开始搞这种,搞这种程序的,他东西没有,全靠自己去研发。这个就很有能力了,你比如说有些有些那个,当时我们那个大学老师就我们讲嘛,他说现在我整那个数据结构,我开发数据结构,大家他还这个,我们严老师觉得他他很委屈,我说诶这前老师写个数据结构也没啥呀,他说是现在看起来没啥,在他们搞的时候,七几年八几年那一点资料都没有,全靠自己去想。
17:22
你想想这就档次不一样,你知道吧,所以有些人他是用现在的这个环境去看以前的人。那不废话吗?对不对,你好像现在,诶说现在你从北京到成都,说以前怎么费那么多时间,坐个火车还30多个小时才到,现在五个小时就到了,是吧,你看那以前你看那些人多没本事,你们想想以前是干什么的,以前啥都没有,一穷二白对不对?所以说呢,我的意思就是说我比较幸运,就是说当时这个小,这个人带我了很多东西,教会我很多东西,当时我有一个最经实际的一个经验啊,当时我做服务器环境是。
18:01
UN当时呢,它的功能是要支撑上千万人在线,它是这样设计的啊,但实际上呢,用户还没那么多,但是他从效率上,它它的设计的规模要是上千万。而且呢,他用的那个服务器都比较低端,因为为了节省成本嘛,没有那种在零零几年零几年没成本,而且他他就是说他从那边心脏出来过后呢,大概也就十几个人。资金也不是很充裕,他说那现在我们要想这个程序怎么去跑,我写完了过后是吧,我就挺高兴,我就给他看一下,他说你的代码不行,你的代码一个普通的,他说我一个普通的,普通的一个很普通的PC机,我就要支撑10万在线,你这个设计肯定是不行的。为什么呢?你看你几个问题,第一个你大部分的数据,你你都是走服务器,呃,走这个数据库,这一下就完了。我说我走,我走服务器,走数据库有什么问题吗?你走数据库,你走数据库本身是没问题的。但是当你量大的时候,你的你都走走,都走这个数据库的话,你想一想,数据库根本就支撑不了,你的瓶颈就在哪里呢?你的瓶颈就在你的程序和这个数据库之间。
19:10
就是你那个数据的吞吐量在这挡住了,你可以扩带宽,其实外部这一层,他说外部这一层就是前面这一层,可以用这个集训来解决,现现在其实最难的地方在哪里呢?现在最难的地方还是程序跟数据库的这个交互。他很难去解决,同步怎么解决。对吧,你光一个数据库这么多并发都来了,全部都全部都卡在数据库,跑不了,跑不动,全部堵在那了。所以现在现在你可以加带宽,带宽一加流量没问题,大流量我可以解决,大并发其实也不是问题,因为大并发我前面有很多这个负载均衡也可以解决,现在其实最难的地方,现在呃,这个大型网站最难的地方还是在于程序和数据库,这数据库的现在提不起来,那数据库提不起来的话呢,一般都搞读写分离吗?可是一写读写分离又出现很多问题,什么问题呢?就是。
20:06
就是你读写分离还有个同步的问题。而且而且的问题是你数据表特别大的情况,你还要分表,你分完表了过后,你数据量再大,你怎么办呢?你所有的优化最终还是要落实在你的代码的这个算法上,就是能不能设计一种方案,就是能不能设计怎样一种方案呢?咱们减少对数据库的查询,同时还能够让程序正常运行。诶,这就是他的一个设计理念了,说为什么我当时给你讲的一个故事嘛,就下面那个小伙子,他这个把我们这个方案一说给那个朗讯的老板,一说直接当天就拍满,让他去朗训,当时年薪就是20万嘛。我每次就说这个故事嘛,那小伙子,其实这些东西都是我们那个小组好多人一起想出来的,就怎么怎么去优化,怎么怎么去优化这些东西,其实就是现在所谓的一些缓存产品,那个时候没有缓存产品,什么memory cash啊,瑞啊都没有,都没有啊,所以说那个都是程序员自己在想办法,所以说呢,我们就说了一句话,就说当时我们认为程序是有是有灵魂的,是有算法的,如果你不想永远是个代码工人,那么就花时间要研究算法啊,这一点是你想往上走,你一定要去,最终要突破这个问题。
21:24
最终你要突破,就是说如果是你,你是想在这个呃,架构上,在效率优化上,你肯定要去多看一些这样的东西,否则你的代码肯定保证就好像两个人一样,两个人都一样,对吧,有个人啥都不懂,两个人看起来长得都是一样的啊,比如说我们说汽车吧,说汽车从外形上看。大家都是奔驰。但是里面那个发动机是完全不是一个档次,一跑起来直接别人只要一开启,能把你扔到十万八千里去。从外形看,哎,它也是奔驰,我也是奔驰,你没看见你的内核是什么,对吧,所以说程序你一看,对外行来说,看你的程序就看界面漂不漂亮。
22:06
内行,内行你研究干什么呢?测测你的这个性能好了,这是我给大家讲的一个算法结构,好,那么现在呢,我们来看几个实际的问题啊,同学们,比如说看几个实际编程中遇到问题,比如说现在呢,有个字符串,再进行replace。Replace,那么现在呢?我要要求大家使用单链表来表示字符串内字符串节点内的定义,并依次实现它的构造函数,计算长度,还有这个负值判断相不相等,求字串两个数的连接等等等等七个层面函数。这些函数呢,本身是由这个API给我们提供的,但是要你自己去实现,你看当时呢,我们在大学里边学的时候,我们也有很多这个作业,当时呢,主要是集中在C加加里面的,我给大家看一下。啊,我记得当时应该是有一堆作业在里边的。
23:00
我看看在哪里啊。不是这个。不是这个啊。啊,不是这个。我看到这个作业是在在数据结构里边,对,在数据结构里边东西很多。那大家看一下其中,其中就有个链表。其中一个列表呢,它就出了一个这样类似的一个题啊,大概是在第六题,我还有点印象。啊,当时这个用的是C加加来写的,C加加来写的,你看这东西看起来就吓人。哦,睡觉觉。你看这样子,当时就给我们出了这么一个题啊,要用自己的那个数据结构来实现,对不对,最后实现的效果呢,是这样子的一堆。看。最后实现这么一个,还还让我们去搞一个叫做什么这个多项式啊,多项式要求写一个算法,计算两个多项式的乘积,要用多项式来实现,你看这东西。对吧,一般人看完了过后,他就这个还算是简单的,还算是简单的啊,他不算是特别难的,那当然这个东西你要你要你要能写出来,肯定是有需要,需要有好好去想一想的,多项式的,光多项式你你得先清楚它是什么东西,好这个是当时的一一个小题,那接着我们再来看下边还有什么呢?你比如说一个实际需求五子棋,但五子棋相对比较简单,五子棋就说他判断这个输和赢。
24:26
你去写一个算法,怎么判断输和赢?对吧,怎么效率更高一点,书合一,再比如说,再比如说约瑟夫问题,很经典的一个,如果你没有你如果这个东西你要用链表来完成的,就特别简单,如果你没有学链表,你只能用数组来解数组解决起来就比较困难。就是你速度解决这个月收付问题,绝对它的难度不小啊,你比如他的经典的案例是这样子的,我们学完了过后,我们就要把这个问题解决了,他也叫丢手帕问题。它设计一到一,二到N围成一圈圈,约定编号为K的这个人,从K这个人开始报数,数到M的人那个出列,然后呢,下一个又从那个下一个人开始,又从一开始又数到M又出列,最后问哪个人出列?
25:15
最后留的是谁?啊,你想想这又是一个算法呀,你得去解决,那么这个时候呢,你可以用链表加上你的思想形成一个算法,算法就来了,诶那每个人的算法可能就不一样,效率也会不一样,好再比如说我们后面常见的算法问题,磁盘公交车画图,邮差汉洛塔,对吧,比如说这个汉洛塔。那写完了过后,你就看到它,你就能解决,你就能解决好,那大体呢,大体呢,我们就把这个,呃,数据结构的一个需求简单说一下,简单你就记一句话啊,你就记住这么几句话,一句话你可以认为程序就是数据结构加算法,那么数据结构和算法又是什么关系呢?你可以认为。
26:02
数据结构是算法的一个基础,就是说你的算法建立在数据结构基础之上,这个算法就会相对来说实现的更容易。好,这是第二句话,第三句话,我们学完数据结构可以做什么事情呢?我们学完数据结构就可以解决这样的问题。当有一个实际需求摆在你面前的时候,你如果学了数据结构,你相对比较容易把这个算法写出来。明白我的意思吧,就说相对而言你有工具了,就好像你有一天想去。想去那个盗墓啊,盗墓是不允许的啊,盗墓是不允许,就你是盗墓诶盗墓,你赤手空拳去盗墓进去给某,哎有一天你发现当你盗墓的时候,你有很多秘籍啊,第一个你有秘籍,第二个你有很多先进的工具,比如说洛阳铲之类的是吧,你看我就没有干过,好比如还有那个什么那个那个那个那个罗盘一测,诶,这个地方有一个曾经死去过大官皇帝的位置啊,位置能找到,然后呢,洛阳铲一铲大概深度是多少,然后呢,有一帮哥们帮你,你就很容易把这个木起起来。
27:09
解决实际问题,如果你没有这些工具呢,你赤手空拳,这个事你就很难做,所以说我把这个地方已经点清楚了,就算法它和数据结构,其实是算法只是它的一个基础。但是你离开这个数据结构呢,你搞一个算法很吃力,就不好搞这个东西。好,那么大体就这样子的,我给同学们先把这个板梳一下啊,各位朋友板梳一下。好的,那现在呢,我们就把刚才的这一个内容进行一个板书。好的。往下拉个位。好的,我现在呢,给它插入一个。分页好,那么这个呢,就叫我们的数据结构,对数据结构。好否?数据结构。好,那数据结构呢,我们给它来一个标题对,标题一标题一对,那么我刚才介绍了什么东西呢?我先对大家说了一下,数据结构的一个基本的概念,对不对?诶,数据结构的一个基本概念,这个呢,大家脑海里面是要有一个概念的啊。
28:18
概念的轴好第一个第一个标诶写错了。好,第二个标题,第二个标题。标题二标题二在这说说,呃,我我是怎么说的呢?我是这样说的啊,我说它是数据结构是干什么的。数据结构是干什么的?来做了一个基本的介绍。好,我总结了这么三句话啊,第一句话,它是研究算法的学科,但数据结构呢,它不完全等于算法啊,就是说它是用数据移过来解决一个具体的问题,那个那个代码就可以叫一个算法。那个代码就做算法好,然后呢,我们又说了一下数据结构,它的一个关系,我也简单的说了一下。
29:06
好数据结构和它的一个关系,标题二。那么我这呢,总结了大概有这么三点吧。啊,大家以后就会有慢慢慢慢有有感受,我相信我,我们班呢,将来一定会有一些同学啊,将来这会在这个编程这个道路上走的比较远啊,你们的成就呢,将来肯定比老师要大很多啊,咱们班肯定有这样的同学,但是呢,你那天就一定要去,呃,去研究这个东西,待会呢,我再给你们推荐一些,哪些东西要看啊,我把这些也到时推荐给你们。啊,在这个笔记里面呢,有有其他几个东西,你们有时间去看一个呢,就是呃,以后把这个编译原理看看数据结构看看编译原理,编译完了过后看完再去看一点这个数值分析,但现在你们先不要去看好数值分析。数值分析。啊,数值分析呢,它可以对对这个对你程序比较精准的判断你的效率到底是什么样子的啊,那然后呢,编译原理呢,可以让我们对编译器本身比较了解,当时我们呃学这个网络过,让我们自己写了一个P20,就写了一个编译器出来,啊编译器还还让我们一行行说这是为什么叫P20,当时我们写的,但这个我都忘了,是我记得当时代码好像挺复杂的啊,我也忘了是写到哪个地方我忘了。
30:27
但是这个东西你编译原理编译,像这个编译原理,你打开过后,你就觉得简直就像天书一样,你知道吗?你你可以看一下,你看上面么,文法和语法的形式定义上下无关,就是当时我们讲课基本上就是这样念一遍啊,念完了过后你们听懂了吗?我们听懂了,对就这样子的,那这个东西你看你。你们看了估计都好多同学都都蒙圈了啊。但这个东西当然你也不用说把他吓得很很害怕,你们也不用很害怕,其实我们的我当时也没搞懂,他到底什么意思,我都看看看不明白,最后我怎么搞懂的呢,最后好是还是靠老师说你们现在懂不懂也无所谓,怎么呢,把编译器写出来就行了,我们把编译器写出来,我们就懂了啊,我们就懂了好,最后最后就把他这个站的关系啊,各方面就就理解的比较到位了,好。
31:16
呃,有些有些学校更厉害,他还他还让学生写个操作系统啊,写个简单操作系统,我当时去操作系统有些有些有些学生很厉害,他自己自己写个操作系统,直接把这操作系统直接能够安装到裸机上啊,这些人你看吃饱了没事干对不对啊,没办法,你不要不要跟这些变态的人比,因为这些人呢,他可能挣的更高一点,我们不用挣那么多,他能一一个月挣10万,咱们一个月挣上七八万就够了啊,别不要整那么高没意义,不去跟他争争那个啊,不去跟他这个,我们不跟他争,我们要我们还是要幸福的生活啊,幸福的生活先保密要紧啊,接着往下看,那下面呢,我们举了简单几个例子呢,大家看一下它的一个一个案例,我也把它写到这里来啊同学。
32:04
好,这是一个标题二对的,标题二好的,我举了这么几个案例,对,呃,第一个呢,就是说用单链表,将来你要去把单链表,它里面提供这些方法,比如说我们自己写长度赋值,判断相等子串求链,这样呢就会用到算法了。啊,这算法呢,只是别人给你隐藏起来了而已,就你现在呢,就在人家基础上用了一下而已,对不对,好,这是一个,再比如说啊,你写一个游戏,你写游戏呢,诶很简单,你要判断一个输赢,对吧,你就用了算法。那这个只是一个案例哦,比如你写的比较复杂的游戏,怎么去判断一刀给人家砍上,把你砍上了。那就叫算法,你不一要一刀砍上去,砍了半天就没动,没砍上,其实早就砍上了,结果你算法偏,坐标偏离了,偏离大概大概一个厘米,你发现怎么砍人家都不死啊,那你这个算法就有问题对不对,好这个呢也是一个问题,再比如说啊,再比如说诶,你看这个地方约瑟夫就比较实际了。
33:11
呃,他就是生活上的一个问题,让你编程解决,那这个问题很多呀,很多。好,约瑟夫问题也是一个实际的需求,这个呢,我们循环链表过后,我们学循环链表,我们就要把它搞定啊,比如说这个是一个案例,再比如说哎,再比如说像这种常见的算法,对吧,邮差问题啊,最短的东西,汉洛塔八皇后,经典的八皇后是很经典的一个回溯问题,也很有用。好,这是他的一个案例,那么紧接着我们还有什么呢?诶,还有像这种,呃,实际的一个小游戏,对不对。像那个华容道这些都可以用算法来解决。好,这是一个相应理。好的,呃,那么这个今天这个数据结构呢,因为我们时间关系,今天就先做一个简单介绍,明天呢,我们就开始正式的把各个那个数据结构给大家做一个详细的解释。
我来说两句