提高你的算法和数据结构技能
基础知识
想要精通算法和数据结构,首先需要的是扎实的基础。您可以通过多种方式学习,例如大学的计算机科学课程、一些侧重以下主题的编程训练营,或者您也可以通过书籍、视频或在线讲座自学。因此,您需要对以下主题有基本的了解才能开始学习:
数据结构
了解数组、链表、二叉树、哈希表、图、堆栈、队列、堆和其他基本数据结构。
计算机体系结构
学习数据在计算机中的表示方式、数字逻辑设计基础、布尔代数、计算机算术、浮点表示、缓存设计。尝试学习一些 C 语言和汇编语言编程。
超越基本面
一旦你觉得自己对上面列出的大部分概念有了很好的理解,就可以开始深入研究算法部分了。以下是我为提高编写和理解重要算法的能力而做的一些资源和实践。
Big-O 和运行时
-
了解什么是 Big-O 以及如何分析算法的运行时间。这是一本关于该主题的经典书籍(这里是关于函数增长的章节)。
-
这里有一个教授算法的在线课程列表。
自己实现一些算法
首先自己实现几个重要的算法,并了解它们的运行时间。以下是一些示例:
算法书籍
挑战
- 在Coderbyte等网站上练习编写简单算法,然后编写更高级的算法,这些网站提供解释和解决方案,以便您也可以向其他程序员学习。
- 完成这个交互式Python 算法网站上的挑战。
- 2018 年最受欢迎的 10 个编码挑战网站。
- 对于初学者来说最难的 5 个代码挑战。
算法解释和面试题
- 在GeeksforGeeks上尽可能多地阅读算法解释和代码示例。这里有一篇关于图算法的优秀文章。
- 看看CareerCup上发布的一些面试题,试着了解其他用户是如何解答这些问题的。比如这个例子。
- 除了编码挑战网站之外,还可以尝试解决您在网上找到的常见编码面试问题,例如此列表中的问题。
动态规划
如果你想提高算法水平,你必须理解这个非常重要的概念,这也是我将这个主题与其他主题分开的原因。维基百科对此的描述如下:
一种解决复杂问题的方法,即将复杂问题分解为一系列更简单的子问题,每个子问题只需求解一次,并存储它们的解。下次遇到相同的子问题时,只需查找之前计算出的解,无需重新计算,从而节省计算时间。
我在参加过的几次编程面试中都见过动态规划的身影。我也在LeetCode、Google Code Jam等挑战网站上看到过需要动态规划解题的题目, Google Foo Bar上的几场挑战赛也要求用动态规划解题。
我建议你尽可能多地尝试解决这个列表中的问题。TopCoder 上也有一个很棒的教程,标题是:动态规划——从入门到高级。很多动态规划问题都有相同的结构和模式,所以如果你每天解决 3 个动态规划问题,坚持两周左右,一段时间后你就能轻松识别并解决一个动态规划问题。
算法高级资源(可选)
- Erik Demaine 的高级数据结构讲座
- 算法下界: Erik Demaine 的《硬度证明的乐趣》
- 竞技程序员手册
- 《编程竞赛的漫游指南》
- AlgoWiki:一个致力于竞技编程的维基百科
- 开放数据结构书籍:序列、队列、优先级队列、无序字典、有序字典和图形的数据结构的实现和分析
希望你喜欢这份资源列表。欢迎在Coderbyte上练习编程,并在下方评论区分享你认为有用的其他资源。
本文最初发表于Medium。
文章来源:https://dev.to/coderbyte/improving-your-algorithms-data-struct-skills-2odo