数据结构和算法是计算机科学中最重要的课程,作为一名Google的软件工程师,我经常看到一些求职者或刚毕业的学生,他们对于数据结构和算法的学习是远远不够的。这不是说他们看的书是有问题的,或教授们教错了内容,而是学生对这个课程的理解是不到位的。
扎实掌握数据结构和算法的关键并不是要对每一种数据结构和它的子形式都做详尽的调查,然后记住它们的时间复杂度和空间复杂度。记住这些看起来很棒,也很吸引人,但说实话,你在实际中很少会用到它们。不管怎样,在你的职业生涯中都不会让你实现一个红黑树结点删除的算法,但是,你必须要做到而且轻松的发现在什么时候你需要用二叉搜索树来解决问题,这个是你经常要用到的技能。
所以,停止背诵那些没用的东西吧,从现在开始学好下面这两件基本并且重要的事情:
1.形象化数据结构。直观的理解某种数据结构是什么样的,使用起来是什么样的,在抽象和实际的内存中是如何存储的。这是一件单独的并且很重要的事情,从最简单的栈和队列到很复杂的平衡树。你可以把它们画出来,直观地展现在你脑海里,无论你用什么方式,最重要的就是你要直观地去理解。
2.知道在自己的代码中何时,并如何去使用这些不同的数据结构和算法。这一点对于学生来说可能有点难,因为在他们的作业中不需要思考这些。没有关系,你以后会意识到如果你不参加一个实际的项目,你就永远不会理解数据结构,你也不会发现哈希算法是你解决性能问题的方法。但是,即使是学生,你也应该学习一些实用性强的内容,比如什么时候用哈希表?什么时候用树结构?什么时候最小堆是最好的解决方案?
在Google面试时,我会问一个可以把二叉搜索树作为潜在答案的问题,一个较好的回答可以在几分钟后就可以想到二叉搜索树,并顺着它用10-15分钟去解决那些我设置的问题,最终得出答案。但是有一次,我遇到了一个更优秀的面试者,他很形象地理解了树的概念,可以直观地把我的问题展现出来,他可能会被算法精确的复杂度卡住,但是他可以一直在解决问题,因为他做到了把“树结构”直观的展现出来。他最终也得到了这个职位。