当前位置: 首页 > news >正文

DS | 冲刺阶段考点整理 —— 绪论、线性表、栈与队列、特殊矩阵、串

零、绪论

考点1:时间复杂度与空间复杂度

  • 时间复杂度:重复执行的次数,不仅依赖于问题规模n,而且依赖于待输入数据的性质
    • 若为递归:确定循环次数 及 每次递归的数量级
  • 空间复杂度
    • 算法原地工作:算法所需的辅助空间为常量,即O(1)
    • 影响因素
    • ①算法运行过程中各种变量所占空间(如:辅助数组)
    • ②递归工作栈带来的空间复杂度(通常和递归深度同等数量级)
      • 注意:有些情况下,算法的时间复杂度、空间复杂度还随问题的输入数据集的不同而不同。(最好、最坏、平均)——常结合查找、排序算法考察
    • 数组传入的是指针
  • 时间复杂度大小
  • O(1)< O(logn) < O(n) < O(n*logn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

【命题重点】 

        1、给定代码段,分析算法的时间复杂度。 

        循环类代码――分析每层循环的循环次数与问题规模n之间的关系,若有多层嵌套循环,则使用乘法规则

        递归类代码――分析递归次数与问题规模n之间的关系。若要分析空间复杂度,则应找到递归深度与问题规模n之间的关系。

        如:若对一棵n个结点的完全二叉树,进行遍历时,时间复杂度为O(n),空间复杂度为(logn) 树高。

        2、结合算法题考查,分析自己设计的算法的时、空复杂度。


一、线性表

 

顺序表与链表:

        逻辑结构:都是线性表

        物理结构::

            顺序表――顺序存储,逻辑上相邻的物理上也相邻【随机存取】

            链表――链式存储,逻辑上相邻的物理上可以不相邻,用指针描述逻辑上的前驱后继关系


 考点2、线性表的顺序表示

顺序表的基本操作:创销增删改查

        

Tips:目前为止,顺序表的算法题只需简单定义一个数组即可,基于数组实现算法

int data [N];   //文字说明数组里存了什么数据,数组长度为N

考察顺序表时,大多数情况下就是在对数组操作

Key:

        基于数组的算法题(保命重点)

        查找――顺序遍历查找、折半查找

        排序――快速排序(不变长)、归并排序(变长)


考点3、线性表的链式表示

  • 会用c语言定义链表结点
  • 单链表的遍历
  • 删除某结点插入某结点
  • 用头插法(逆置单链表)

 

二、栈与队列

 

考点4、栈和队列的基本性质 

常考题型:输出序列合法性 

        某个元素出栈时,只要是在其后出栈且早于它进栈的元素,那么这些元素(包括该元素)的出栈顺序与它的进栈顺序相反。


考点5、栈和队列的存储结构 


考点6、双端队列

         


考点7、栈与队列的应用 

【考点笔记】队列的应用

  • 解决逐行或逐层的问题,如层序遍历二叉树
  •  解决主机与外部设备之间速度不匹配的问题,如缓冲区。
  • 解决由多用户引起的资源竞争问题,如进程的就绪队列。

 【考点笔记】栈的应用

  • 栈在括号匹配的应用
  • 栈在表达式求值的应用
    • 三种算数表达式
      • 中缀表达式:运算符在操作数中间
      • 后缀表达式:运算符在操作数后面
      • 前缀表达式:运算符在操作符前面
    • 后缀表达式(逆波兰表达式)—— 注意 操作数的顺序!
      • 中缀转后缀
        • 运算顺序不唯一,因此对应的后缀表达式也不唯一
        • “左优先”原则:只要左边的运算符能先计算,就优先算左边的
      • 后缀求值
        • 后缀表达式的手算方法
          • 从左往右扫描,每遇到一个运算符,就让运算符前面最近的两个操作数执行对应运算,合体为一个操作数。注意:两个操作数的左右顺序。
          • 后缀表达式用栈实现计算

    • 前缀表达式(波兰表达式)
      • 中缀转前缀

      • 前缀求值
  • 栈在递归中的应用
    • 函数调用时,需要用一个栈存储:①调用返回地址 ②实参 ③局部变量

    • 注:理论上所有的递归算法都可以手动建栈,用非递归的方式实现

    • 越靠后被调用的函数信息越靠近栈顶,其个函数return后该函数在栈中的信息就会消失。

考察:中缀转后缀的详细过程

谨防:后缀表达式计算的详细过程。考察扫描到某个位置时,栈的状态。


 

 三、特殊矩阵

 

考点8+9_特殊矩阵的压缩存储+多维数组存储 

矩阵下标→数组下标

数组下标→矩阵下标

Tips: 408通常规定矩阵下标从1开始,数组下标从0开始

 

 

 


 

四、串


 考点10、串的模式匹配算法

 

 

Tips:根据Next数组的第一个值判断下标是从0还是从1开始

next数组第一个值为0→下标从1开始

next数组第一个值为-1→下标从0开始

相关文章:

  • 实验5 循环结构
  • 【漏洞复现-Apache-目录穿越文件读取-RCE】vulfocus/apache(cve_2021_41773)
  • 基于matlab的SVM支持向量机分类仿真,核函数采用RBF函数(提供matlab仿真录像)
  • 机器学习基础:拉格朗日乘子法
  • Matlab 与 Python 基于窗函数的滤波器设计对比 之 凯瑟窗
  • java web开发(从spring boot到spring cloud)
  • 看呆了!二面高德 Java 岗,问了一堆源码,微服务,分布式,Redis,心累
  • 2022华为杯研究生数学建模竞赛B题思路解析
  • 2022华为杯研究生数学建模竞赛E题思路解析
  • 【C语言】学生考勤管理系统
  • 常用的调试技巧(如何检测bug)
  • SpringBoot二十六课大纲和目录
  • 2022年中国研究生数学建模竞赛C题-汽车制造涂装-总装缓存调序区调度优化问题
  • 2022研究生数模A题——移动场景超分辨定位问题
  • vue2脚手架之全局事件总线
  • 230. Kth Smallest Element in a BST
  • HTTP请求重发
  • JS 面试题总结
  • linux学习笔记
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Promise初体验
  • React-flux杂记
  • spring boot下thymeleaf全局静态变量配置
  • Tornado学习笔记(1)
  • 产品三维模型在线预览
  • 分布式熔断降级平台aegis
  • 关于for循环的简单归纳
  • 计算机在识别图像时“看到”了什么?
  • 前嗅ForeSpider中数据浏览界面介绍
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 微信小程序实战练习(仿五洲到家微信版)
  • 问题之ssh中Host key verification failed的解决
  • 学习使用ExpressJS 4.0中的新Router
  • - 转 Ext2.0 form使用实例
  • puppet连载22:define用法
  • 阿里云ACE认证学习知识点梳理
  • 容器镜像
  • #define
  • #Ubuntu(修改root信息)
  • #宝哥教你#查看jquery绑定的事件函数
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (分布式缓存)Redis哨兵
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (转)fock函数详解
  • *p++,*(p++),*++p,(*p)++区别?
  • .NET CORE Aws S3 使用
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET 发展历程
  • .NET 设计模式初探
  • .NET 使用配置文件
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .net反混淆脱壳工具de4dot的使用
  • .sh
  • @angular/cli项目构建--Dynamic.Form