FinalDestiny117 发表于 2019-2-27 11:53:48

数据结构和算法 纸质版手写笔记

本帖最后由 FinalDestiny117 于 2019-2-27 11:53 编辑

数据结构(基于C)目录如下图↓

终于在今天收尾了!算是给这门课程画上了一个句号吧,成就感还是有的,翻翻这满满一本干货,想想当初自己刚开始学的时候,真的也是不容易了。特别感谢小甲鱼和鱼C这个平台,我第一次发现原来学网课也那么有趣,至少能一直坚持下来吧。

下面大概分享一些学习经验,如果觉得水可以略过= =

首先是为什么学数据结构?
      其实通俗地讲,就是我被学校的OJ搞烦了,我不相信我AC不了,不就是些算法嘛,那我凭什么不可以?其次,本身我觉得自己的逻辑思维应该过得去,正好比较契合算法嘛,所以学着玩,就当做兴趣的培养吧。我不知道以后会不会当一名名正言顺的程序员,也许我学软件知识纯属自娱自乐罢了,但至少这也是一种乐趣,我喜欢活在自己想活的世界里。

其次是如何学习?
      以下是个人的一些经验,当初是打算速刷的,没想扣得太死。学习软件本就是一个理论+实践结合的过程,不过我由于时间关系,我知道要我敲代码,怕是要找错误找半天,这样便会大大延缓我的学习进度,因此主要以理解各类算法的思维和代码为主(敲代码的事情以后补上~)。我是一个比较喜欢做笔记的人,我觉得好记性不如烂笔头,能把新知识点消化为属于自己的最好的方式就是写笔记的形式。而且主要是有一种成就感呐~
      对于相对较简单的内容,我一般会直接2倍速滚一遍,笔记跟进就可以了。但对于部分较难理解的算法(比如说图部分的很多算法),则听了一遍还是云里雾里的,那么我会1.5倍速(1倍速是真的不习惯,主要是太慢了)播放,慢慢理解吧。如果代码实在不懂,就拿一张纸,把参与运算各个变量都写好,自己模拟计算机进行逐步操作,这个方法真的很实用!如果还是不理解,那只能去各类论坛求助大神咯= =(不过CSDN真是个好地方,因为它教我理解了KMP算法和Floyd算法)
      笔记有时候不需要随时跟进,记笔记的前提就在于你理解了,所以我更倾向于先理解,随后在重新看一遍视频补一遍笔记。当然了,对于一些概念问题我还是边放视频边记录的。
学完很多算法你会发现,理解算法和理解代码完全是两回事,往往理解代码会难的多,你会发现,很多算法的思想很好理解一点就通,但是它的代码你需要研究很久,有时候还没有头绪,需要求助。

对于目录中的重点与难点:
这里逐一解释:(因为是个人学习后总结的,所以因人而异吧)
重点△:
(1)循环链表&双向链表:一直都觉得这是个很有用的东西,毕竟能减少遍历次数,提高运算效率。只是双向链表的插入和删除操作需要注意顺序,比较绕。
(2)二叉树:二叉树就不多说了吧,真的是最最基础的东西了。它的意义也在于为之后很多算法做了铺垫,简单易懂。
(3)赫夫曼树:因为它很巧妙,巧妙地根据每个字符出现的频率压缩了空间,我很喜欢这类算法。
(4)DFS&BFS:这个也就不说了,对于遍历算法来说已经是基础的基础了,实用度可想而知。
(5)最小生成树:关键在于它能解决很多实际问题,跟生活比较贴切吧
(6)最短路径:同上,感觉在生活中很实用。而且Floyd算法是我特别喜欢的一类算法,正因为它的构造方式太巧妙了,核心部分用一行就可以表示,所以我花了一个晚上的时间去查资料理解它。
(7)AVL:这是令我最头痛的一个算法了,因为我至今都存在问题。但是它的作用显而易见,通过缩小树的深度从而减少遍历所需时间,大大提高了效率。
(8)Hash查找:个人感觉是特别有用的一类查找方法了,因为他的构造方法复杂多样,处理冲突的方式也很巧妙
(9)快排:快排有多快就没必要我说了吧。从接触到快排的那一刻起,我就很佩服,这样一个算法虽然用了需要花费大量时间与空间的递归(递归可是一段程序需要尽量避免的),但是它就是那么快,让我感觉就很神奇!当然了真正有用的还算优化后的快排。
(10)总结:这里对各类排序算法进行了总结,并给出了适应条件,一直觉得这类总结性的东西很实用。

难点*:
(1)KMP算法:这是我学到现在第一个没法直接理解的算法,就因为它的模式匹配字符串next数组构造得太过巧妙了,所以我理解了好久,最后在CSDN的一篇文章上理解了它的精髓。
(2)赫夫曼编码:思想不难理解,但是代码部分由于定义的结构体实在是太多了,因此我在看封装函数的时候一直晕头转向的,是真的很需要费时费力去理解的一种算法。
(3)最短路径:光看代码很难理解,所以我特意模拟了计算机运行自己写变量逐行运行。去研究Dijkstra是怎样贪心的,是怎样避免闭环存在的;去研究Floyd是怎样的一种思想,原来代码也可以写得如此优美。但以上情况并不适用于含有负权值的图,则需要用Bellman-Ford算法(当然了对于该算法我也只是做了个了解,暂时没深入研究)。
(4)AVL:真的是很令我头疼的一个算法,至今我依旧没有搞懂代码,而且就连理解其思路(对于需要双旋的情况)也出现了障碍,不得不说自己还是太菜了,希望以后哪天能豁然开朗吧。也希望如果有大神懂AVL的话能教教我。

最后说一句,笔记内容见下方,有需要的鱼油可花1鱼币自取(就当做是辛苦钱吧)。如果有不理解的算法我可以把我的理解方法分享给你,希望对你有帮助,但我只是个刚接触算法的萌新所以不保证可以百分百教会你。




开心丶 发表于 2019-2-27 18:23:32

大二,数据结构挂科了。。。现在在补,谢谢你的笔记、
页: [1]
查看完整版本: 数据结构和算法 纸质版手写笔记