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

  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. 拓扑排序
    • 在拓扑排序算法中,为暂存入度为零的顶点可以使用栈,也可以使用队列。(因为只要入了栈/队列,就都是入度为零的,从哪个入度为零的先开始都无所谓)
    • 采用深度优先遍历也可实现拓扑排序
相关推荐
Themberfue12 分钟前
基础算法之双指针--Java实现(下)--LeetCode题解:有效三角形的个数-查找总价格为目标值的两个商品-三数之和-四数之和
java·开发语言·学习·算法·leetcode·双指针
陈序缘37 分钟前
LeetCode讲解篇之322. 零钱兑换
算法·leetcode·职场和发展
-$_$-40 分钟前
【LeetCode HOT 100】详细题解之二叉树篇
数据结构·算法·leetcode
大白飞飞42 分钟前
力扣203.移除链表元素
算法·leetcode·链表
尘心cx1 小时前
数据结构-栈
数据结构
学无止境\n1 小时前
[C语言]指针和数组
c语言·数据结构·算法
黄俊懿1 小时前
【深入理解SpringCloud微服务】手写实现各种限流算法——固定时间窗、滑动时间窗、令牌桶算法、漏桶算法
java·后端·算法·spring cloud·微服务·架构
新缸中之脑1 小时前
Llama 3.2 安卓手机安装教程
前端·人工智能·算法
夜雨翦春韭1 小时前
【代码随想录Day29】贪心算法Part03
java·数据结构·算法·leetcode·贪心算法
Curry_Math2 小时前
Acwing 区间DP & 计数类DP
算法