一个北大学生学习数据结构的经验Word文档格式.docx
《一个北大学生学习数据结构的经验Word文档格式.docx》由会员分享,可在线阅读,更多相关《一个北大学生学习数据结构的经验Word文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
大家都是从高考走过来的,应该知道心态的重要性吧,两种不同的心态,完全就是两种不同的效果。
学了这么久数据结构了,我们到底在学些什么呢?
不知道大家有没有想过,那现在我们现在来归纳一下我们学习的内容吧,其实学到现在我们也就学了几种普通的数据结构,象二叉树,树,图,还有排序的问题,前面的线性表和字符串也就是一些概念,当然还有一个很重要的KMP算法,然后在每种数据结构中我们也就是学到了若干处理的算法,
我想真正数起来也就是几十个算法吧。
学习数据结构也就是要掌握这几十种算法,多简单。
至于如何掌握每个算法呢,我想就是多看看书,重要的是能够理解。
我能独自完成作业!
这里我的定义和老师的不同,老师是鼓励大家讨论的,不过我发现还是有一些同学就是先问好别人算法,然后再自己写,虽然这个不算抄袭作业,但自己基本上没有一个思考问题的过程,虽然要理解算法也会要思考很多,但是因为没有自己独立的思考过程,要自己写程序、写算法的时候根本写不出来,所以我想如果真的想学好数据结构的话,最好是能够自己思考问题,不要刚想了一会就觉得做不出来,然后就去问其他人。
其实老师给我们的作业还是基于我们的水平的,我绝对相信我们自己能够独自想出算法,虽有可能会比较长时间吧,但是这样肯定会比问其他人学到更多的东西。
当然我并不是说不要问同学,有时候就是脑筋转不过来,一问别人就懂了,当然问了别人不能只是我知道了这个算法,还应该去想如何思考才能得到这个算法,这样水平会提高很多。
多实验!
这个就没有太多理由了,我一直觉得编程是一门熟练科学,多编程,水平肯定会提高,最重要的是能够养成一种感觉,就是对程序对算法的敏感,为什么那些牛人看一个算法一下子就看懂了?
而自己要看很久才能弄懂,而且弄懂了过了一阵子又忘记了?
其实这个是因为牛人们以前看的程序很多,编得也很多,所以他们有了那种感觉,所以我觉得大家应该多看程序,多写程序,培养自己的感觉。
2复习和考试的技巧
我想大家应该都有这样的感觉,就是觉得自己什么都掌握了,但是在考试的时候就是会犯晕,有时候一出考场就知道错在哪个了,然后考完以后一对答案,发现其实考得很简单,应该都是自己会做的,这个就是与自己的复习和考试的技巧有关系了。
首先就是复习,前面已经说过其实我们学的算法也就是几十个,那么我们的任务也就是理解这几十个算法,复习也就是要加深你的理解。
如何理解算法,然后理解到什么程度呢?
是能默出整个算法吗?
其实不是这样的,数据结构的考试有它的特点,考过期中考试了,大家应该都发现数据结构其实不要求你把整个算法背出来,它注重考察你的理解,那么怎么考察呢?
其实也就是两种方式吧,一种就是用实例,就是给你一个例子,要你用某个算法运行出结果,我想这个期末考试的时候仍然会有很多这样的题目,比如排序那块就很好出这样的题目,要复习这种题目我觉得很简单,就是每个算法都自己用例子去实践一下,以不变应万变,我期中复习的时候就是这样去做的,而且考试之前我就觉得那个并查集的题目就很有可能会考,于是就自己出了几个例子,做了一下。
另外一种考察方式就是算法填空和算法改错,可能有一些同学觉得这种题目很难,其实我们首先可以确定这两种题目肯定是与书上算法有关系的,只要理解了书上的算法就可以了,有人觉得看完书以后什么都懂了,而且要默也默得出来,其实不是这样的,算法改错和填空主要是考察的细微处,虽然你觉得你默得出来,那是能够默出算法的主体部分,很多细微的地方你就会很容易忽略。
我想大家考过期中考以后应该都有这种感觉吧?
那要怎样解决这种问题呢?
我觉得有两种方法,一种就是自己去编程实现,这种方法比较有意义,还能够提高编程水平,
另外一种就是用实例分析算法的每句话,我认为这种方法是最有效的。
然后还有一种题目,就是最后的写算法的题目,我觉得这种题目还是很好解决的,只要是能够自己做出作业的,基本上都会很容易做出来,这也是为什么我前面觉得平时做作业应该自己独立思考的原因,同时做这种题目千万要小心,尤其是题目简单的时候,那肯定会有一些小地方要考虑清楚,一不小心就会被扣掉很多分,这样很不值。
我觉得考试的时候没有太多要讲的,只要复习好了,考试的时候细心一点就可以了,然后就是做一个题目开始就要尽量保证正确,如果觉得留在那里等后面做完了再来检查,这样错误还是很有可能检查不出来,我期中考试的时候就基本上没有检查,因为我做每个题目都是确保正确,用的时间也挺多的,然后也觉得没有检查的必要了。
一个学生学习数据结构的体会(转)
读《数据结构(C语言版)》
(1)
今天开始认真读这本清华版的数据结构,严蔚敏和吴伟民编著。
也许你会奇怪我为什么会选择这本C语言描述的数据结构书,现在的数据结构不都用面向对象语言描述吗?
其实这本书不是我选的,而是我参加的机试指定的参考书。
不过对于本书选用的语言,我倒有自己的看法。
用C语言描述显然有很多不便,但是在一个充斥着用OO描述数据结构的世界里,从OO中抽身出来用C看待数据结构的思想,也许更能看清数据结构的本质。
好了,言归正传。
在今天这第一篇文章里,我来探讨一下数据结构的基本概念。
作者一开篇就归纳了计算机解题的一般步骤:
“首先要从具体问题抽象出一个适当的数学模型,然后设计一个解此数学模型的算法,最后编出程序,进行测试、调试直至得到最终解答。
”我把它再进一步归纳一下,就是:
抽象数学模型——设计算法——编写程序。
这个思路非常重要,除了一些非常简单的问题,所有的程序设计都应该遵循这三个基本步骤。
我们平时写程序常犯的错误是忽略第一个或第二个步骤,或者更甚者,前两个都忽略。
在设计数学模型的过程中,实际上就引出了数据结构的概念。
本书中作者给出的定义是:
“简单来说,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。
”国内的教材为了语言上的严谨常常把话说得很难懂。
请大家注意这句话里的这几个关键词:
1)非数值计算,这说明了数据结构这门学科的应用范围,如果你想解一个线性方程组,大概很难直接找到合适的数据结构;
2)操作对象,也就是问题中的数据及其表示的形式;
3)关系,即数据间的关系;
4)操作,即针对数据的操作。
把以上的定义用公式写出来,就是
Data_Structure=(D,S)
其中D是数据元素的有限集,S是D上关系的有限集。
所以在设计数据结构时,首要的任务就是找出要操作的数据,其次是挖掘出数据间的关系。
这两步完成以后,数据的逻辑结构就定下来了。
其中数据间的结构有以下几种:
集合,这和数学中的集合概念是一致的;
线性结构,即数据元素之间一对一的关系;
树形结构,即数据元素之间一对多的关系;
图状结构或网状结构,即数据元素之间多对多的关系。
然而只有逻辑结构是不够的,程序要能够运行,必须把数据的逻辑结构在计算机中表示出来,也就是设计物理结构。
大多数高级语言都对数据的物理结构有较好支持,如各种数据类型。
作者在解释数据类型的概念时说到:
“引入数据类型的目的,从硬件的角度看,是作为解释计算机内存中信息含义的一种手段,而对使用数据类型的用户来说,实现了信息的隐蔽,即将一切用户不必了解的细节都封装在类型中。
”这个概括非常精辟,从中可以看出以后的OOP只是在更高层次上对信息的封装和隐蔽。
对数据类型进一步扩展,作者引出了抽象数据类型的概念。
抽象数据类型(ADT)是指一个数学模型以及定义在该模型上的一组操作。
在引入抽象数据类型后,使逻辑结构更加独立,从而让程序员可以更加专注于逻辑结构的设计。
把抽象数据类型用公式表示出来,就是(D,S,P),其中D是数据对象,S是D上的关系集,P是对D的基本操作集。
如果计算机解题一定要遵循一个通用的模式的话,上面这个式子就给出了答案。
读《数据结构(C语言版)》
(2)
本节谈一谈算法分析和大O估算法(big-Onotation)。
算法效率的度量一般采用事前分析估算的方法,通常的做法是,“从算法中选取一种对于所研究的问题(或算法类型)来说是基本操作的原操作,以该基本操作重复执行的次数作为算法的时间量度”。
谈到这里时,作者引出了大O估算法。
在本书中,作者对大O估算法的介绍显得有些草率。
一开始就冒出一个式子T(n)=O(n3),然后在本页最底下用小字介绍了所谓的“"
O"
的形式定义”:
若f(n)是正整数n的一个函数,则xn=O(f(n))表示存在一个正的常数M,使得当n≥n0时都满足|xn|≤M|f(n)|。
也许是我数学基础太差,总之看到这个定义时我一头雾水。
不知道为什么作者没有花一点篇幅介绍大O估算法的由来和定义。
我google了一下,发现了这样的介绍:
Definition:
Atheoreticalmeasureoftheexecutionofanalgorithm,usuallythetimeormemoryneeded,giventheproblemsizen,whichisusuallythenumberofitems.Informally,sayingsomeequationf(n)=O(g(n))meansitislessthansomeconstantmultipleofg(n).Thenotationisread,"
fofnisbigohofgofn"
.
FormalDefinition:
f(n)=O(g(n))meanstherearepositiveconstantscandk,suchthat0≤f(n)≤cg(n)foralln≥k.Thevaluesofcandkmustbefixedforthefunctionfandmustnotdependonn.
Note:
Asanexample,n2+3n+4isO(n2),sincen2+3n+4<
2n2foralln>
10.Strictlyspeaking,3n+4isO(n2),too,butbig-Onotationisoftenmisusedtomeanequaltoratherthanlessthan.Thenotionof"
equalto"
isexpressedbyΘ(n).
Theimportanceofthismeasurecanbeseen