为什么要学习算法与数据结构?
1.面试:
这个应对面试考察算法与数据结构是很普及的。特别是有在一线大厂或者一些核心岗位的面试经历的朋友肯定也能感知的。
尤其是现在it寒冬的情况下,特别是工作经验3年+以上的程序员往往在跳槽时,会特别的有感触。
是的,我们从面试层面考虑,学习算法与数据结构是完全有必要的。
2.编程“内功”的提升:
主要是针对源码学习上的,因为我们大多数刚毕业的或者3年以下的程序员在公司主要的任务都是在写业务代码,而且写业务代码的过程基本上是套用了各种框架或者库来完成的。这样子就导致了我们日常的开发中很少的接触到核心代码或者是底层算法与数据结构。
比如说:ArrayList vs LinkedList,TreeSet vs HashSet 这些是我们实际开发中会接触到的,但是我们是否有底层的数据结构上去考虑他们的适用场景以及他们的差异呢?
有或者说:当我们学习了算法与数据结构后, 我们能写出更高效优雅的代码。像redis是一个内存数据库,它主要包含的数据类型有:String, List, Set, SortedSet, Hash。Netty: 优先队列、堆。数据库:B+树。LevelDB/Hbase: skipList等等。它们的数据结构是怎么实现的呢?什么情况下使用?我们都必须要对他底层进行深入的了解。有句话,知己知彼百战不殆。
以上呢,就是我们从编程“内功”的提升考虑,学习算法与数据结构是我们提高个人技术的必通之路。
什么是算法与数据结构?
1.算法(Algorithm)
In mathematics and computer science, an algorithm is an unambiguous specification of how to solve a class of problems . Algorithms can perform calculation, data processing and automated reasoning tasks.
对特定问题求解步骤的一种描述,是旨在解决特定问题的有限指令序列。
(5个特性:输入、输出、确定性、可行性、有穷性)
算法无处不在…….
基础算法:排序、树遍历、…….
算法思想:分治算法、贪心算法、动态规划、递归、…….
各领域的算法:语音识别算法 、图形学算法 、计算机视觉算法、机器学习算法、数据挖掘算法、推荐算法、人工智能、…….
2.数据结构
在计算机科学中,数据结构是计算机中存储、组织数据的方式。
常用的数据结构:
线性结构:数组、链表、栈、队列、哈希表、…….
树结构:二叉树、二叉搜索树、堆、平衡二叉树(AVL、红黑树等)、并查集、字典树(Trie)、…….
图结构:邻接矩阵、邻接表、…….
3.程序 = 数据结构 + 算法
数据结构是算法的基石
算法围绕数据结构进行操作
如何学习算法与数据结构?
多思考:仔细琢磨,弄清原理
多练习:
(1)自己手动实现各种数据结构;
(2)多“刷题”(Leetcode, lincode)【刷题系统 – Leetcode (Online Judge):难易适中,常见面试问题】。
循序渐进:不要想一口吃成胖子
相关书籍:
《大话数据结构》
《啊哈!算法》
《数据结构和算法分析-Java语言描述》
《算法导论》
《算法(第4版)》
《编程珠玑》
《编程之美》
《计算机程序设计艺术》高纳德
……
课程组织
介绍最常用的数据结构和算法:
数组、链表、栈、队列、散列表、二叉树、堆、并查集、Trie 树、图
递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、基本图算法
注重应用
不强调理论证明
每个知识点+适当的练习