软件设计师-基础知识科目-数据结构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)。

堆:

使用数组构建大顶堆:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

教你如何优雅做好项目管理?

导言 项目本身无好坏之分&#xff0c;项目管理有做好与做坏之别。在互联网大厂的体制下&#xff0c;想要做坏一个项目很难&#xff08;可以通过换人、追加资源等方式消除风险&#xff09;&#xff0c;想要做好一个项目不容易&#xff0c;需要团队及 PM 付出大量心血和精力。在…

测开面经(pytest测试案例,接口断言,多并发断言)

pytest对用户登录接口进行自动化脚本设计 a. 创建一个名为"test_login.py"的测试文件&#xff0c;编写以下测试脚本 import pytest import requests# 测试用例1&#xff1a;验证登录成功的情况 # 第一个测试用例验证登录成功的情况&#xff0c;发送有效的用户名和密…

日期时间相关的类

分界线jdk8 jdk8之前和之后分别提供了一些日期和时间的类&#xff0c;推荐使用jdk8之后的日期和时间类 Date类型 这是一个jdk8之前的类型&#xff0c;其中有很多方法已经过时了&#xff0c;选取了一些没有过时的API //jdk1.8之前的日期 Date Date date new Date(); // 从1970年…

(源码+部署+讲解)基于Spring Boot和Vue的大学志愿者服务平台的设计与实现

摘要&#xff1a; 随着互联网技术的快速发展&#xff0c;大学校园内的志愿者活动日益增多&#xff0c;传统的志愿者管理方式已难以满足现代化、信息化的需求。因此&#xff0c;设计并实现一个基于Spring Boot和Vue的大学志愿者服务平台显得尤为重要。本文详细阐述了该平台的设计…

基于java+springboot+vue实现的教学辅助系统(文末源码+Lw)23-225

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差&#…

JDK下载及安装说明

1&#xff0e;JDK下载 访问oracle官网&#xff1a;http://www.oracle.com 在首页点击Downloads&#xff0c;进入oracle软件下载页。 在下载页面&#xff0c;点击Java。 选择Java (JDK) for Developers&#xff0c;点击。 在 Java SE Downloads 页面&#xff0c;点击中间的DO…

ES高级查询语法DSL实战 - 第504篇

历史文章&#xff08;文章累计500&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…

【grpc】一、grpc入门,从protobuf开始

一、protobuf简介 Protocol Buffers&#xff0c;是Google公司开发的一种数据描述语言&#xff0c;类似于XML能够将结构化数据序列化&#xff0c;可用于数据存储、通信协议等方面。 关于相关工具的安装网上很多资料了&#xff0c;这里不再赘述。但是有几点需要注意的&#xff0…

【吊打面试官系列】Java高并发篇 - Java 中用到的线程调度算法是什么?

大家好&#xff0c;我是锋哥。今天分享关于 【Java 中用到的线程调度算法是什么&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; Java 中用到的线程调度算法是什么&#xff1f; 采用时间片轮转的方式。可以设置线程的优先级&#xff0c;会映射到下层的系统上面的…

使用 Python 批量提取 Excel 中的图片(提供工具下载链接)

本文收录于《Python入门核心技术》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 大家好&#xff0c;我是水滴~~ 本文主要讲解如何利用 Python 来批量提取 Excel 中的图片&#xff0c;分别保存到目录中。并将程序打包成可执行文件&am…

cloudcompare对点云数据打标签流程

1.导入点云txt文件 2.点击小剪刀进行分割 这时视角不能动了&#xff0c;进行框选分割&#xff0c;分割出上牙和下牙 3.打标签 点击加号在前六列的基础上再加上一列&#xff0c;列名为label 这里设置其他为0,上牙的标签为1&#xff0c;下牙为2 左边状态栏可以看到 4.合并为一个…

VueDraggablePlus 支持 Vue2 和 Vue3 的拖拽组件

官网&#xff1a;https://alfred-skyblue.github.io/vue-draggable-plus/

Jmeter接口测试:响应断言元件

响应断言元件介绍&#xff1a; 响应断言元件的功能是对接口的响应信息进行自动断言校验&#xff0c;来判断接口测 试得到的接口返回值是否正确。jmeter中该元件支持将请求或响应的各个字段与 模式字符串进行比较。有了该元件&#xff0c;就可以完成自动化接口测试&#xff0c;…

自媒体内容创作助手:5款必备ai写作工具一览! #科技#知识分享#学习

这些工具不仅可以快速生成高质量的文本内容&#xff0c;还可以根据用户的需求进行个性化定制。它们可以帮助我们节省大量的时间和精力&#xff0c;让我们更加专注于创意和细节的打磨。本文将为大家详细介绍几个AI写作工具&#xff0c;让你在写作领域更上一层楼。 1.元芳写作 …

从MySQL5.7平滑升级到MySQL8.0的最佳实践分享

一、前言 升级需求&#xff1a;将5.7.35升级到8.0.27, 升级方式 in-place升级【关闭现有版本MySQL&#xff0c;将二进制或包替换成新版本并在现有数据目录上启动MySQL并执行升级任务的方式&#xff0c;称为in-place升级】 原版本 5.7.35 CentOS Linux release 7.9.2009 新版本…

数字图像处理项目——基于BCNN和迁移学习的鸟类图像细粒度分类(论文/代码)

完整的论文代码见文章末尾 以下为核心内容 摘要 本文采用了ResNet50、VGG19、InceptionV3和Xception等四种不同的深度神经网络模型&#xff0c;并应用于鸟类图像的细粒度分类问题中&#xff0c;以探究其在该任务上的性能表现。 其中&#xff0c;本文使用了BCNN&#xff08;B…

文献速递:深度学习胰腺癌诊断--胰腺肿瘤的全端到端深度学习诊断

Title 题目 Fully end-to-end deep-learning-based diagnosis of pancreatic tumors 胰腺肿瘤的全端到端深度学习诊断 01 文献速递介绍 胰腺癌是最常见的肿瘤之一&#xff0c;预后不良且通常是致命的。没有肿瘤的患者只需要进一步观察&#xff0c;而胰腺肿瘤的诊断需要紧…

RequestMapping注解

一、RequestMapping的作用 RequestMapping 注解是 Spring MVC 框架中的一个控制器映射注解&#xff0c;用于将请求映射到相应的处理方法上。具体来说&#xff0c;它可以将指定 URL 的请求绑定到一个特定的方法或类上&#xff0c;从而实现对请求的处理和响应。 二、RequestMappi…

Linux使用宝塔面板安装MySQL结合内网穿透实现公网连接本地数据库

文章目录 推荐前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不…

力扣-移除元素

题目 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长…