软件设计师-基础知识科目-数据结构3

三、 数据结构:

时间复杂度:

  • 背复杂度对应的代码。
  • Tips:时间复杂度估算看最内层循环,如若没有循环和递归则为O(1)。

空间复杂度:

  • 需要单独空间存储数据时使用。
  • 考点:非递归的空间复杂度。
  • Tips:声明一个变量和有限个数的变量都是O(1)。

递归式:

时间/空间复杂度:

  • 递归算法的时间/空间复杂度 = 递归的次数 × 每次递归的时间/空间复杂度
    • 上述适用于每次递归时间复杂度不变的情况。
  • 如果每次递归的时间复杂度随着n变化而变化,则要根据代码来观察。

主方法求递归式:(似懂非懂)

指数计算公式:

线性表:

  • 考点:如果没有给出最好最坏平均时间复杂度的话,默认是平均时间复杂度。

顺序表:

  • 插入、删除操作最好时间复杂度为O(1),平均和最坏时间复杂度都为O(n)。
  • 查找最好、最坏、平均情况都为O(1)。

单链表:

  • 查找、插入、删除操作最好时间复杂度为O(1),平均和最坏时间复杂度都为O(n)。

顺序存储:

  • 通过元素在存储空间中的相对位置来表示数据元素之间的逻辑关系。

队列:

  • 优先队列通常采用 堆 数据结构实现,向优先队列中插入一个元素的时间复杂度为O( lgn)。

数组:

一维数组:

  • LOC:数组首地址、L:元素大小。
  • 下标从0开始:a_i = LOC + i × L
  • 下标从1开始:a_i = LOC + ( i - 1) × L
  • Tips:理解记忆。

二维数组:a[i][j] -> i表示行,j表示列

  • LOC:数组首地址、N:行数、M:列数、L:元素大小
  • 按行优先存储并且下标从0开始:a_(i,j) = LOC + (i × M + j) × L
  • 按行优先存储并且下标从1开始:a_(i,j) = LOC + [(i - 1) × M + (j-1)] × L
  • 按列优先存储并且下标从0开始:a_(i,j) = LOC + (j × N + i) × L
  • 按列优先存储并且下标从1开始:a_(i,j) = LOC + [(j - 1) × N + (i - 1)] × L
  • Tips:理解记忆。

矩阵:

对称矩阵:

概念:

  • 有一个n×n的矩阵,若矩阵中的任意一个元素都有A_(i,j) = A_(j,i),则该矩阵为对称矩阵。

考点:

  • 一般考存储下三角和主对角线;按行优先存储;基于一维数组下标从1开始存储的公式。

对称矩阵按行存储下三角区和主对角线并且下标从1(A_1,1)开始的公式:

  • 当(i≥j)时:A_(i,j) = i(i - 1) / 2 + j
  • 当(i≤j)时:A_(i,j) = j(j - 1) / 2 + i
  • ---- ----
  • 对称矩阵按行存储下三角区和主对角线并且下标从0(A_0,0)开始:
    • 当(i≥j)时:A_(i,j)=i(i+1)/2+j+1
    • 当(i≤j)时:A_(i,j)=j(j+1)/2+i+1

三对角矩阵:

概念:

  • 有一个n×n矩阵A称为三对角矩阵,其中第(i,j)个元素在j > i + 1和j < i - 1时为零。

考点:

  • 按行优先存储。

三对角矩阵按按存储并且下标从1(A_1,1)开始的公式:背

  • A_(i,j) = 2i + j - 2
  • ---- ----
  • 三对角矩阵按按存储并且下标从1(A_1,1)开始:A_(i,j) = 2i + j - 2

稀疏矩阵:

  • 三元组顺序表和十字链表是对稀疏矩阵进行压缩存储的方式。背

上述三种矩阵图例:

二叉树:

  • 完全二叉树、满二叉树概念。
  • 性质3。

二叉树的存储结构:

  • 顺序存储需要维护结点和左、右孩子的关系:结点编号为n,则左孩子为2n,右孩子为2n+1。
  • 链式存储有二叉链表和三叉链表。
    • 对于个结点n的二叉树,二叉链表的空指针为n+1,三叉链表的空指针为n+2。

