数据结构与算法之美学习笔记:《数据结构与算法之美》学习指导手册

目录

  • 前言

前言

在这里插入图片描述
本节课程思维导图:

在这里插入图片描述
在设计专栏内容的时候,为了兼顾不同基础的同学,我在内容上做到了难易结合,既有简单的数组、链表、栈、队列这些基础内容,也有红黑树、BM、KMP 这些难度较大的算法。但是,对于初学者来说,一下子面对这么多知识,可能还是比较懵。

我觉得,对于初学者来说,先把最简单、最基础、最重要的知识点掌握好,再去研究难度较高、更加高级的知识点,这样由易到难、循序渐进的学习路径,无疑是最合理的。

基于这个路径,我对专栏内容,重新做了一次梳理,希望给你一份具体、明确、有效的学习指导。我会写清楚每个知识点的难易程度、需要你掌握到什么程度、具体如何来学习。

如果你是数据结构和算法的初学者,或者你觉得自己的基础比较薄弱,希望这份学习指导,能够让你学起来能更加有的放矢,能把精力、时间花在刀刃上,获得更好的学习效果。

下面,我先给出一个大致的学习路线。

在这里插入图片描述
现在,针对每个知识点,我再给你逐一解释一下。我这里先说明一下,下面标记的难易程度、是否重点、掌握程度,都只是针对初学者来说的,如果你已经有一定基础,可以根据自己的情况,安排自己的学习。

  1. 复杂度分析

尽管在专栏中,我只用了两节课的内容,来讲复杂度分析这个知识点。但是,我想说的是,它真的非常重要。你必须要牢牢掌握这两节,基本上要做到,简单代码能很快分析出时间、空间复杂度;对于复杂点的代码,比如递归代码,你也要掌握专栏中讲到的两种分析方法:递推公式和递归树。

对于初学者来说,光看入门篇的两节复杂度分析文章,可能还不足以完全掌握复杂度分析。不过,在后续讲解每种数据结构和算法的时候,我都有详细分析它们的时间、空间复杂度。所以,你可以在学习专栏中其他章节的时候,再不停地、有意识地去训练自己的复杂度分析能力。

难易程度:Medium

是否重点:10 分

掌握程度:在不看我的分析的情况下,能自行分析专栏中大部分数据结构和算法的时间、空间复杂度

  1. 数组、栈、队列

这一部分内容非常简单,初学者学起来也不会很难。但是,作为基础的数据结构,数组、栈、队列,是后续很多复杂数据结构和算法的基础,所以,这些内容你一定要掌握。

难易程度:Easy

是否重点:8 分

掌握程度:能自己实现动态数组、栈、队列

  1. 链表

链表非常重要!虽然理论内容不多,但链表上的操作却很复杂。所以,面试中经常会考察,你一定要掌握。而且,我这里说“掌握”不只是能看懂专栏中的内容,还能将专栏中提到的经典链表题目,比如链表反转、求中间结点等,轻松无 bug 地实现出来。

难易程度:Medium

是否重点:9 分

掌握程度:能轻松写出经典链表题目代码

  1. 递归

对于初学者来说,递归代码非常难掌握,不管是读起来,还是写起来。但是,这道坎你必须要跨过,跨不过就不能算是入门数据结构和算法。我们后面讲到的很多数据结构和算法的代码实现,都要用到递归。

递归相关的理论知识也不多,所以还是要多练。你可以先在网上找些简单的题目练手,比如斐波那契数列、求阶乘等,然后再慢慢过渡到更加有难度的,比如归并排序、快速排序、二叉树的遍历、求高度,最后是回溯八皇后、背包问题等。

难易程度:Hard

是否重点:10 分

掌握程度:轻松写出二叉树遍历、八皇后、背包问题、DFS 的递归代码

  1. 排序、二分查找

这一部分并不难,你只需要能看懂我专栏里的内容即可。

