软考中级之数据结构与算法基础

林寻星辰 2023-03-05 22:26:51

涉及考点:数组与矩阵,线性表(队列和栈必考),广义表(偶尔考),树与二叉树),图,排序与查找,算法基础及常见算法
数组
数组存储的地址计算

稀疏矩阵
考点:计算系数矩阵当中的某一个元素,他对应的下标和计算偏移量是一回事
概念:矩阵当中,大部分元素都为零.一般存上三角或者下三角

数据结构的定义
数据结构的概念
计算机存储以及组织数据的方式,之所以去研究它,是因为不同的数据结构带来的运行效率千差万别.
数据逻辑结构

线性表
定义

相关操作

顺序存储与链式存储对比

队列与栈(常考)

广义表

树与二叉树
基本概念

满二叉树与完全二叉树

二叉树的遍历

反向构造二叉树

树转二叉树
一般来讲,数据结构讨论的更多的是二叉树

查找二叉树(排序二叉树)

最优二叉树(哈夫曼树)

线索二叉树

平衡二叉树


基本概念
● 完全图:在无向图中,若每队顶点之间都有一条边相连,则称改图为完全图
● 在有向图,若每对顶点之间都有两条有向边相互连接则称该图为完全图

图的存储

图的遍历

表中展示的内容不是很严谨,,还需要结合他的存储结构来说明

拓扑排序
我们把用有向边表示活动之间开始的先后关系,这种有向图称为用顶点表示活动网络,简称AOV网络

图的最小生成树---普利姆算法与克鲁斯卡尔算法
最小生成树:
就是把这个图当中的很多的边线去掉,去掉之后就只留下若干条边,把所有的结点给连贯起来,留下来的那条边都是比较小的权值,从而使得所有的权值总数最小
留下来的这部分被称之为生成树,那么它就是这个数的结构,所以要探讨一下树和图的区别:
树是没有环路的,而图是有环路的,那么去掉某个边让环路消失,也就成了树
边数=节点-1

[普利姆算法思想]从任意的某一点出发,找到这一点到其他点最近的地方,将中国最近的地方并入到最开始的点的集合当中,寻找下一个最短路径再并入,如此反复,连接完所有的点后,便得到最小生成树,其路径是最短,且不能形成环
[克鲁斯卡尔算法思想]从选择连接节当中最短的边开始,且选择的边不能形成环,最后就得到了最小生成树
算法基础
算法的特性

算法的复杂度
下午设计题
时间复杂度是指程序运行从开始到结束所需要的时间,通常分析时间复杂度的方法是从算法中选取一种对于研究的问题来说是最基本的运算的操作

查找算法
1顺序查找
将待查找的关键字为key的元素从头到尾与表中元素进行比较,如果中间存在关键字为key的元素,则返回成功

二分查找
前提是中国序列是有序序列,效率比顺序查找要高,关键字最多比较次数为(log2n)+1,时间复杂度为(log2n)

散列表查找

排序算法(必考)

插入类排序--直接插入排序
直接插入排序:即当插入第i哥记录时,R1,R2,.....Ri-1均已排序,因此将第i哥记录R1依此与Ri-1,,,,,,,R2,R1进行比较,找到适合的位置插入,它简单明了,但速度很慢

插入类排序--希尔排序
希尔排序:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组,所有距离为d1的倍数的记录放在同一个组中,先在各组内进行直接插入排序,然后取第二个增量d2<d1,重复上述的分组和0排序,直至所取得的增量di=1(di0<d2<d1)即所有记录放在同一组进行直接插入排序为止,该方法实质上是为了一种分组插入方法
取不同的距离值分组,进而在组内进行直接插入排序,这样子大大减少元数挪动的次数
基本理论:
直接插入排序,面对数据量比较小的时候的排序效率是非常高的,但是量大的时候就会有所大大下降,所以希尔排序将缩小范围(分组)进而充分的使用了直接插入排序

选择类排序--直接(简单)选择排序
直接选择排序的过程是:首先在所有记录中选出排序码的最小的记录,把它与第1个记录交换,然后在其他的记录内选择排序码最小的记录,与第2个记录交换......依此类推,直接所有的记录排完为止.

选择类排序--堆排序

交换类排序--冒泡排序
基本思想:通过相邻元素之间的比较好交换,将排序码比较小的元素主键从底部移到顶部,由于整个排序的过程就像水底下的气泡一样主键往上冒,因此称为冒泡排序

交换类排序--快速排序
采用的思路是:分治法:其基本思想是将原问题分解成若干个规模更小但是结构与原问题相似的子问题,通过递归的解决这些子问题,然后再把这些子问题的解组合成原问题的解
包含两个步骤
第一步:在待排序的n个记录中任选一个记录,以此记录的排序码为准,将所有的记录分为两组,第一步都小于该数,第二组数都大于该数
第二步:采用相同的方法对左右两组分别进行排序,直到所有的记录都排到对应的位置为止

归并排序
归并也称为合并,是将两个或两个以上的有序子表合并成一个新的有序表,若将两个有序表合并成一个有序表,则称为二路合并,合并的过程,比较a[i]和a[j]的序号码的大小

基数排序与
基数排序是一种借助关键字排序思想对单逻辑关键字进行排序的方法,基数排序不是基于关键字比较的排序方法,它适合于元素很多但是关键字较少的序列,基数的选择和关键字的分解是根据关键字的类型来决定的,.例如关键字是十进制数,则按照个位十位分解

排序算法复杂度及其稳定度的汇总

...全文
317 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

107

社区成员

发帖
与我相关
我的任务
社区描述
14天挑战赛发文处
学习 个人社区
社区管理员
  • Alita11101_
  • 穆雄雄
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

本次活动的文章请发布在社区内

试试用AI创作助手写篇文章吧