二叉树的遍历:

  • 先序遍历和后序遍历,不能构造中序遍历。
  • 通过序列构造二叉树必须有中序序列。

平衡二叉树:

  • 左右子树高度差不能大于1。

有序二叉树:

  • 有序二叉树,就是左子树上的数值小于树根上的值,树根上的值小于右子树的值。左右子树也是一颗二叉排序树。
  • 最坏的查找情况是单枝树(即高度h为n)要查找n次。

二叉排序树关键字排序:

  • 第一位为根节点,第二位与根节点比较插入到树中,依次类推。

最优二叉树(哈夫曼树):

  • 概念:它是一类带权路径长度最短的树。路径是从书中一个结点到另一个结点之间的通路,路径上的分支数目为路径长度。
  • 哈夫曼树中权值越大的结点离根结点越近,权值越小的结点离根结点越远。
  • 哈夫曼树只有度为0和度为2的结点,没有度为1的结点。
  • n个权值构造的哈夫曼树具有2n-1个结点。
  • 哈夫曼编码,基于贪心算法。
  • 哈夫曼树中最小的两个结点互为兄弟结点。
构造最优二叉树:
  • 方法:

  • 规则:***
    • 1. 从前往后找两个权重最小。2. 小左大右。3. 加入末尾。4. 权值相同从前往后。5. 用时再调。
压缩比计算:
  • 概念:求等长编码到哈夫曼编码压缩了多少。
  • 等长编码需要多少位。-> 公式:2^x >= 字符个数,x为需要多少位。
  • 哈夫曼编码是变长编码,在哈夫曼树中,从根节点开始,给左右分支标记0,1。即一层节点占一位。
  • 压缩比 =(等长编码长度 - 哈夫曼编码车长度) / 等长编码长度

图:

有向图、无向图:

  • 无向图:连接顶点的边是无向边
  • 有向图:连接顶点的边是有向边(弧)
  • ---- ----
  • 有向图和无向图的所有顶点度数之和 2e。(e为边数)
  • 有向图和无向图的边数 e = 顶点度数之和/2。

完全图:

  • 概念:每对顶点之间都恰连有一条边的图。
  • 无向完全图:(n*(n-1)) / 2 条边
  • 有向完全图:n*(n-1) 条边

连通图:

  • 连通图:无向图中任意两个顶点之间都有路径。最少有n-1条边,最多有(n*(n-1))/2条边。
  • 强连通图:有向图中任意两个顶点之间都有路径。 最少有n条边,最多有n*(n-1)条边。

最小生成树:

最小生成树-普利姆(Prim)算法:
  • 贪心算法。
  • 思想:从任意一个顶点开始,沿着权重最小的边进行扩展。
  • 时间复杂度:O[n2]

最小生成树-克鲁斯卡尔(Kruskal)算法:

  • 贪心算法。
  • 思想:每次选择权重最小的边来将两个顶点连接起来。
  • 时间复杂度为O[elog e]。

----- ----- -----

  • 若网较稠密,则Prim算法更好。

邻接矩阵:

  • 概念:表示顶点之间相邻关系的矩阵。
  • 查找所有顶点的邻居顶点的时间复杂度为O(n^2)。

邻接链表表示法:

  • 邻接表更适合存储稀疏图(边数很少的图)
  • 无向图采用邻接表存储有2e个表结点(e为边数)。
  • 有向图采用邻接表存储有n+e个表结点(n为结点数,e为边数) 。

哈希表:

  • 用线性探测法解决冲突容易产生聚集问题。

查找:

折半(二分)查找:

  • 折半查找在查找成功时,关键字的比较次数最多为 log2(n) +1 。
  • 折半查找的时间复杂度为O(log2n)。
  • 要求元素顺序存储,元素有序排列。
  • 考题:
    • mid = (low+high)/2 取整, k > mid时, low = mid+1,k。并且注意细节

不能构成查找过程中关键字比较序列考题:

  • 解题规律:比较序列可能是:大大大... ...大、小小小... ...小 、小大小大... ...小 大、大小大小... ...大小

