考研 数据结构(考研数据结构听谁的课比较好)
考研 数据结构,考研数据结构听谁的课比较好
苏世计算机考研,程序猿专属的学习分享社区
【声明:本文为原创文章,未经同意,严禁转载和抄袭,违者将追究其法律责任】
/ 写在前面的话 /
初试攻略,考研初试方法论都在这里。
很多同学在遇到数据结构的时候,总是一脸茫然,不知道从何下手。打开书本准备学习,刚看了还不到两三行,就开始摸不着头脑了。今天小苏采访了几位上岸的计算机硕士,让他们分享一些他们以前学习数据结构的一些心得。
今天分享的四位学长学姐专业课都是130+哦!
1
A学长,厦门大学计算机,初试专业课131分
我认为第一步是尝试解决实际问题,可以在力扣网、牛客网等网站找到问题。这种网站的好处就是有非常多的算法和数据结构的问题等待我们去解决,下面有其他网友的讨论和理解,对于我们初学者是非常有启发意义的。不停地尝试去解决问题,久而久之就可以摸出自己不了解或不熟悉的数据结构/算法部分。
找到了我们还不是很掌握的数据结构/算法后,多去网上查阅该知识点的资料,翻阅书籍等以便自己可以更好地理解它。网上有很多资源可用来学习数据结构/算法,并且大多数资源都是免费的,在这里推荐一个不错的好网站,www.cp-algorithms.com,其中包含大量的数据结构/算法列表,并给出了非常严谨科学的解释。
接下来呢,绝大多数人都是了解了该数据结构/算法的知识点之后,或者看看实际的代码实现,然后告诉自己“我明白了,我学会了”,然后过几天就把它置之脑后,我以前也会犯这种错误。但是这是非常不好的习惯,千万不要这样。在学习完数据结构/算法的一个知识点后,你应该做的第一件事就是自己实现它。不要只是找到别人的代码,将其复制粘贴然后运行,不要自己安慰自己说我已经理解了这段代码不需要去动手实现它。不管怎样,务必自己实现该数据结构/算法,编写,分析,调试等工作缺一不可,确保你真正理解它,而不是认为自己理解它。此外,修改自己的代码会变得越来越容易,因为许多问题不仅是特定数据结构/算法的直接应用,而且是一个曲折的问题。
编写完自己的代码后,还可以通过几个实例来确保它能正常工作并理解如何使用它,这基本上算是对数据结构/算法的直接应用。如果有时间的话,还可以继续使用更复杂的用例,以便自己知道如何以更复杂的方式来运行它。
经过所有这些步骤,我认为肯定会增强你对数据结构和算法的知识和理解,希望这会有所帮助!祝你们考试顺利。
小苏总结:利用力扣网、牛客网进行学习,自己写代码实现!
2
B学姐,北京大学软件与微电子学院计算机,初试专业课135分
其实我一开始学这个也很费劲,不过我是在失败中成长,不断地从错误/经验中总结,大概有以下几点:
步骤1:学好一门面向对象的语言
我更喜欢Java / C ++。从解决课本上的简单问题开始。我在本科期间学C++的时候花了很多时间在学习STL并了解其内部结构,在以后的编码过程总,它将成为最有用的库之一,帮助我解决了很多问题。不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。
步骤2:时间和空间的复杂性
这个必须要去了解!不仅必须了解时间和空间的复杂性的计算方式,而且还应该知道如何更改时间/空间以优化代码。
步骤3:前期的分析很重要
遇到了问题多用笔和纸来解决,不要凭空想象。除非你对问题的逻辑很清楚,否则不要着手写答案写程序。前期在复习的时候,每道大题都花15-20分钟是很必要的。如果想了很久还是想不出来,丝毫头绪都没有,那么就别挣扎了,看后面的答案吧。高效的复习不是要自己第一遍就要100%把这个问题给解决,而是第二次遇到类似问题时一定可以解决。过去我常常在分析怎么做这个题上犹豫,这浪费了我很多时间。
把这个题给做完了之后,要对其进行全面分析,看看有没有把下面这些很基础的问题给解决。
1,估算时间和空间复杂度;
2,检查是否有重复或不必要的循环;
3,通过增加空间利用率来降低时间复杂度(时间与空间之间的权衡);
4,废弃此解决方案并考虑新的解决方案。
步骤4:保持练习
熟能生巧,这个大家都懂。我使用的一个小技巧是,把对自己而言属于非常棘手的问题记录在一本本子中,并每天/每周定期去复习这些问题,这将不断地复现当时我们做题的逻辑,久而久之,就牢牢地掌握了这个知识点了。永远不要去背代码,要理解其中的逻辑并定期练习这个知识点。如果在电脑上编程的话,要多多使用调试器,如果你在调试器的帮助下可以找出BUG并修改正确,将节省大量你在数据结构上成长的时间。
最后,要自信,每天充满元气呀,永不放弃。可能很难,但要继续努力。你很快就会上岸啦!
小苏总结:深入分析算法,熟能生巧!
3
C学长,上海交通大学计算机,初试专业课130+分
我是跨考生,当我第一次学习编程时,我之前都没有读过任何有关数据结构和算法的书。这对当时跨考计算机的我来说,着实压力不小。
当时我没有使用任何花哨的数据结构图书,我坚持使用最简单也是最初始的那个visio studio code。我专注于提高自己的解决问题能力:看到一个问题自己去设计解决方案并将其转换为代码。举几个例子,使用for循环打印“ *”的三角形、将钱分成较小的钞票、对单词或数字进行排序、检查单词是否是回文、打印斐波那契序列等等,一开始我一无所知,不知道从何下手。在能够设计自己的算法之前,请执行以下操作:
后来我通过网课和网上资料,先去了解每种数据结构的原理,以及它们是如何运用在实例中来解决问题的。拿到答案,我逐行分析以了解每一行的工作原理以及它们整体上的工作原理。对我而言,最简单的方法是一键点击运行代码,同时那个二叉树是我当时最难理解的知识点了。
了解数据结构的工作原理后,我尝试将其与问题联系起来。比如说当我遇到了一个随机问题。决定不偷看参考方案。先问问自己输入是什么?输出是什么?使劲地去想办法,只要想出头绪即可,不要想着怎么用程序实现它,先能找出思路即可。然后我尝试用编程语言对其进行仿真。先在纸上画一个流程图,弄清楚接下来的编程的逻辑顺序,然后在纸上用伪代码先写一遍,如果我在纸上的模拟效果很好(解决了问题),那么只需将其转换为代码即可。接下来我就非常有信心可以将其转换为代码,最后,我运行所有可能的情况并逐个修正里面的BUG。
纸上模拟战术最初是我读初中一个老师教给我的,直到现在,当我需要解决一个非常具有挑战性的问题时,我仍然使用这种方法。
小苏总结:专注每种数据结构的原理!
4
D学长,浙江大学计算机,初试专业课130+分
作为一名电子专业的学生,我在大学本科四年时间里都没怎么写代码。后来考研选择了考计算机,我来说说我当时是怎么准备数据结构的。
经过一轮的复习,至少自己应该能够明白数据结构的整个体系,什么是“链表”,什么是“栈”等。而且这些知识点要能够形成长久记忆,刻在自己的大脑里面。
数据结构整个体系大概是这样的
1. Arrays:数组是初步的东西。数组将使你了解访问数据的线性方式以及对时间和空间复杂度的估计。
2.链接列表
3.堆栈和队列
4.位运算
5.字符串
6.模式搜索算法,例如线性,KMP等
7.散列表
8.Trees:非线性数据结构,我花了大量的时间来理解。以迭代和递归的方式解决尽可能多的问题。树里面又包括了以下:树的表示;前序、中序和后序遍历;二进制,AVL和红黑树;多节点树。
9.堆(我的最爱)
最小堆
最大堆
10.广度优先搜索和深度优先搜索
11.排序:了解每种算法以及何时使用,插入排序;冒泡排序;选择排序;快速排序等等。
12.回溯
13.动态规划
14.图形:拓扑顺序和Dijkstra等
算法问题的解决和优化
我遵循这种方式:不要马上看现有的答案。看看你是否可以直观地想出思路并将其写在纸上,无论你这个初始思路是多么幼稚。最初这个过程需要一段时间,做的多了,自然而然就掌握了在较短时间内想出解决该问题的解法。当然,我写的每个答案上都会验证以下几点
1.估算时间和空间复杂度
2.检查是否有重复或不必要的循环。
3.通过增加空间利用率来降低时间复杂度(时间与空间之间的权衡)
4.废弃此解决方案并考虑新的解决方案。
除此之外还要进行大量相关练习,用C语言去实现某一种数据结构,我当时觉得这个步骤是最难的。有的时候,你在一本书或者学习网站上面去看一个数据结构的解析的时候会觉得不算难,脑子里想着自己去实现它应该不是很难,但是抛开这些材料的时候让自己独立实现的时候,就是另外一回事了。一定得先自己思考,然后再去看答案实现,在我看来这不是单纯的学习数据结构了,而是在锻炼自己的综合能力了,如何真正理解问题和用编程技巧实现。
小苏总结:数据结构整个体系做到心中有数,注意练习和算法优化!
以上四位“过来人”的学长学姐分享了他们的学习经验,学弟学妹们有没有从中得到什么启发呢?总的来说,还是要多练习多思考,最后祝大家都能找到适合自己的学习方法,早日上岸!小苏等你们的分享哦!
苏世学社旗下品牌,专注于计算机考研
计算机考研一手资讯,原创高质量干货
深度的学习分享丨咨询前辈丨个性化指导
考研 数据结构(考研数据结构听谁的课比较好)
考研 数据结构(考研数据结构听谁的课比较好)