写点什么

「 数据结构与算法 」如何系统性的学习数据结构与算法

作者:小刘学编程
  • 2023-02-15
    陕西
  • 本文字数:1448 字

    阅读完需:约 5 分钟

「 数据结构与算法 」如何系统性的学习数据结构与算法

一. 确定学习目标

  • 知道有哪些常用的数据结构和算法

  • 能够写出高性能的底层轮子

  • 知道如何进行复杂度分析、性能分析

  • 通过不断训练,具备“算法思维”,提高分析和解决实际问题的能力

  • 能够自如地应付大厂面试

二. 制定学习路线

(1)入门


  • 知道数据结构和算法是什么

  • 复杂度分析和大 O 表示法

  • 稳定性


(2)基础


  • 结合具体的示例,学习各种常用的数据结构和算法

  • 知道各常用数据结构的优缺点

  • 知道分析各常用算法的复杂度


(3)进阶、高级


  • 不太常用的、比较高级的数据结构和算法,比如红黑树等


(4)实战


  • 研究各经典开源项目中数据结构和算法的使用

三. 明确学习要点

  • 不要死记硬背算法实现,你应该试着去理解不同的数据结构、算法的原理是什么,它们是怎么来的,是如何解决不同的问题的

  • 分析时间和空间复杂度,知道各个算法和数据结构的优点、缺点是什么,以及适用于解决什么问题,什么情况下更适合采用哪种算法和数据结构

  • 算法思想才是更重要的,比如:分而治之、动态规划、贪婪算法等,学习算法思想可以帮你更好地理解算法之间的快慢差异,并学会在算法对时间和空间的使用上做出平衡

  • 尝试把数据结构图形化,视觉化

  • 一定要自己动手实现一遍

  • 学到的知识需要时间慢慢消化、沉淀,不要试图一下子就全部掌握,学习本身就是反复迭代和不断思考的过程。如果学习过程中遇到挫败感,想想“书读百遍其义自见”这句话,可以先跳过这部分理解不了的,后面回过头再学习

学习重点(学什么)

想要学习数据结构与算法,最重要的概念是---复杂度分析,必须熟练拿下,否则数据结构与算法等于没学; 我们在学习数据结构的时候都有哪些内容:

链表

  • 链表

  • 双向链表

哈希表/散列表 (Hash Table)

  • 散列函数

  • 碰撞解决

字符串算法

  • 排序

  • 查找

  • BF 算法

  • KMP 算法

  • BM 算法

  • 正则表达式

  • 数据压缩

  • 二叉树

  • 二叉查找树

  • 伸展树(splay tree 分裂树)

  • 平衡二叉树 AVL

  • 红黑树

  • B 树,B+,B*

  • R 树

  • Trie 树(前缀树)

  • 后缀树

  • 最优二叉树(赫夫曼树)

  • 二叉堆 (大根堆,小根堆)

  • 二项树

  • 二项堆

  • 斐波那契堆(Fibonacci Heap)

图的算法

  • 图的存储结构和基本操作(建立,遍历,删除节点,添加节点)

  • 最小生成树

  • 拓扑排序

  • 关键路径

  • 最短路径: Floyd,Dijkstra,bellman-ford,spfa

排序算法

交换排序算法

  • 冒泡排序

  • 插入排序

  • 选择排序

  • 希尔排序

  • 快排

  • 归并排序

  • 堆排序

线性排序算法

  • 桶排序

查找算法

  • 顺序表查找:顺序查找

  • 有序表查找:二分查找

  • 分块查找: 块内无序,块之间有序;可以先二分查找定位到块,然后再到中顺序查找

  • 动态查找: 二叉排序树,AVL 树,B- ,B+ (这里之所以叫 动态查找表,是因为表结构是查找的过程中动态生成的)

  • 哈希表: O(1)

15 个经典基础算法

  • Hash

  • 快速排序

  • 快递选择 SELECT

  • BFS/DFS (广度/深度优先遍历)

  • 红黑树 (一种自平衡的二叉查找树

  • KMP 字符串匹配算法

  • DP (动态规划 dynamic programming)

  • A*寻路算法: 求解最短路径

  • Dijkstra:最短路径算法 (八卦下:Dijkstra 是荷兰的计算机科学家,提出”信号量和 PV 原语“,"解决哲学家就餐问题",”死锁“也是它提出来的)

  • 遗传算法

  • 启发式搜索

  • 图像特征提取之 SIFT 算法

  • 傅立叶变换

  • SPFA(shortest path faster algorithm) 单元最短路径算法

海量数据处理

  • Hash 映射/分而治之

  • Bitmap

  • Bloom filter(布隆过滤器)

  • Trie 树

  • 数据库索引

  • 倒排索引(Inverted Index)

  • 双层桶划分

  • 外排序

  • simhash 算法

  • 分布处理之 Mapreduce

算法设计思想

  • 迭代法

  • 穷举搜索法

  • 递推法

  • 动态规划

  • 贪心算法

  • 回溯

  • 分治算法

常见算法问题分类

  • 字符串

  • 堆和栈

  • 链表

  • 数值问题

  • 数组和数列问题

  • 矩阵问题

  • 二叉树

  • 海量数据处理

  • 智力思维训练

  • 系统设计


致谢

莫笑少年江湖梦,谁不少年梦江湖.

本篇内容参考自互联网及开源社区,感谢前人的经验、分享和付出,让我们可以有机会站在巨人的肩膀上眺望星辰大海!


发布于: 刚刚阅读数: 3
用户头像

后端工程师@代码都困了💤 2023-02-07 加入

啊呜(゚▽゚)/ . Talk is cheap (‾◡◝) ! , show me your code ! ヾ(๑╹◡╹)ノ"

评论 (1 条评论)

发布
用户头像
感谢阅读此文,公众号搜索「 重载 」"chóng zài" 并关注,不定期分享Java相关技术栈资料、后端硬核技术干货、实用笔试面试题。您的每次阅读、每个点赞、每条评论都会激励到博主,持续输出优质内容!啊呜(゚▽゚)/ . Talk is cheap (‾◡◝) ! , show me your code ! ヾ(๑╹◡╹)ノ"
刚刚 · 陕西
回复
没有更多了
「 数据结构与算法 」如何系统性的学习数据结构与算法_Java_小刘学编程_InfoQ写作社区