排序:

  • 当数列基本有序时,采用插入排序比较合适,使用插入排序中希尔排序。背
  • 一定范围内的整数排序时,使用基数排序。例如:需要排序的记录是0-9的整数。
  • 快速排序:采用分治思想。最坏O(n^2),平均O(nlog2^n),一趟排序O(n)。基本有序时,快排具有最坏的情况。最佳的基准元素为中位数划分。
  • 归并排序:采用分治思想。时间复杂度,最好最坏一致O(nlog2^n)。稳定。
  • 堆排序:不稳定。空间复杂度O(1)。

堆:

使用数组构建大顶堆:

  • 将数组转换成二叉树。
  • 从最后一层的非叶子节点开始与叶子节点调整。一层一层的调整。调整过后导致已经调整的层大小顺序相反,则继续调整。

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

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

相关文章

少儿编程 2024年3月电子学会图形化编程等级考试Scratch二级真题解析(判断题)

2024年3月scratch编程等级考试二级真题 判断题&#xff08;共10题&#xff0c;每题2分&#xff0c;共20分&#xff09; 26、下列积木块运行结果为false 答案&#xff1a;错 考点分析&#xff1a;考查积木综合使用&#xff0c;重点考查逻辑或积木的使用&#xff0c;或运算是只…

游戏公司面试题系列-CocosCreator实现虚拟摇杆控制角色移动中心旋转自转小球割草旋转逻辑

游戏公司面试题系列-CocosCreator实现虚拟摇杆控制角色移动&中心旋转自转小球&割草旋转逻辑<&#xff01;&#xff01;&#xff01;文章末尾有完整代码下载链接地址&#xff01;&#xff01;&#xff01;> Hello大家好&#xff01;今天我们来用最新的CocosCreat…

python|drop的应用

drop 删除列B 删除索引为1的行 删除列为‘A’&#xff0c;‘C’的列&#xff0c;axis表示方向 删除时保留原始 DataFrame&#xff08;使用 inplaceFalse&#xff09; 删除时直接修改原始 DataFrame&#xff08;使用 inplaceTrue&#xff09;

java数据结构与算法刷题-----LeetCode628. 三个数的最大乘积

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 排序选择线性搜索最值 排序 解题思路&#xff1a;时间复杂度O( …

网络通信流程

建立完tcp请求再发起http请求 开启系统代理之后&#xff0c;以clash verge为例 127.0.0.1:7897&#xff0c;假设hci.baidu.com的IP为153.37.235.50 发起对hci.baidu.com的HTTP请求&#xff0c;由于开启了系统代理不进行DNS解析&#xff0c;浏览器调用socket()获得一个socket&a…

Redis7(二)数据类型及其用法

一、概述 命令不区分大小写&#xff0c;key区分大小写 数据类型针对value String List Set Hash ZSet bitmap GEO HyperLogLog Stream bitfield 二、String <K,V> 1、设值/取值 getrange key index1 index2 getrange key 0 -1//获取所有的值 SETRANGE KEY_N…

线程池实践篇

文章目录 配置线程池参数定义参数实体bean配置线程池使用 配置线程池参数 定时任务线程池基础参数 # 定时任务线程池基础参数 task:pool:corePoolSize: 5 # 核心线程数maxPoolSize: 20 # 设置最大线程数keepAliveSeconds: 300 # 设置线程活跃时间&#xff0c;单位秒queueCapa…

使用 Go-Ora 连接到 Oracle 数据库

前文 《 一鍵啓動 Oracle 23c Free 》 介绍了如何使用容器技术快速拉起 Oracle 23c 数据库。 这个开发者版本可以很便捷的拉起、测试、销毁&#xff0c;对开发者是非常友好的。 本文将介绍如何使用 Go 语言构建项目&#xff0c;并连接到 Oracle 数据库。 Go 环境配置 本文使用的…

如何将本地websocket服务端从本地暴露至公网实现客户端远程连接

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…

Rust语言入门第一篇-环境搭建

Rust语言入门第一篇 Rust官网 一&#xff0c;环境搭建 1、C开发环境配置 Rust 语言的底层是依赖于 C/C 编译器的。在安装 Rust 编译器时&#xff0c;通常会自动安装所需的 C/C 编译环境&#xff0c;以便 Rust 能够生成可执行文件或库。因此&#xff0c;在安装 Rust 之前&…

