一文教你提高算法和数据结构技能

2017年12月19日 由 yining 发表 665140 0
一文教你提高算法和数据结构技能

如果你想在算法和数据结构上做得更好,你首先需要做的就是建立一个坚实的基础。这个基础可以通过多种方式学习,通过大学的计算机科学课程,或者参加一些编程训练营,当然,你也可以从书本、视频或者在线课程中学习。但首先,你需要对以下主题有一个基本的了解:


数据结构
了解数组、链表、二叉树、散列表、图表、堆栈、队列、堆和其他基本数据结构。


数学和逻辑
如果你想在算法上表现出色,你需要从几个不同的领域了解一些数学概念。学习集合论,有限状态机(finite-state machine),正则表达式,矩阵乘法,位运算(bitwise operation),解线性方程,重要的组合学概念,如排列,组合,鸽巢原理。


计算机体系结构
学习数据如何在计算机中表示,数字逻辑设计的基础,布尔代数,计算机运算,浮点表示,缓存设计。试着学习一些关于C语言和Assembly编程的知识。


一旦你觉得你对上面列出的大多数概念有了很好的理解,就该开始进入算法部分了。这里列出了一些理解重要算法方面的资源和建议。


一文教你提高算法和数据结构技能         一文教你提高算法和数据结构技能      一文教你提高算法和数据结构技能


从算法设计手册中获取的页面内容




大O符号&运行时间


学习大O符号是什么,以及如何分析算法的运行时间。你可以看看“Introduction to Algorithms”这本书。




下面的链接中列出了一些教授算法的在线课程:




通过你自己实现一些算法
首先,你要自己实现几个重要的算法,然后学习它们的运行时间。下面是一些例子:




  • 二分法检索

  • 欧几里德算法

  • 深度和广度优先搜索

  • Dijkstra的最短路径算法

  • 二叉树遍历

  • 插入排序、归并排序、快速排序

  • 最小堆和最大堆


学习算法的书籍

挑战
在诸如Coderbyte和HackerRank这样的网站上编写简单的代码,然后进行更高级的算法,这样你就可以从其他程序员那里学习到一些解决方案。

1. 一个交互式的python算法网站:http://interactivepython.org/runestone/static/pythonds/index.html
2. 10个2017年最受欢迎的编码挑战网站:https://medium.freecodecamp.org/the-10-most-popular-coding-challenge-websites-of-2016-fb8a5672d22f
3. 对于初学者来说,5个最难的代码挑战:https://medium.com/coderbyte/the-5-hardest-code-challenges-for-beginners-e410da4474b

算法解释和面试会遇到的问题
你可以在GeeksforGeeks上阅读尽可能多的算法说明和代码示例。这是一个关于图形算法例子的好贴子。

看看在CareerCup中发布的一些面试问题,试着了解其他用户是如何解决这些问题的。

除了编码挑战网站,试着解决你在网上找到的常见的编码面试问题,这有一个列举出问题的表单。地址如下:

动态规划(Dynamic Programming)
这是一个非常重要的概念,如果你想要在算法上做得更好,你需要理解它,这就是我将这个主题与其他部分分离的原因。维基百科的描述是:


“一种解决复杂问题的方法,将其分解成更简单的子问题集合,解决每一个子问题,并存储它们的解决方案。下一次同样的子问题发生时,我们不再重新计算它的解决方案,而是简单地查找先前计算的解决方案,从而节省了计算时间。”


在我的几次编程面试中,我遇到了动态编程的问题。我还遇到过一些问题,需要在诸如LeetCode、Google Code Jam之类的挑战网站上使用动态编程解决方案,以及在Google Foo Bar上遇到的一个DP解决方案的几种挑战。









TopCoder上也有一个很好的教程:“动态编程——从新手到高手。”上面有很多相同结构和模式的DP问题,如果你每天解决3个DP问题,持续2个星期左右,过一段时间你就能很轻松地发现和解决一个DP问题。




算法问题中的高级资源(可选)



我希望你喜欢这份资源列表。你可以在Coderbyte上自由地练习编码,并在上面发表任何你认为有用的资源。
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消