我已经搞了三年算法面试培训了

从2021年开始,我已经做了三年算法培训了,算法体系已经教了十几遍了,从现在开始,我准备干一票大的。接下来我会将我的讲义和算法实训内容开源出来,今天下发第一篇。

想了解详情,请私信我吧!

很多小伙伴刷算法总是找来题目就刷,结果举步维艰,即使刷了一些,也找不到规律,越来越走火入魔,在刷算法之前,我们先来认识一下一些基础内容吧

1.算法是个啥?

算法就是解决问题的方式,就像中学时代的数学一样,其实数学领域的算法和计算机领域的算法有很多相通之处。我们后面要刷的很多题目,都不好说是数学问题还是算法问题。

我们所涉及的算法,是计算机科学领域的算法,它的本质是一系列程序指令,用于解决特定的运算和逻辑问题

算法有简单的,也有复杂的,简单的如1+1=2,也是算法。

复杂的,例如也是算法

我已经搞了三年算法面试培训了_第1张图片

大千世界任务问题,一旦向使用计算机来解决,那必然最终要变成一行行可以执行的代码,解决这个问题的过程就是算法。

我已经搞了三年算法面试培训了_第2张图片

同一个问题,不同的解决方式有差异吗?

算法有高效的,也有拙劣的。

例如计算100以内的累加和,可以用1+2+...+100,一个数一个数的算,

也可以直接用(1+100)*100/2算出来。所以我们后面会看到同样的问题,会有多种解法,而不同的解法在性能、执行时间、耗费资源等方面会有差异,这个我们一般使用空间复杂度和时间复杂度来评价,这个问题我们下一小节专门讨论。

2.数据结构又是个啥?

很多同学学过数据库、网络、操作系统等等都感觉挺有用,但是始终不知道数据结构是干啥的。

一个像样的系统,例如操作系统、飞控系统等等,动辄成百上千的代码,但是再复杂的代码要使用数据来执行,那我们使用的数据之间又有哪些关系呢?数据之间的结构形式,就是数据结构要研究的问题。所以,数据结构是所有计算机程序的思想精华。

我已经搞了三年算法面试培训了_第3张图片

计算机从第二次世界大战的时候就已经开始了,经过这么多年的发展,大家发现,数据再复杂也是由如下几种简答的结构组成的:集合、数组、链表、树、图。再复杂的系统,他的数据也是由这几种关系组成的。

为了更好的描述这个世界,我们总是想从更基本的角度来理解。例如,在中学时代,我们学过,大千世界是由原子组合而来的,而原子则由结构更加简单的质子和电子组成的。

所谓”太极生两仪,两仪生四象,四象生八卦“,老子在道德经里有云:一生二,二生三,三生万物,道法自然,说的就是这个道理。

我已经搞了三年算法面试培训了_第4张图片

在大家后面学习各类计算机技术之后,会发现数据结构类型是非常多的,不过呢,在算法里,我们接触最多的数据结构类型如下:

我已经搞了三年算法面试培训了_第5张图片

3.初识几种常见的数据结构

接下来,我们来介绍几种常见的数据结构,后面我们刷算法会反反复复使用这些结构。

1.集合结构

集合结构中的元素除了属于同一个集合外,它们之间没有任何关系。各个元素是平等的,这与数学中的集合是一致的。现实中最典型的例子就是老乡,你到了一个新公司之后,如果同事和你都是山东人,你们就会感觉比较亲切。如果都是山东临沂人,就会感觉更亲切。如果都是同一个镇子,就感觉像亲人一样,虽然你们之前并不认识。

我已经搞了三年算法面试培训了_第6张图片

2.线性结构

线性结构中的数据元素是一对一的关系,相互之间只与上一个和下一个连在一起。最典型的就是火车了。数组和链表都属于线性结构,有些地方则称之为线性表,都是一个意思。

数组结构是所有的元素依次靠在一起,中间不能有空位,就像队伍一样:

我已经搞了三年算法面试培训了_第7张图片

链表结构,则要求每个元素只要再保存其下一个元素的位置即可,就像铁链一样,因此叫链表:

我已经搞了三年算法面试培训了_第8张图片

线性表经过一些特殊的约束可以形成多种结构,例如只允许一头插入删除就是栈。只允许一头插入一头输出就是队列,使用不同的限制条件,队列也可有多种形式。这种用的多,类型也多,jdk中有庞大的工具类,这种都统一称为访问受限的线性结构。

还有一种更特殊的结构Hash,Hash本身是用数组存储的,但是访问却不是线性的,这与其访问策略有关系,我们暂且都放这里吧。

3.树形结构

树形结构中的元素存在单向一对多的层次关系。典型的例子有很多,例如族谱、公司部门架构、全国行政区划等等。

我已经搞了三年算法面试培训了_第9张图片

用计算机的术语说,在树中,元素之间是一对多的关系。特点是:

1.开始元素唯一,终端元素不唯一

2.除终端元素以外,每个元素有一个或多个后续元素

3.除开始元素外,每个元素有且仅有一个前驱元素。

树的拓展类型也有很多,例如堆、平衡树、红黑树、哈夫曼树等等。在算法中经常考察的是二叉树,主要是因为二叉树简洁好写,但是在实际中我们更多使用N层的结构。而且jdk等本身也提供了大量的工具类来辅助我们的工作。

4.图形结构

图形结构的数据元素是多对多的关系,典型的例子就是全国交通网络图等等。

我已经搞了三年算法面试培训了_第10张图片

图形结构的构造和处理都比较复杂,因此代码量会非常大,但是基本的深度优先和广度优先遍历等问题,使用树来考察更方便,因此在面试环节极少出现,所以我们课程也不涉及相关内容。

4 算法与数据结构又是啥关系

算法是解决问题的思想,数据结构是具体的实现载体,这就像战术与武器的关系。

任何算法,如果想做成计算机可以执行的程序,那必然要借助数据结构将算法进行细化和步骤化,这就是程序开发的设计方案。

在算法考察中,有相当一部分就是数据结构本身的增删改查和各种各样的变换。而在此基础之上,再考虑一些比较复杂的实际问题。

5.我们20关的安排

我们通关村20关中,内容是围绕“数据结构+经典算法思想”为主线展开,并进行拓展的。整体来说又分为四个部分:

我已经搞了三年算法面试培训了_第11张图片

6.通关标准—掌握算法的体系脉络

我们刷题不是为了刷题而刷题,也不是一直没完没了讲数据结构,而是通过20关,将算法的体系、脉络、高频问题、经典解题模板,这些问题教给大家。

如果这张图中的脉络和常见问题都掌握了,那你的算法就真的通关了。

你可能感兴趣的:(算法从0到神,算法)