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


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

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

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

    1.算法是个啥?

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

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

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

    复杂的,例如也是算法

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

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

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

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

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

    2.数据结构又是个啥?

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

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

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

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

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

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

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

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

    1.集合结构

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

    2.线性结构

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

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

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

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

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

    3.树形结构

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

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

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

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

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

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

    4.图形结构

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

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

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

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

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

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

    5.我们20关的安排

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

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

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

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

  • 相关阅读:
    AOP是什么?如何使用AOP?
    函数是否使用结构体C++引用情况说明
    【目标检测】利用PyQT5搭建YOLOv5可视化界面
    从0到1学SpringCloud——12 gateway 动态配置网关路由规则
    使用AOP做日志切面
    Python爬虫协程批量下载图片
    FPGA ZYNQ VIVADO创建IP核点亮LED灯 方式一
    vue+element模仿商城,前后端分离实现,含数据库
    算法训练营第四十三天(9.5)| 动态规划Part16:距离
    开发语言漫谈-React
  • 原文地址:https://blog.csdn.net/xueyushenzhou/article/details/133801867