数据结构与算法 - 概述
# 数据结构与算法 - 概述
# 学习目的
学习数据结构和算法的目的
- 面试中经常考察基础知识数据结构和算法,相比短期能力,面试官更看中长期潜力
- 实际工作中,除了要会数据库的 CRUD,利用已经封装好的现成接口、类库来堆砌、翻译业务逻辑,还需要知道类库背后的原理,而不懂时间、空间复杂度,也就无法正确使用它们。如在存储某个业务数据的时候,如何知道应该用 ArrayList,还是 LinkedList,调用某个函数后,该如何评估代码的性能和资源的消耗?
- 掌握数据结构和算法,不管对于阅读源码,还是理解其背后的设计思想,都是非常有用的。如我们常用 Key-Value 数据库 Redis 里面的有序集合使用什么数据结构来实现?为什么要用调表来实现呢?为什么不用二叉树?
- 建立时间和空间复杂度意识,写出高质量代码,能够设计基础架构,提升编程技能,训练逻辑思维
比如:实时统计业务接口的 99% 响应时间:
在不了解数据结构情况下,可能最先想到的是,每次查询时,从小到大排序所有的响应时间,如果总共有 1200 个数据,那第 1188 个数据就是 99% 的响应时间。每次查询都需要排序,效率非常低。但如果知道“堆”这个数据结构,用两个堆可以非常高效地解决这个问题。
# 什么是数据结构?什么是算法?
数据结构是指一组数据的存储结构,算法就是操作数据的一组方法。如图书馆书籍分门别类进行存放,按照一定规律编号,就是数据这种“数据”的存储结构。
而如果要找一本书?通常先根据书籍类别的编号,是人文、科学、计算机等来定位书架,然后再一次查找,笼统地说这些查找方法都是算法。
数据结构是为算法服务的,算法要作用在特定的数据结构之上。如因为数组具有随机访问的特定,常用的二分查找算法需要用数组来存储数据,但如果选择链表这种数据结构,二分查找就无法工作,因为链表并不支持随机访问。
# 学习重点
复杂度分析:数据结构和算法解决的是如何更省、更快的存储和处理数据的问题,而考量效率和资源消耗的方法,就是复杂度分析方法。
需掌握常用的、最基础数据结构与算法
10 个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树
10 个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法
上次更新: 2024-08-19