如何学习数据结构和算法(初学者终极指南)
原文:https://www.coderscat.com/how-to-learn-data-structures-and-algorithms
心态
正如我之前的文章所阐述的,数据结构和算法是程序员的终极基础。我坚信,对这两个主题的充分了解也是成为一名优秀程序员的关键,因为对算法和数据结构有深入理解的工程师能够做出深思熟虑的选择,编写出能够更好地应对变化、性能卓越的程序。
我来,我征服
有些初学者一开始会灰心丧气,感到沮丧,觉得数据结构和算法很抽象、晦涩难懂。
别担心,对于初学者来说,这很正常。我刚开始学习的时候也有同样的感受。真正的原因是你没有找到适合自己的学习方法,也没有建立起自信。这是我给你的路线图和建议,保持耐心,继续前进。
不要害怕数学部分。
数据结构和算法确实涉及一些数学推理和证明,尤其是在分析算法的时间和空间复杂度时。
大O复杂度分析很重要,但你不用太担心。你不需要很高的智商或抽象的数学知识。只要你有高中数学水平就可以掌握它。
经过数月的练习和学习,您将会更加自信。
数据结构和算法本质上是什么?
一般来说,数据结构是一组数据的存储结构,算法是解决问题的方法和模式。
我将通过例子来帮助你理解这两个概念。
举个例子
如何从图书馆找到一本书?
-
方法 1:您可以逐一检查每本书,直到找到想要的
书。 -
方法二:可以先根据
书的类别定位到书架,无论是人文、理科、还是计算机科学,
然后在特定的书架中搜索。
通俗的讲,这两种找书的方法都是算法,所以我们得出算法的定义是:解决问题的方法,可以用编程来实现。
具体来说,当我们谈论数据结构和算法时,我们谈论的是队列、堆栈、堆、二分查找、动态规划等等。
这些是计算机先驱们发明的抽象和解决问题的模式。我们可以有效地学习它们,并利用它们解决许多实际的开发问题。
数据结构与算法的关系
数据结构和算法是相辅相成的。数据结构是为了算法而生的,算法又应用于具体的数据结构。因此,我们不能把数据结构和算法割裂开来。
例如,由于数组具有随机访问的特性,常用的二分查找算法就需要用数组来存储数据。但如果我们选择像链表这样的数据结构,二分查找算法就无法工作,因为链表不支持随机访问。
步骤
获取优质书籍和资源
有一些非常好的数据结构和算法教科书,但一开始,你可能需要用你掌握的编程语言编写的书籍。
- C:算法是你的选择
- Java:Java 数据结构和抽象
- Python:使用 Python 算法和数据结构解决问题
可视化将帮助您了解数据结构和算法的工作原理,您可以从网站 visualgo.net 找到此类精彩动画。
学习基础数据结构
很多高级数据结构和算法,比如二分图、最大流等等,在我们平时的开发中很少用到,所以一开始就没必要去看。
以下是供您入门的 11 种基本数据结构:
array, linked list, stack, queue, hash table,
map, heap, binary tree, trie tree,
graph, skip list
您应该学习这些数据结构 API 以及它们的操作的复杂性。
GeeksforGeeks总结了很多数据结构的好实践。
学习基本算法设计模式
从我的经验来看,学习算法不应该试图记住算法的步骤和细节,而应该尝试自己重新发明、推理和重新实现算法。
为什么?
如果你不理解它的工作原理,你就无法记住细节,以后也会忘记。算法中隐含的思想比细节更重要。
我推荐的学习经典算法的流程是:
重复这个过程将使你学习得更有效率。
最常用的算法都属于这些类别,一些较难的问题需要一些变体,您需要结合几种算法来解决一个问题。
遵循刻意练习的原则,你应该在短时间内专注于一个特定的类别,尝试一个接一个地学习它们:
sorting, binary search, search, string matching, recursion,
hash algorithm, greedy algorithm,
divide and conquer algorithm, backtracking algorithm,
dynamic programming
边做边学
有很多网站可以用于刻意练习数据结构和算法,我推荐这两个,它们都包含出色的在线评判系统:
- Leetcode:包含了几乎所有大公司(如Facebook,Google,Amazon)经常问的面试问题,它是一个非常有用的面试资源。
- HackerRank:数据结构和算法分类清晰,甚至涵盖数学、数据库和安全相关的问题。你还可以参加编程竞赛,享受乐趣。
另一个好的做法是使用一种特定的数据结构或算法完成一些简单的项目。
例如,这个项目创建了一个使用“并集”数据结构的迷宫,并尝试实现寻路算法。完成这类项目可以增强你的自信心,并让你意识到它在创建实际应用方面非常有用。
深入了解
更多书籍
《算法导论》第 3 版适合您更深入地学习,算法推理部分非常精彩,并且还包含有关复杂性分析和数学工具的更多详细信息。
最后一本书是《计算机编程艺术》,很少有程序员能读完这本书。这是一本让你深入学习的终极权威参考书,几乎涵盖了编程的方方面面,尤其是数据结构和算法。
从真实项目中学习
知识和技能只有应用到产品中才能证明其价值。
您可以从现有的产品和应用程序中学到很多东西。
例如,您是否好奇 Google 的搜索建议使用了什么数据结构或算法?
一些优秀的开源项目将成为你学习最有用的资源。
Redis包含许多常用的数据结构,并在性能上进行了许多优化。Linux 内核也使用了许多数据结构,例如链表、红黑树、哈希等。
经过多年的实践,数据结构将成为您的抽象工具,算法设计将成为您解决问题的自然模式。
保持好奇心并实践!
文章来源:https://dev.to/snj/how-to-learn-data-structs-and-algorithms-an-ultimate-guide-for-beginners-2h9c