难易程度:Easy

是否重点:7 分

掌握程度:能自己把各种排序算法、二分查找及其变体代码写一遍就可以了

  1. 跳表
    对于初学者来说,并不需要非得掌握跳表,所以,如果没有精力,这一章节可以先跳过。

难易程度:Medium

是否重点:6 分

  1. 散列表

尽管散列表的内容我讲了很多,有三节课。但是,总体上来讲,这块内容理解起来并不难。但是,作为一种应用非常广泛的数据结构,你还是要掌握牢固散列表。

难易程度:Medium

是否重点:8 分

掌握程度:对于初学者来说,自己能代码实现一个拉链法解决冲突的散列表即可

  1. 哈希算法

这部分纯粹是为了开拓思路,初学者可以略过。

难易程度:Easy

是否重点:3 分

掌握程度:可以暂时不看

  1. 二叉树

这一部分非常重要!二叉树在面试中经常会被考到,所以要重点掌握。但是我这里说的二叉树,并不包含专栏中红黑树的内容。红黑树我们待会再讲。

难易程度:Medium

是否重点:9 分

掌握程度:能代码实现二叉树的三种遍历算法、按层遍历、求高度等经典二叉树题目

  1. 红黑树

对于初学者来说,这一节课完全可以不看。

难易程度:Hard

是否重点:3 分

掌握程度:初学者不用把时间浪费在上面

  1. B+ 树

虽然 B+ 树也算是比较高级的一种数据结构了,但是对初学者来说,也不是重点。有时候面试的时候还是会问的,所以这一部分内容,你能看懂专栏里的讲解就可以了。

难易程度:Medium

是否重点:5 分

掌握程度:可看可不看

  1. 堆与堆排序

这一部分内容不是很难,初学者也是要掌握的。

难易程度:Medium

是否重点:8 分

掌握程度:能代码实现堆、堆排序,并且掌握堆的三种应用(优先级队列、Top k、中位数)

  1. 图的表示

图的内容很多,但是初学者不需要掌握那么多。一般 BAT 等大厂面试,不怎么会面试有关图的内容,因为面试官可能也对这块不会很熟悉哈:)。但是,最基本图的概念、表示方法还是要掌握的。

难易程度:Easy

是否重点:8 分

掌握程度:理解图的三种表示方法(邻接矩阵、邻接表、逆邻接表),能自己代码实现

  1. 深度广度优先搜索

这算是图上最基础的遍历或者说是搜索算法了,所以还是要掌握一下。这两种算法的原理都不难哈,但是代码实现并不简单,一个用到了队列,另一个用到了递归。对于初学者来说,看懂这两个代码实现就是一个挑战!可以等到其他更重要的内容都掌握之后,再来挑战,也是可以的。

难易程度:Hard

是否重点:8 分

掌握程度:能代码实现广度优先、深度优先搜索算法

  1. 拓扑排序、最短路径、A* 算法

这几个算法稍微高级点。如果你能轻松实现深度、广度优先搜索,那看懂这三个算法不成问题。不过,这三种算法不是重点。面试不会考的。

难易程度:Hard

是否重点:5 分

掌握程度:有时间再看,暂时可以不看

  1. 字符串匹配(BF、RK)

BF 非常简单,RK 稍微复杂点,但都不难。这个最好还是掌握下。

难易程度:Easy

是否重点:7 分

掌握程度:能实践 BF 算法,能看懂 RK 算法

  1. 字符串匹配(BM、KMP、AC 自动机)

这三个算法都挺难的,对于算法有一定基础的人来说,看懂也不容易。所以,对于初学者来说,千万别浪费时间在这上面。即便有余力,看懂就好了,不用非得能自己实现。

难易程度:Hard

是否重点:3 分

掌握程度:初学者不用把时间浪费在上面

  1. 字符串匹配(Trie)

