【软考知识点整理】算法与数据结构

概念

渐进分析

O记号:渐进上界
给定一个函数g(n),O(g(n)) = {f(n):存在正常数c和n0,使得对所有的n ≥ n0,有0 ≤ f(n) ≤ cg(n)}

Ω记号:渐进下界
给定一个函数g(n),Ω(g(n)) = {f(n):存在正常数c和n0,使得对所有的n ≥ n0,有0 ≤ cg(n) ≤ f(n)}

Θ记号:渐进紧致界
渐进紧致界就是算法运行时间的渐进上界和渐进下界。
给定一个函数g(n),Θ(g(n)) = {f(n):存在正常数c1,c2和n0,使得对所有的n ≥ n0,有0 ≤ c1g(n) ≤ f(n) ≤ c2g(n)}

广义表

一种线性存储结构,广义表中存储的单个元素称为“原子”,广义表可以包含其他广义表,可以当做结构体去理解。

图(网)

无向图:连接顶点的边没有方向
有向图:连接顶点的边有方向
完全图:所有顶点互相连接的无向图

AOV网(Activity On Vertex Network)

顶点—表示活动,是一个有向无回路的图。
顶点:表示活动。
边:表示活动间的优先关系的有向图称为-顶点表示活动的网
求拓扑序列就是AOV

AOE网(Activity On Edge)

边—表示活动,是一个带权的有向无环图
边:表示活动
顶点:表示事件
权:表示活动持续时间
求关键路径就是AOE
用来估算工程的完成时间

邻接矩阵

https://blog.csdn.net/diviner_s/article/details/106978910

熵编码

香农(Shannon)编码、哈夫曼(Huffman)编码,指数哥伦布编码(Exp-Golomb)和算术编码(arithmetic coding)。

二叉树

概念

度: 结点拥有的子树数目称为结点的度。
结点层次: 从根开始定义起,根为第一层,根的孩子为第二层,以此类推。
树的深度: 树中结点的最大层次数称为树的深度或高度。
关键码序列:
若任意节点的左子树不空,则左子树上所有结点的 值均小于它的根结点的值。
若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值。

二叉树遍历

①前序遍历的方式是:首先访问根节点,然后访问左子树,最后访问右子树。
②中序遍历的方式是:首先访问左子树,接着访问根结点,最后访问右子树。
③后序遍历的方式是:首先访问左子树,接着访问右子树,最后访问根结点。
④层序遍历的方式是:按层从上到下,每层按一定顺序(从左到右、从右到左)对树的节点进行遍历。

二叉树的分类

详细说明移步传送门

  • 满二叉树
    每一层的节点数均达到最大值。
  • 完全二叉树
    一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。
  • 最优二叉树
    哈夫曼树。
  • 平衡二叉树
    一棵空树,或左子树和右子树的深度差的绝对值不超过1,并且左子树和右子树都是一棵平衡二叉树。
  • 有序二叉树(二叉搜索树、二叉查找树、二叉排序树)
    左子树上的数值小于树根上的值,树根的值小于右子树的值。

哈夫曼树

概念
  • 路径:一个节点到另一个节点之间的通路。
  • 节点的权:给每一个节点赋予一个数值,被称为节点的权。
  • 节点的带权路径长度 = 从根节点到该节点的路径长度 x 该节点的权
  • 树的带权路径长度 = 所有叶子节点的带权路径长度之和
特点

当用n个节点构建一个树时,带权路径长度最小的树就是哈弗曼树。

构成方法

①在 n 个权值中选出两个最小的权值,对应的两个结点组成一个新的二叉树,且新二叉树的根结点的权值为左右孩子权值的和;
②在原有的 n 个权值中删除那两个最小的权值,同时将新的权值加入到 n–2 个权值的行列中,以此类推;
③重复 1 和 2 ,直到所以的结点构建成了一棵二叉树为止,这棵树就是哈夫曼树。

M阶B-树

一棵m阶B-树(就是B树)(balanced tree of order m)是一棵平衡的m路搜索树。它或者是空树,或者是满足下列性质的树:

  1. 根节点至少有2个子节点
  2. 每个非根节点(分支节点)至少有┌m/2┐个子节点(向上取整)
  3. 关键字个数 j ,有 -1≤ j≤ m-1
  4. 除根结点以外的所有结点(不包括叶子结点)的度数正好是关键字总数加1,故内部子树个数 k 满足:┌m/2┐ <= k <= m ;
  5. 所有叶子节点都在同一层

排序算法

排序算法稳定性时间复杂度
(通常情况)
时间复杂度
(极端情况)
快速排序不稳定O(nlogn)最坏:O(n²)
插入排序稳定O(n²)最好:O(n)
归并排序稳定O(nlogn)O(nlogn)
选择排序不稳定O(n²)O(n²)
希尔排序不稳定O(n^1.3)O(n²)
堆排序不稳定O(nlogn)O(nlogn)

快速排序

①选定一个元素(一般取第一个或中间的元素)作为基准值。
②遍历数组中所有元素,小于基准值的放左边,大于基准值的放右边。
③将基准值左右两组元素看做子数组,执行①②,直到子数组仅有1个元素时结束递归。

插入排序

就好像理手中的扑克牌,将刚抓到的排按顺序插到它应在的位置。
插入排序从数组的第二个元素开始,和前一个元素(这里记作x)比较:
如果小于x,则将x向后移,再与前一个元素比较,如此反复直到小于x。
如果大于等于x,则停止比较,将该元素插入到当前位置。

归并排序

将数组递归地平均分成2份,直到数组元素个数不足2个。
比较子数组中元素的大小,按顺序存放到result数组中。
(result数组是新申请的空间,用于存放排序后的数组)
与快速排序的区别是:归并排序不需要根据基准值划分子数组,而是直接将数组元素平均分成2份。

选择排序

遍历整个数组,找出最小的元素,将该元素和数组第一个元素互换位置。
继续遍历数组中乱序的部分,找出最小的元素,将该元素和乱序部分的第一个元素互换位置。

希尔排序

插入排序算法改进版,将数组指定步长然后排序,详细请见传送门

堆排序

大顶堆:
完全二叉树中,每个节点的值都大于其子节点的值,用于升序排列。

小顶堆:
完全二叉树中,每个节点的值都小于或等于其子节点的值,用于降序排列。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值