如何学好数据结构和算法

数据结构和算法是计算机科学中最重要的课程,作为一名Google的软件工程师,我经常看到一些求职者或刚毕业的学生,他们对于数据结构和算法的学习是远远不够的。这不是说他们看的书是有问题的,或教授们教错了内容,而是学生对这个课程的理解是不到位的。

扎实掌握数据结构和算法的关键并不是要对每一种数据结构和它的子形式都做详尽的调查,然后记住它们的时间复杂度和空间复杂度。记住这些看起来很棒,也很吸 引人,但说实话,你在实际中很少会用到它们。不管怎样,在你的职业生涯中都不会让你实现一个红黑树结点删除的算法,但是,你必须要做到而且轻松的发现在什 么时候你需要用二叉搜索树来解决问题,这个是你经常要用到的技能。

所以,停止背诵那些没用的东西吧,从现在开始学好下面这两件基本并且重要的事情:

1.形象化数据结构。直观的理解某种数据结构是什么样的,使用起来是什么样的,在抽象和实际的内存中是如何存储的。这是一件单独的并且很重要的事情,从最简单的栈和队列到很复杂的平衡树。你可以把它们画出来,直观地展现在你脑海里,无论你用什么方式,最重要的就是你要直观地去理解。

2.知道在自己的代码中何时,并如何去使用这些不同的数据结构和算法。这一点对于学生来说可能有 点难,因为在他们的作业中不需要思考这些。没有关系,你以后会意识到如果你不参加一个实际的项目,你就永远不会理解数据结构,你也不会发现哈希算法是你解 决性能问题的方法。但是,即使是学生,你也应该学习一些实用性强的内容,比如什么时候用哈希表?什么时候用树结构?什么时候最小堆是最好的解决方案?

在Google面试时,我会问一个可以把二叉搜索树作为潜在答案的问题,一个较好的回答可以在几分钟后就可以想到二叉搜索树,并顺着它用10-15分钟去 解决那些我设置的问题,最终得出答案。但是有一次,我遇到了一个更优秀的面试者,他很形象地理解了树的概念,可以直观地把我的问题展现出来,他可能会被算 法精确的复杂度卡住,但是他可以一直在解决问题,因为他做到了把“树结构”直观的展现出来。他最终也得到了这个职位。

PHP100中文网也希望大家在学习数据结构和算法时,专注于理解并运用它们,而不是仅仅背诵算法的内容和复杂度。

原文:http://www.quora.com/How-do-I-strengthen-my-knowledge-of-data-structures-and-algorithms/answer/Robert-Love-1 译文:http://www.php100.com/html/it/focus/2014/1028/7639.html

原文发布于微信公众号 - php(phpdaily)

原文发表时间:2016-07-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ThoughtWorks

《面向对象的思考过程》应该是怎样的?

作者:Matt Weisfeld 仅学习一种特定的开发方法、一种编程语言或者一组设计工具并不能说明学会了“面向对象”这一概念。简单来说,以面向对象方式编程就是一...

3728
来自专栏Python绿色通道

程序员最想拥有的编程语言,Python排第一!

根据 PYPL 发布的 7 月编程语言指数榜,Python 保持上涨趋势,8月流行指数再次上涨 5.5%,以 23.59% 的份额甩开 Java 排名第一,并逐...

1062
来自专栏企鹅号快讯

C语言到底有多牛!你知道多吗?

有人说C语言是世界上最牛逼的语言,因为操作系统就是用C语言编写的,学好了C才能更好的学习其他编程语言。为此,有人分享了下面一段代码,说是很牛逼的c语言代码,看得...

42310
来自专栏web前端教室

算法--天下武功,唯快不破

我只写JS,为什么也要学习算法? 我入行最开始时是做网页设计的,那是在2003年, 然后一路到了现在,... 所以做为读者的你应该已经明白,我是一个野路子出身的...

2005
来自专栏编程心路

从王者荣耀看设计模式-策略模式(java版)

曾经我也是一名玩农药的大学生,但现在已经弃了,别问我为什么(被坑爹队友坑的哭。。。)。而今天我们来把让农药变荣耀,我们来从王者荣耀中看设计模式的策略模式。

1015
来自专栏钱塘大数据

一文总结学习 Python 的 14 张思维导图

大数据时代,数据是智能世界的土壤,发达的数据文明孕育于此之上。但大数据只是一种资源,它告知信息但不解释,只有学会深耕这片土地,真正挖掘到深埋土壤之下的数据金矿,...

4588
来自专栏Crossin的编程教室

编程新手:看懂很多示例,却依然写不好一个程序

最近在和学员的沟通中,发现不少初学者面临这样一个问题:了解了一些基本的语法,看得懂书上的示例,但是面临一个新的编程问题时,依然感到无从下手。究其原因,主要是两个...

2775
来自专栏java一日一条

程序员才看得明白的面试圣经

除了直接申请面试以外,一般说来,还有两种途径来获得面试的机会:由现在的雇主推荐,或者通过LinkedIn。虽然前者会快一些、更尊敬一些,但后者很可能是大部分应聘...

841
来自专栏小詹同学

排名第 1 ,Python 到底有什么魔力 !?

根据 PYPL 发布的 7 月编程语言指数榜,Python 保持上涨趋势,8月流行指数再次上涨 5.5%,以 23.59% 的份额甩开 Java 排名第一,并逐...

2095
来自专栏程序人生 阅读快乐

C语言程序设计_现代方法

时至今日, C语言仍然是计算机领域的通用语言之一,但今天的 C语言已经和最初的时候大不相同了。本书最主要的一个目的就是通过一种“现代方法”来介绍 C语言,书中强...

932

扫码关注云+社区