这个还是要能看懂,不过不需要能代码实现。有些面试官喜欢考这个东西,主要是结合应用场景来考察,只是看你知不知道要用 Trie 树这个东西。

难易程度:Medium

是否重点:7 分

掌握程度:能看懂,知道特点、应用场景即可,不要求代码实现

  1. 位图

位图不是重点,如果有余力最好掌握一下。

难易程度:Easy

是否重点:6 分

掌握程度:看懂即可,能自己实现一个位图结构最好

  1. 四种算法思想

这个是重点,也是难点。贪心、分治、回溯、动态规划,每一个都不简单,其中动态规划又是最难、最烧脑的。要应付 FLAG 这样公司的面试,必须拿下这块内容。但是呢,学习要循序渐进,这块内容的学习可以放到最后,做个长时间的学习计划来攻克。

这块内容理论的东西不多,要想真的掌握,还是要大量刷题。

难易程度:Hard

是否重点:10 分

掌握程度:可以放到最后,但是一定要掌握!做到能实现 Leetcode 上 Medium 难度的题目

学而时习之,专栏虽然已经结束,但是学习的同学和留言依旧源源不断。希望这份学习指导手册对你有帮助,也欢迎你继续给我留言,和大家一起交流、学习、进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/771289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用云手机高效运营多个海外社媒账户

随着全球化进程的不断推进,中国出海企业和B2B外贸企业日益重视海外社媒营销,将其视为抢占市场份额的关键策略。在海外社媒营销中,企业通常会在多个平台上批量开通账户,搭建自己的社媒内容矩阵。本文将会介绍如何用云手机高效运营多…

格雷希尔G25F系列快速接头,在新能源电池包气密性测试时的各种电气接插件的应用

一些大的新能源电池制造商如:比亚迪、宁德时代、国轩高科、亿纬锂能、东方时代等,在全球的新能源电池市场上占据着重要的地位。新能源PACK电池包在生产时,需要经过一些严苛的测试,用以检测产品的品质是否达到合格标准,…

基于React的低代码平台开发实践

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉在线地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

skimage求凸包、包络

给一幅分割 label,求某个物体的凸包(convex hull)[1]和包络(polygon)[2],所得是一幅 0/1 的 mask。凸包、包络都是包含物体的,分别在于包络不要求凸,可以更细致地勾勒物体形状。例&a…

中国500米逐年植被净初级生产力(NPP)数据集(2000-2022)

净初级生产力(NPP)是指植物在单位时间单位面积上由光合作用产生的有机物质总量中扣除自养呼吸后的剩余部分,是生产者能用于生长、发育和繁殖的能量值,反映了植物固定和转化光合产物的效率,也是生态系统中其他生物成员生存和繁衍的物质基础。其…

电脑控制面板在哪?5招教你快速打开!

“我在执行一个任务时要进入电脑的控制面板中查看,但是我不知道电脑的控制面板在哪,谁能帮帮我呀?” 电脑控制面板是一个系统文件夹,它提供了各种对计算机系统进行设置和管理的工具。控制面板允许用户查看并操作基本的系统设置&am…

Leetcode 76 最小覆盖子串 java版

官网链接: . - 力扣(LeetCode) 1. 问题: 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意: 对于 …

VsCode安装,配置,快捷键及常用开发插件的安装与介绍

文章目录 一.安装包下载方式一.官网下载方式二.网盘下载 二.安装三.VSCode插件安装1.中文语言包2.拼写检察器3.HTML自动补全4.JavaScript-ES6语法提示5.补全前端代码6.路径提示7.Vue3/Vue2开发必用8.自动闭合HTML/XML标签9.标签同步修改10.格式化html,css,js11.区分括号12.快速…

Vue3更新Package.json版本号

由于我之前已经更新过了,下面的方法提示我已经是最新的了,记录一下,过段时间在测试一下 npm install -g vue/clivue upgrade

DHCP中继配置示例

