数据结构中一些零碎且易忘的知识点

树

  1. 并查集:

    • 并查集的应用:
      • 判断连通性、判环
      • Kruskal算法=排序+并查集
    • 并查集的存储方式
      • 逻辑:双亲表示法的树
      • 存储:数组
    • 并查集的时间复杂度(m为并查集长度)
      • find:优化前为 O ( m ) O(m) O(m);优化后为 O ( l o g 2 n ) O(log_{2}n) O(log2n)
      • union: O ( 1 ) O(1) O(1)
      • 总复杂度:优化前 O ( m 2 ) O(m^2) O(m2);优化后 O ( m ) O(m) O(m)
  2. 树、森林、二叉树遍历序列的关系

    树 森林 二叉树
    先根遍历 先序遍历 先序遍历
    后根遍历 中序遍历 中序遍历

    关于森林的中序遍历/后序遍历叫法问题:二者指森林的同一种遍历方法,都是先遍历第一棵树的子节点,然后是第一棵树的根节点,然后是第二棵树... 之所以称为中序遍历,是因为要先处理完一棵树再处理另一棵树。

图

  1. DFS与BFS算法的应用:
    • DFS:
      • 判断图的(强)连通性
        • 无向图的连通性:若从任意一个节点出发,仅需一次DFS就可以访问图中所有节点,则该无向图就是连通的
        • 有向图的强连通性:从任意一个节点v出发DFS,若可以遍历该有向图的所有节点,则此时将该有向图的所有边反向,再次从节点v出发进行DFS,若能够再次遍历该有向图的所有节点,则表示该有向图是强连通图
      • 判断图中是否有环(回路)
      • 欧拉回路求解:若一条路径能不重复的包含图中所有边,则称该路径为欧拉路径。若一条回路(从一个节点出发又能回到该节点的路径)是欧拉路径,则称为欧拉回路。DFS可以判断图中是否存在欧拉回路
      • 迷宫
      • 判断二分图
    • BFS:
  2. 最短路径
    • 有无环(回路)对Dijkstra算法并无影响,但Dijkstra算法不能求解存在负权值边的图;Floyd算法可以求带有负权值边的图,但图中不能存在负权回路(因为带有负权回路的图没有最短路径)
    • Dijkstra算法是解决单源最短路径类问题,floyd算法是解决多源最短路径(指图中任意两个顶点之间的最短路径)类问题
    • Dijkstra算法属于贪心算法,floyd算法属于动态规划算法
  3. 判断有向图是否有环(回路)的几种方法:
    • 深度优先遍历:若在遍历过程中遇到要访问的节点已在栈中就是有环
    • 拓扑排序:找不到拓扑序列必定有环
  4. 拓扑排序
    • 在拓扑排序算法中,为暂存入度为零的顶点可以使用栈,也可以使用队列。(因为只要入了栈/队列,就都是入度为零的,从哪个入度为零的先开始都无所谓)
    • 采用深度优先遍历也可实现拓扑排序
相关推荐
Navigator_Z2 小时前
LeetCode //C - 1289. Minimum Falling Path Sum II
c语言·算法·leetcode
CCblandy2 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
mmmmath_32 小时前
LeetCode.104.二叉树的最大深度
数据结构·leetcode
YangYang9YangYan3 小时前
2027供应链计划校招:数学与应用数学专业如何把预测模型讲成业务决策?
人工智能·sql·算法
jsjzsl23 小时前
递归自改进系统(RSI)的本质是自发对称破缺:智能爆炸有界—— AI研发切记盲目投入
人工智能·python·算法
程序员清风3 小时前
最短路径算法:BFS、Dijkstra 与 Floyd
java·算法·宽度优先
梦帮科技3 小时前
Kali Linux Scapy 畸形报文构造学——深度解剖非法 TCP Flags 与反常序列号
linux·爬虫·神经网络·算法·数学建模·系统架构·模拟退火算法
171320330计算机毕设编程5 小时前
计算机毕业设计 基于YOLO改进算法的车辆特征识别系统设计与实现--lw
java·大数据·python·sql·算法
姜鱼问生5 小时前
Nginx gzip 压缩:一个配置让页面加载快 3 倍
后端·算法·架构