Docker之数据卷和Dockerfile

目录 一、Docker数据管理 二、数据卷 创建数据卷 查看数据卷 删除数据卷 挂载数据卷 三、数据卷容器 创建数据卷容器 测试数据卷容器 备份数据卷容器 还原数据卷容器 四、Dockerfile 什么是Dockerfile 基本结构 常用指令 快速入门 编写Dockerfile文件 构建镜…

安全升级,智能领航:RFID技术推动铁路锁控系统进入新时代

随着我国铁路运输行业的快速发展&#xff0c;铁路安全运营的重要性日益凸显&#xff0c;为了提高铁路运输安全性&#xff0c;降低人为操作失误&#xff0c;航连科技提出了一种基于RFID技术的铁路智能锁控系统解决方案&#xff0c;旨在为我国铁路安全运营提供有力支持。 一、系统…

C++:VS dump调试(2)

之前写的&#xff1a; C&#xff1a;VS2019调试dump文件-CSDN博客 1、需要dump文件【这个一般是客户现场收集的】 2、对应的pdb文件【这个是软件编译时候生成的】 3、代码【有可能只有自己负责模块的代码&#xff0c;没有全部代码&#xff0c;但是基本调试也是只会用到自己部…

IP协议中的四大支柱:DHCP、NAT、ICMP和IGMP的功能剖析

DHCP动态获取 IP 地址 我们的电脑通常都是通过 DHCP 动态获取 IP 地址&#xff0c;大大省去了配 IP 信息繁琐的过程。 客户端首先发起 DHCP 发现报文&#xff08;DHCP DISCOVER&#xff09; 的 IP 数据报&#xff0c;由于客户端没有 IP 地址&#xff0c;也不知道 DHCP 服务器的…

FPGA:图像数字细节增强算法(工程+仿真+实物,可用毕设)

目录 日常唠嗑一、视频效果二、硬件及功能1、硬件选择2、功能3、特点 未完、待续……四、工程设计五、板级验证六、工程获取 日常唠嗑 有2个多月没写文章了&#xff0c;又是老借口&#xff1a;“最近实在是很忙”&#x1f923;&#xff0c;不过说真&#xff0c;确实是比较忙&am…

DIY可视化UniApp表格组件

表格组件在移动端的用处非常广泛&#xff0c;特别是在那些需要展示结构化数据、进行比较分析或提供详细信息的场景中。数据展示与整理&#xff1a;表格是展示结构化数据的理想方式&#xff0c;特别是在需要展示多列和多行数据时。通过表格&#xff0c;用户可以轻松浏览和理解数…

java数据结构与算法刷题-----LeetCode238. 除自身以外数组的乘积

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 动态规划&#xff1a;左右乘积列表2. 滚动数组对动态规划过程…

老子云、AMRT3D、眸瑞科技

老子云概述 老子云3D可视化快速开发平台&#xff0c;集云压缩、云烘焙、云存储云展示于一体&#xff0c;使3D模型资源自动输出至移动端PC端、Web端&#xff0c;能在多设备、全平台进行展示和交互&#xff0c;是全球领先、自主可控的自动化3D云引擎。 平台架构 平台特性 1、基…

Open CASCADE学习|统计形状拓扑数量

边界表示法&#xff08;Boundary Representation&#xff0c;简称B-Rep&#xff09;是几何造型中最成熟、无二义的表示法。它主要用于描述物体的几何信息和拓扑信息。在边界表示法中&#xff0c;一个实体&#xff08;Solid&#xff09;由一组封闭的面&#xff08;Face&#xff…

easyExcel - 按模板导出

目录 前言一、情景介绍二、文档介绍2.1 读取模板2.2 填充模板 三、代码示例3.1 案例一&#xff1a;工资表3.2 案例二&#xff1a;报价单 四、我所遇到的问题 前言 Java-easyExcel入门教程&#xff1a;https://blog.csdn.net/xhmico/article/details/134714025 之前有介绍过如…