DHCP,属于应用层的协议(使用UDP协议封装,客户端端口:68,服务器端端口:67,中继端的端口:67) 两种配置方式:1、接口配置;2、全局配置。 ipconfig …

Redis-指定配置启动

基础篇Redis 3.3.5.指定配置启动 如果要让Redis以后台方式启动,则必须修改Redis配置文件,就在我们之前解压的redis安装包下(/usr/local/src/redis-6.2.6),名字叫redis.conf: 我们先将这个配置文件备份一份…

Day21代码随想录(1刷) 二叉树

530. 二叉搜索树的最小绝对差 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数,其数值等于两值之差的绝对值。 示例 1: 输入:root [4,2,6,1,3] 输出:1示例 2&#xff1…

【Java项目】基于jspssm的高校二手交易平台

目录 背景 技术简介 系统简介 界面预览 背景 随着互联网技术的不断进步,高校二手交易市场通过网络平台得到了显著的扩展。开发这一平台时,首要任务是深入挖掘并满足用户的实际需求,通过精准把握用户需求来构建一个专门化的高校二手交易系…

Linux下的I/O模型

目录 一、什么是IO? 二、IO操作的两个阶段 三、五种I/O模型 1、阻塞I/O(blocking I/O) 2、非阻塞I/O(non-blocking I/O) 3、多路复用I/O(multiplexing I/O) 4、信号驱动I/O(signal-driven I/O) 5、异步I/O(asynchronous I/O) 四、五种I/O模型比较 一、什么…

3.25作业

定义自己的命名空间&#xff0c;其中有string类型的变量&#xff0c;再定义两个函数&#xff0c;一个函数完成字符串的输入&#xff0c;一个函数完成求字符串长度&#xff0c;再定义一个全局函数完成对该字符串的反转 #include <iostream>using namespace std;namespace…

Ansys Zemax | 在 MATLAB 或 Python 中使用 ZOS-API 进行光线追迹的批次处理

附件下载 联系工作人员获取附件 这篇文章会说明如何在 MATLAB 或 Python 中以 Zemax OpticStudio 应用程式介面 (ZOS-API)处理光线数据库(Ray Database, ZRD)档案&#xff0c;过程中我们将使用ZRDLoader.dll。本文提供了在 Matlab 中批次处理序列光线追迹(一般、归一化、偏振…

定制化区块链交易所开发:Dapp、DeFi和IDO的全方位解决方案

随着区块链技术的不断发展&#xff0c;区块链交易所已经成为数字资产交易的主要场所之一。然而&#xff0c;由于不同项目的需求和特点各不相同&#xff0c;通用的交易所往往无法满足所有的需求。因此&#xff0c;定制化区块链交易所的需求逐渐增加&#xff0c;以满足不同项目的…

搜维尔科技:「工业仿真」煤炭矿井模拟仿真救援项目实施

煤炭矿井模拟救援系统满足煤矿企业在紧急避险应急演练方面的实际需要&#xff0c;在不耽误井下正常生产的情况下&#xff0c;高效率、低成本地实现对本矿区入井人员进行避灾演练培训&#xff0c;并学会正确的避灾自救互救方法。并可在本系统中直观的看到人员定位系统、监控系统…

【JAVA】建立一个图书管理系统

在建立一个图书管理系统的时候我们首先需要构造一个书类 public class Book {private String name;private String author;private int price;private String type;private boolean isBorrwed;public Book(String name, String author, int price, String type) {this.name n…

【原创】RockyLinux9.3手动编译MySQL8.2.0源码,超详细!!

前言 MySQL安装如果使用rpm包安装实在过于麻烦&#xff0c;缺这缺那的&#xff0c;我就想能不能就源码包自己手动编译安装&#xff0c;编译完的包可以给其他服务器直接用&#xff0c;这样只需要麻烦一次&#xff0c;后面就方便了。至于为什么不用RockyLinux8.6版本&#xff0c…