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

2024-04-09 08:20

本文主要是介绍软件设计师-基础知识科目-数据结构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)。

堆:

使用数组构建大顶堆:

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

这篇关于软件设计师-基础知识科目-数据结构3的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/887639

相关文章

Ubuntu 怎么启用 Universe 和 Multiverse 软件源?

《Ubuntu怎么启用Universe和Multiverse软件源?》在Ubuntu中,软件源是用于获取和安装软件的服务器,通过设置和管理软件源,您可以确保系统能够从可靠的来源获取最新的软件... Ubuntu 是一款广受认可且声誉良好的开源操作系统,允许用户通过其庞大的软件包来定制和增强计算体验。这些软件

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

计组基础知识

操作系统的特征 并发共享虚拟异步 操作系统的功能 1、资源分配,资源回收硬件资源 CPU、内存、硬盘、I/O设备。2、为应⽤程序提供服务操作系统将硬件资源的操作封装起来,提供相对统⼀的接⼝(系统调⽤)供开发者调⽤。3、管理应⽤程序即控制进程的⽣命周期:进程开始时的环境配置和资源分配、进程结束后的资源回收、进程调度等。4、操作系统内核的功能(1)进程调度能⼒: 管理进程、线

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel