软考——软件设计师:第四章:数据结构&算法分析与设计考点总结(完整篇)(下)

简介: 软考——软件设计师:第四章:数据结构&算法分析与设计考点总结(完整篇)(下)

文章目录:


6. 

6.1 基本概念

6.2 图的存储

6.2.1 邻接矩阵 

6.2.2 邻接表

6.3 图的遍历

6.4 拓扑排序

6.5 最小生成树

6.5.1 普里姆算法(以顶点为中心,适合稠密图)

6.5.2 克鲁斯卡尔算法(以边为中心,适合稀疏图) 

7.排序与查找

7.1 查找 

7.1.1 顺序查找与二分查找 

7.1.2 散列表 

7.2 排序

7.2.1 直接插入排序

7.2.2 希尔排序

7.2.3 简单选择排序

7.2.4 堆排序

7.2.5 冒泡排序

7.2.6 快速排序

7.2.7 归并排序

7.2.8 基数排序

7.2.9 排序算法的时间复杂度、空间复杂度及稳定性 

8.算法

8.1 算法的特性

8.2 算法的时间复杂度和空间复杂度


6.图


6.1 基本概念

6.2 图的存储


6.2.1 邻接矩阵

6.2.2 邻接表

6.3 图的遍历

6.4 拓扑排序

上图的拓扑排序序列除了这四种,还有:0124635702146357。可见,对于同一张图的拓扑序列是不唯一的!!!


6.5 最小生成树


6.5.1 普里姆算法(以顶点为中心,适合稠密图)

我们首先从顶点A出发,找到与A相连的所有边的最小值,即A→B100,将这条边加进来,此时最小生成树中有AB两个结点;之后,我们再将与AB两个结点相连的所有边中的最小值加进来,可以看到应该是A→E200,此时最小生成树中有ABE三个结点;不断重复上述这样的步骤,直到遍历图中的所有结点,最终得到的就是普里姆算法的最小生成树。

注意:求解最小生成树的过程中,一定不能产生环路!!!例如上图中,当我们将结点FD都加进来之后,下来要寻找与这些结点相连的所有边中的最小值,可以看到F→B300D→C300,但是如果我们选择F→B这条路径,那么就产生了环路:A→F→B→A,这是错误的!!!所以只能选择D→C(图中的12345表示加入这条边的顺序,冒号后面的是对应边的具体值)


6.5.2 克鲁斯卡尔算法(以边为中心,适合稀疏图)

我们纵观图中的所有边,首先选出最小的一条边,也就是A→B100,此时最小生成树中有AB两个结点;之后再从图中找出值最小的边,可以看到有两条A→E200F→D200,加进来这两条边之后,并没有产生环路的现象,所以可以加入,此时最小生成树中有ABEFD这些结点;接下来,继续寻找值最小的边,应该时A→F250,将其加入;最后因为不能产生环路,所以只能添加值最小的边D→C300。至此,已遍历全图的顶点。(图中的1234表示加入这条边的顺序,冒号后面的是对应边的具体值)

7.排序与查找


7.1 查找


7.1.1 顺序查找与二分查找

我们看上面这个例题,使用二分查找关键字17,具体过程如下:👇👇👇

\left \lfloor \left (1+12 \right )/2 \right \rfloor=6,所以定位到数组下标为6的元素的位置,比较得1718,可知关键字在前半部分[15]

\left \lfloor \left ( 1+5 \right )/2 \right \rfloor=3,所以定位到数组下标为3的元素的位置,比较得1710,可知关键字在后半部分[45]

\left \lfloor \left ( 4+5 \right )/2 \right \rfloor=4,所以定位到数组下标为4的元素的位置,比较得1716,可知关键字在后半部分[55]

此时二分查找的区间只剩一个元素,即第五个元素17,比较得17=17,所以查找成功。(一共进行了4次比较)

二分查找在查找成功时,关键字得比较次数最多为:\left \lfloor log2n \right \rfloor+1。时间复杂度为O\log 2n)。


7.1.2 散列表


7.2 排序

7.2.1 直接插入排序

7.2.2 希尔排序

7.2.3 简单选择排序

7.2.4 堆排序


7.2.5 冒泡排序


7.2.6 快速排序


7.2.7 归并排序

7.2.8 基数排序

7.2.9 排序算法的时间复杂度、空间复杂度及稳定性

8.算法


8.1 算法的特性

8.2 算法的时间复杂度和空间复杂度

相关文章
|
1月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
60 4
|
1月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
69 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
1月前
|
机器学习/深度学习 存储 缓存
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
文章主要介绍了排序算法的分类、时间复杂度的概念和计算方法,以及常见的时间复杂度级别,并简单提及了空间复杂度。
26 1
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
|
25天前
|
并行计算 算法 IDE
【灵码助力Cuda算法分析】分析共享内存的矩阵乘法优化
本文介绍了如何利用通义灵码在Visual Studio 2022中对基于CUDA的共享内存矩阵乘法优化代码进行深入分析。文章从整体程序结构入手,逐步深入到线程调度、矩阵分块、循环展开等关键细节,最后通过带入具体值的方式进一步解析复杂循环逻辑,展示了通义灵码在辅助理解和优化CUDA编程中的强大功能。
|
1月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
33 4
|
1月前
|
搜索推荐 算法
数据结构与算法学习十四:常用排序算法总结和对比
关于常用排序算法的总结和对比,包括稳定性、内排序、外排序、时间复杂度和空间复杂度等术语的解释。
20 0
数据结构与算法学习十四:常用排序算法总结和对比
|
1月前
|
存储 缓存 分布式计算
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
这篇文章是关于数据结构与算法的学习指南,涵盖了数据结构的分类、数据结构与算法的关系、实际编程中遇到的问题以及几个经典的算法面试题。
30 0
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
|
1月前
|
机器学习/深度学习 存储 算法
【数据结构与算法基础】——算法复杂度
【数据结构与算法基础】——算法复杂度
|
1月前
|
算法
PID算法原理分析
【10月更文挑战第12天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
|
1月前
|
算法
PID算法原理分析及优化
【10月更文挑战第6天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。