怎样一分钟学会loserEvery time

综合教程3课后翻译题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
综合教程3课后翻译题
上传于||文档简介
&&全​网​独​此​一​份​,​自​己​手​打​,​希​望​有​助​于​大​家​备​考​。
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩2页未读,继续阅读
你可能喜欢如何学习数据结构?
本人学的是电子系,想考计算机的研究生,本科阶段接触的编程不算丰富,顶多是单片机的程序写的还算多!最近在学数据结构!感觉像c啊,数据结构啊很难学习到的本质!就是顶多肤浅的了解了下它的表面原理!你说要叫我写出二叉树的非递归遍历,二叉树的线索化,哈夫曼编码的实现,估计都得好困难!请问该如何在考研中复习好数据结构!特别是跨考生呢?是不是选用的教材不对!用的是严奶奶的教材
按投票排序
————————————————2015最后更新————————————————---------------------------------新书新方法(兼容之前的答案)---------------------------------
这是我第4次更新这个答案了。我觉得是最终版本了。因为被我忽悠的师弟师妹都学了下去。看来这个办法真的有效果。再次强调,只是入门。1. "我想学好基础的数据结构和算法! "不多说,有这心就往下看。2. "我应该准备些什么? "a. 这本橙书: 《算法 第四版》
--亚马逊中文版:
--线上资源: b. 注册Coursera, 依次加入这2门课:
&算法, 第一部分& &算法, 第二部分&Part 1: Part 2: 如果没开课, 就先标记, 这样开课时会通过邮箱提示你.3. "我应该做些什么? "先熟读书内1.1和1.2, 最好把课后习题都做一做. 网站上开课后(即使已经开课几周了, 没关系),
跟住上课内容: 课本知识 + 视频内容 + 课件重点+ Exercises (独立完成且满分) + Programming Assignments (独立完成且尽量满分) + Job Interview Questions. 从Part 1到Part 2, 跟住, 跟住, 跟住!关于做书后练习题,参见:4. "我学完了呢!"再去跟隔壁斯坦福的算法公开课, 他还给证书! 因为参考书籍基本上就是是《CLRS》, 所以也就是强迫自己去仔细研读算法导论.
---课程名称:
&算法设计与分析, 第一部分&
&算法设计与分析, 第二部分& ---课程地址
Part 2: 5. "又学完啦! "可能今后在这个方面不需要看网络上不知名人士(没错, 就是我)的建议了. 拜拜.PS: 就这些?? 对, 就这些. ——————————————— 补充———————————————Coursera上6月19号开普林斯顿讲的算法课程了:教材就是橙宝书:课程负担并不大。刚入门的同学可以跟一跟。当然学习算法还是要多做题。^_^—————————————————原答案—————————————————我要好好回答一下这个问题。从刚上大学在课堂上听老师讲解,到后来自学,反复学等种种失败经历给了我当头棒喝。我这样的小渣渣还真是难以捧本书看一看就能学懂。还真得特殊准备一套方法来学习它。借助知乎,网上大神,ACMer的经验分享,我自己总结了一个入门的学习方法,让我快乐且热情的坚持下来了对数据结构与算法的学习。(仅针对初学者的入门级学习,大神们请绕过,拜拜么么哒)好,剩下来像我一样的阿渣们,让我们先来痛快的分(tu)析(cao)下为啥这东西难学:1. 抽象,数学知识多,大多数书籍有很多数学证明,很枯燥,爱掉头发。2. 反馈差。比如学完了“快速排序”也就学完了,没什么事做,也没觉得自己厉害多少。但是要是学习下cocos2d-x,过几天自己都能写小游戏了。学了难以分分钟高能还真就难以坚持了。没错,学习这事我就是这么投机这么功利。3. 孤立的知识点都很难有什么作为,只有理解+融汇+贯通才能显威力。4. 没有好“老师”。搜索下“如何学习雅思&托福”,各种高能大法学习小组培训机构怒刷一脸屏。好了,吐槽完毕,以下是干货:1.先来本入门级的好书我把里面的代码全打了一遍,整不懂就一点点在草纸上演示,还整不懂的就死记硬背了下来,说不定哪天就想通了。学起来很慢,但是效果不错。谁让我笨呢。(现在没事抽风还要默写一下AVL树的c实现,也是病没好)我把里面的代码全打了一遍,整不懂就一点点在草纸上演示,还整不懂的就死记硬背了下来,说不定哪天就想通了。学起来很慢,但是效果不错。谁让我笨呢。(现在没事抽风还要默写一下AVL树的c实现,也是病没好)2. 可视化刚开始我就按照1这么学,学一周就学不动了,太高估自己的能力,又冒充不下去学霸了。这知识尼玛这么抽象。之后发现了一个可视化工具(很多大神都推荐过啦)http://visualgo.net
什么冒泡插入快速排序一演示,小动画一播放分分钟我就都整明白了,一低头那些小代码也就都被我看穿看穿了。来一把倚天剑屠龙刀我也能混个山大王。(图是二叉堆的演示)(图是二叉堆的演示)一可视化之后你会发现很多抽象的数据结构在脑海中有了样子。我也说不太明白那种感觉,就好像你在一个姑娘/小伙子身上看到了爱情的样子。3.编程实践其实学习算法可以分3个部分,算法设计,算法分析,算法实践。我个人觉得更需要静下心花大块时间琢磨的是前两方面,但是算法实践更容易让大家产生“我确实进步了”的正反馈。如果你参考的是我的旧答案,也就是起手看的是《数据结构与算法分析 in C》。那么我建议用这两本书《C语言程序设计》和《C和指针》再去复习下C语言,之后去LeetCode上找相关题用C/C++去做。或者转头去看《算法第四版》,然后去独立完成上文提到的公开课的编程作业和书后习题。(受限于当时所学,这部分于16年删掉重写)好了,总结起来就是对于每一个知识点,我们用学理论+可视化+编程实践相结合的方式一个知识点一步地踏实前进。但是到这里我们真的就只是入门。所以我在这之后就愉快的重新认真地撸《算法导论》去了。可以参见我另外一个回答:。撸完如果觉得不够可以继续撸其它一些算法书籍,详情参见大神文章:虽然我还是觉得自己很渣很菜,但想想没有昨天那么渣了,就会很开心。
推荐神器,我已经帮助不下5个文科生转行CS学数据结构了,绝对的深入浅出,谁用谁知道:
以下答案来自 Quora。翻译很挫,还请见谅 :)I see it time and again in Google interviews or new-grad hires: The way data structures and algorithms—among the most important subjects in a proper computer science curriculum—are learnt is often insufficient. That's not to say students read the wrong books (see my recommendation below) or professors teach the wrong material, but how students ultimately come to understand the subject is lacking.我多次在google面试或者毕业招聘的时候看到这样的情形:学习数据结构和算法--CS课程里面几乎最重要的课程--的方式很不科学!!到不是说大家用的书或者老师用的材料不对,而是说学生们对于这些课程本身的理解非常缺乏.The key to a solid foundation in data structures and algorithms is not an exhaustive survey of every conceivable data structure and its subforms, with memorization of each's Big-O value and amortized cost. Such knowledge is great and impressive if you've got it, but you will rarely need it. For better or worse, your career will likely never require you to implement a red-black tree node removal algorithm. But you ought be able—with complete ease!—to identify when a binary search tree is a useful solution to a problem, because you will often need that skill.打好数据结构和算法基础的关键并不在于对于所有数据结构的细致的了解,不是记住每一个大O值或者摊余成本..((@_@;)? [不懂]).如果这些知识你都掌握了,当然很棒并且可以给人留下很深的印象,但是你基本上用不着啊!你的职业生涯中或许永远都不会要求你实现一个红黑树删除节点的算法.但是!你必须有能力而且手起刀落轻轻松松的识别出什么时候使用二叉树更简单更有效, 因为你十分需要这样的技巧.So stop trying to memorize everything. Instead, start with the basics and learn to do two things:Visualize the data structure. Intuitively understand what the data structurelooks like, what it feels like to use it, and how it is structured both in the abstract and physically in your computer's memory. This is the single most important thing you can do, and it is useful from the simplest queues and stacks up through the most complicated self-balancing tree. Draw it, visualize it in your head, whatever you need to do: Understand the structure intuitively.Learn when and how to use different data structures and their algorithms in your own code. This is harder as a student, as the problem assignments you'll work through just won't impart this knowledge. That's fine. Realize you won't master data structures until you are working on a real-world problem and discover that a hash is the solution to your performance woes. But even as a student you should focus on learning not the minutia details but the practicalities: When do you want a hash? When do you want a tree? When is a min-heap the right solution?所以,不要试图记住所有的东西.而是从基础开始,做两件事:第一件事. 把数据结构图形化,视觉化.(突然想起来我高中竞赛老师说的一句话:数形结合千般好,一旦不做万事休啊! 就是要画图! )在直觉上感受一个数据结构是什么样子的.使用它是什么感觉,抽象上和具体实现上是什么样子的.这就是最重要的事情.并且无论是对于简单的队列,栈还是天杀的平衡树都很重要而且有效.把数据结构画出来,在你的脑袋瓜里面就能想象出来,总之,你需要做的就是,直观的去了解这些数据结构.第二件事.学习什么时候用什么样的数据结构和算法.对于学生来说这很难,而且你要做作业的时候老师也没告诉你们这该怎么办.╮( ̄▽ ̄")╭ 不过没关系. 你要认识到当你真正处理到现实问题的时候或许你才能掌握某些数据结构,比如哈希表.但是即使是个学生,你也应该知道数据结构的实用性:什么时候你需要个哈希表,什么时候你需要个树,什么时候你需要个堆? 而不是一开始就陷入到追求细节中去.One of the questions I ask in Google engineering interviews has a binary search tree as a potential solution (among others). Good candidates can arrive at the binary search tree as the right path in a few minutes, and then take 10-15 minutes working through the rest of the problem and the other roadblocks I toss out. But occasionally I get a candidate who intuitively understands trees and can visualize the problem I'm presenting. They might stumble on the exact algorithmic complexity of some operation, but they can respond to roadblocks without pause because they can visualize the tree. They get it.我在google面试的时候,我经常会问一个可以由二叉树搜索解决的问题. 好的应聘者可以几分钟内就可以想到用二叉树来解决,而且对于我的其他问题也差不多10-15分钟就可以解决.当然,偶尔会有一个应聘者,他能直观的认识树这种结构,而且可以把我的问题形象化,图形化的描述出来.当然他或许对于某些操作的时间复杂度不甚了解,但是对于问题他却可以立马回应,因为他们脑袋里就有这样的树结构啊~所以他也能拿到工作啊.As for a book, there is but one:
by Cormen, Leiserson, Rivest, and Stein, otherwise known as CLRS.至于书嘛,只推荐一本--- &算法导论&If you want another text, perhaps one with more examples in a specific language, I recommend Robert Sedgewick's
or, as appropriate. I prefer CLRS as a text, but you might find these a better teaching aid.如果你想要一本有很多例子并且和语言相关的书的哈u,我就推荐 & &&& 当然我还是更推荐&算法导论&,不过这些也是很好的教辅书啦~
不邀自来。这个问题提得很好,好就好在“本质”两个字。数据结构的本质就在于:如何将现实世界中各种各样的数据放入到内存中,并且如何在内存中操作这些数据,如何评价这些存储方案和操作方法。数据结构难学吗?是难学。为什么难学?一开始上来就讲空间复杂度、时间复杂度,就讲抽象数据,当然难学了。1、生活、生产等现实世界的数据有各种各样的组成形式。例如一个课程的所有学生的成绩(一组数据),一个班全部学生的所有课程的成绩(一张表)、一个单位的人员结构(树)等等。2、这些数据都要先加载到内存中,再送到CPU中进行计算。3、内存的最基本单位叫做存储单元,一个字节(不讨论理论中的、个别情况的)。存储单元相当于一个空盒子,可以放置数据。为了便于管理,盒子会给一个编号,当然存储单元也会有编号,其实就是地址。理论上地址的方案可以有多种(计算机组成原理和操作系统的任务),不过对于程序员来说,这些都跟我们无关,为了简单起见,我们把存储单元的编号(地址)都编成0、1、2、3、4,......这样的,于是这些编号或地址的取值范围,我们就称地址空间。这个地址空间,跟一维坐标轴一样,所以是一维线性空间。4、很明显,数据就是一个个放入到这些存储单元中,就象我们把一个单位的物品放入盒子一样。现在,假设一个盒子只能装入一个单位的物品。因而,一个存储单元也只能放入一个单位的数据。5、接下来,假设说,我们有很多很多的空盒子(X个)。有一天,我们要将若干单位物品(N个)放入盒子中,那么我们可以在一个盒子放入一个单位物品。依此类推,我们可以在一个存储单元中放置一个单位的数据。6、再接下来,我们有两种放置方案:一个挨一个地连续地放置物品;当然,也可以不连续地放置物品。依此类推,在内存当中放置数据,也有两种方案,连续地放置数据,或者不连续地放置数据。为什么会有不连续的放置方案呢?原因很简单,一个主要的原因是,内存的空间利用率高,碎片少(操作系统的存储管理的知识,且不用理会),删除旧有的数据很容易(这个是数据结构的内容)。7、现在,可以把这两个将数据放入到存储单元的方案叫做物理存储。对连续物理存储方案来说,事情比较好办,通过编号(索引、下标)就可以找到物品,对于不连续的方案,那么我们就要在一个物品上面标记下一个物品的位置,这个标记就是下一个物品的地址(指针)。当然,在计算机中,指针的记录本身也要占用内存的存储单元,所以我们在c语言中用结构体把数据和指针组织成为一个单位。通过这个指向关系,我们可以在不连续的放置方案中依次地查找我们所需要的东西(物品或数据)。8、接下来,就象我们经常进行从盒子当中查询物品、取用物品或增加物品等操作一样,我们也要进行从内存当中查询数据、取用(删除)数据或增加数据等操作。那么,对于不同的物理存储方案来说,其方法是不一样的。这个想一想,我们如何对付真实的物品,我们就如何对付内存中的数据。这就是数据的物理存储方案的数据操作。9、好了,搞懂这些,字符串之类的知识点就不难了。10、记住一点,只有两种物理存储结构:连续的和不连续的,因为内存的存储单元的地址(编号)是0、1、2、3......(一维地址空间、或者线性地址空间)。11、是不是只有物理存储结构(方案)就可以了呢?在第1条中说过,现实当中的数据是有各种各样的结构的。而在第10条,我们强调了物理放置方案只有2种:连续的和不连续的。12、于是就产生一个问题,如何将现实世界当中的关系各种各样的数据放入到内存之中。13、解决第12条中的问题,我们可以分两步走,第1步是将现实世界的数据组织成为逻辑结构,第2步再把逻辑结构的数据映射到物理结构中。14、显然,在第1步中,我们抛去数据的其它属性,只留下数据的两个属性就可以了:一个属性是数据的值,另一个属性就是数据之间的关系。这两个属性就得到一个逻辑结构:graph(图),这就是离散数学中的图论。那么,这就是科学家的事情,他们负责针对具体的问题,将现实世界的数据构造出对应的graph(图)。15、在第2步中,我们要做的事情,把这个graph映射到物理存储结构中,这就是数据结构要做的事情了。显然,我们可以用数组来存储,也可以用链表来存储,回忆一下最短路径算法的两个做法。ps.,二维数组、三维数组也是一个连续存储的结构,在c语言debug下,看看地址就知道了。那么,不连续的存储结构,也就是链表,当然有很多的衍生:双向链表、十字链表、等等。16、显然,不管现实世界中的数据之间的关系如何,我们都可以用graph来描述,只不过是,不同的数据关系有不同的结构而已,比如:树、森林、mesh,等等。17、当然,我们要掌握一些常见的graph的操作方法,最主要就是搜索方法。而且还要注意,这些方法是分两个层次的,一个物理存储结构这个层次,一个是逻辑存储结构这个层次的。那么现在,深度优先搜索、广度优先搜索是哪个层次呢?18、当然,我们还要掌握一下存储结构的压缩。19、到了这个时候,我们还要问一下,各种方案的优劣性质如何,也就是空间复杂度和时间复杂度了。20、当然,我们这个时候,还要进一步的问一问,能不能将这些逻辑结构给出一个统一的描述,那么,就是抽象数据了。21、当然,我们还要掌握逻辑存储结构的各种树的优化,特别是针对不同的应用,比如红黑树、B树。22、当然,我们最后还要学习一下外存的存储结构。23、当然,实验是少不了的。自己debug一下内存单元的地址,并且在纸上手工的画一下是最好了。24、最后,有了这些基础,剩下也就好办了。25、不推荐教材。尤其是国外的教材,先容许我默默地吐一下槽,各种知识点零碎不堪,不成体系,不成系统。
分享一下我个人的学习方法,我觉得算是比较简单的一套方法,对智商要求不高。——资料来源:(星星代表我的使用频率)1.教材:★★★★(经典之作,广为人知)★★★(严蔚敏的,就是国内大学常用的那本。严谨,伪代码不错。)★★(语言比较通俗。比第一本简单易懂。btw,作者程杰老师在知乎上也相当活跃)★★(图超多。比第一本简单易懂。)2.慕课:★★★★★浙江大学的:(真的很棒。借雷军的一句广告:我所有的向往。对于每个知识点的视频讲解,基本都涉及了:动画演示、写代码的思路、写代码的技巧、算法优化、算法复杂度分析等等)★★★★★清华大学的:(同样地非常非常非常好。比起浙大的数据结构,难度更深,内容更多。而且听完课以后,不仅知其然,也知其所以然。)3.整个互联网!★★★★★——说明:1.教材这么多本一起用!是的,一起用!对于某个知识点,多翻几本书看看,哪本书讲得好就看哪本。关于这些教材的优缺点,大家都应该很熟悉了。可能有人对严蔚敏的《数据结构》有疑虑,我个人认为这本书的优点是很严谨,而且代码也不错,就是书写得不友好,许多地方没有照顾读者智商(特别是我的智商)。所以,看得懂就好,看不懂就算了,教材反正还有嘛~2.只靠书还是不够的,你需要搜索!比如KMP算法,特别难理解,但是你一搜索,可以发现很多人 在博客上分享他们的理解,讲解详尽,例子丰富,比书上好多了。3.强烈推荐慕课。这两门慕课的老师的讲解都特别棒。首先是易于理解。对于算法概念上的分析讲授,由于是视频,在演示上比书本有先天优势,使得内容很好理解。接着是,视频能够比书本带来更大的信息量,提高了效率。最后是,看视频很明显比看书轻松有趣。4.最后提醒,★需要练习做题★。只是看一遍书和视频,那是远远不够的。本人的题主要来自老师,如果你找不到题,请参考其它答主的回答,或者在我所说的那门慕课里找到做习题的网站。(不得不说,这个做题的网站也很棒。哎呀浙大好棒呀)最后,看完书和视频能懂,只算70%;能写代码能跑,才能算90%5.推荐两个学习小技巧:(1).各个算法都有一些随着过程不断地改变的数组吧?把他们在纸上推导一遍(2).尝试一下手写代码(用word也行)(当然啦,不要求完全正确)。如果这样都能写出来,那肯定掌握了95%+。*********补充一点儿感悟***********按知识点来,一个一个知识点去攻破。不必按部就班地,把某本书从第一章看到第十章,或者把某门课从从头到尾都看。不必这样。对,按照知识点,一个一个来。1.先知道是怎么回事。2.然后使劲理解。3.接着做题检验自己。4.下一个知识点。以知识点为目标,而不是以某本书或某门课为目标。至于这个知识点怎么掌握,可以看书,可以看视频,可以看百科,可以搜高手的教学贴等等。不仅仅是在这个问答里面,在别的很多地方相关的提问,很多答主都直接抛个书名。要我说,一个书名是不够的,得列个书单才行,不仅如此,还有视频单,百科单,甚至仅就一个KMP算法就可以列个分析贴单了233333.....
方法只有一个:敲代码。把《数据结构》里的代码全部实现一遍,把配套的习题集都做一遍,没有学不好的数据结构!!!(图片可放大...)
附上学习数据结构的博客,正在一节一节更新:-------------------------------------------------------------------更新-------------------------------------------------------------------
我要郑重地替这本书辩解:
1.这本书的代码并不是直接可以执行的C代码或者C++代码,而是伪代码,所以你如果照着敲了一遍运行不了,是非常正常的事。
2.打开前言的第1页第三段,可以看到作者说:“全书采用类C语言...尽量考虑C语言的特色”,"本书并未直接采用类和对象等措施,而是从C语言中精选了一个核心子集,并增加C++语言的引用调用参数传递方式等,构成了一个类C描述语言",由此可见,本书中的代码是杂糅了C语言和C++的语法,但以C语言为主的。
3.如何正确运行本书中的程序呢?我的建议是先确定自己擅长使用C语言?还是C++语言?或者是其他种类的语言,然后在看懂算法思路的基础上,使用自己擅长的语言,试着去实现算法过程,而不是生搬硬套。最常见的问题是很多人学了点C又学了点C++,但是又不能正确区分这两种语言,导致写出来的东西一会儿正常,一会儿不正常,检查错误又检查不到,最后学着学着放弃了。
4.书中的个别程序思路并不适合组合在一个完整的工程中,但其算法都是正确的,这一点我验证过,所以,马列主义要活学活用,要根据自己的理解,做适当的变通,只要思路正确、结果正确就行,形式不重要。-----------------------------------------------------------------再更新-----------------------------------------------------------------
目前全书的源码以及配套习题册的解答已更新完毕,个别证明题目留坑待填,或者有看到的网友会解答的话可以交流一下...
补充下目前点赞最多的答案,中文版VisuAlgo网站为
学习数据结构与算法的目的不同,学习的方法不同,当然,最终达到的效果与感情的差距也很明显。如题主所说,如果是为了考试,可以采用应试教育的学习方法,你懂的,就那些题。但我想说的是,对于IT同学来说,学习算法的真正意义与方法。虽然现在越来越多的工具,库已经完全封装了很多底层实现,让更多的程序员是傻瓜式的使用即可,这一方面确实促进了开发效率,但这并不能代表我们不需要去了解算法本身的作用。只有知道某一个组件真正的实现原理(很多时候就会用到算法),才能明白其真正的应用场景,在哪种情况下合适,因为任何算法都有优缺点,都会有一个最佳应用场景和最坏应用场景。特别是对于后端开发,涉及到高并发,大数据处理相关的开发的人来说,算法相当重要,特别是对于性能要求极佳的场景。如果不明白,虽然你能够实现功能,但你永远无法知道如何进行性能调优,无法真正将项目产品化。如何实好算法,其实是多看,多练,多写,最为重要的,就是了解算法的本质,了解的办法无他,练习。当然,我们可以站在别人的肩膀上。如下视频可参照学习。
把书上的例子都自己手动写一遍编译一次,比你光看书强一百倍。相比较于看书上的例子,数据结构更重要是思考和运用
完全没有相关基础的话(比如链表写的也不是很熟练的话)推荐《大话数据结构》入门,代码质量一般(貌似是取自严蔚敏版的教材),但容易入门。有点感觉之后(常见排序算法以及写个stack queue或者简单二叉树感觉没有问题的时候)推荐邓俊辉版数据结构(C++版),感觉少有的讲解详细的国内书籍,重点是不只告诉你知识点之后直接给你代码,而是让你顺着思路逐步把其用途和利弊搞清楚。最后《算法导论》的数据结构部分还是比较简单的,看了这些书之后才发现经典之作就是经典之作。实践方面:学数据结构免不了想造点轮子,可以参考STL的实现,抛去内存管理和迭代器的部分只看实现的话还是很容易从中学到东西的。 从vector、list到 hashtable 到红黑树等都有。等你裸写平衡树以及图论的几个经典算法之后基本上数据结构就okay了。
已有帐号?
无法登录?
社交帐号登录

我要回帖

更多关于 一分钟学会bigbang 的文章

 

随机推荐