
算法笔记
文章平均质量分 70
Dexu7
这个作者很懒,什么都没留下…
展开
-
【最小生成树】(三) Prim 算法
在最小生成树的前两个章节中, 我们介绍了并查集以及基于并查集的 Kruskal 算法;不难看出, Kruskal 算法的时间复杂度主要来自于对所有边按权值排序;假设图中共有 E 条边, 那么 Kruskal 的时间复杂度为 ElogE;因为我们在并查集中使用了路径压缩算法, 其时间复杂度接近 O(1), 所以整个算法的时间复杂度和排序算法相当, 在使用快速排序的情况下, 就是 ElogE;原创 2024-08-09 10:18:50 · 553 阅读 · 0 评论 -
【最小生成树】(二) Kruskal 算法
假设图中有 1, 2, 3 三个顶点, 有 [1, 2], [1, 3] 两条边, 现在考虑加入 [2, 3] 这条边, 原本结点 2 和 结点 3 就已经处于连通状态, 现在加入 [2, 3] 必定导致图中出现环状结构;在无向图中, 如果一条边的两个端点本来就是连通的(处在同一集合中), 那么这个边的加入必然会使得图中产生 “环”当我们遍历到一条边, 这条边所连的两个顶点本身就已经连通时, 那么这条边是多余的, 如果加入, 会产生环;并查集的作用与代码在上一篇文章中有详细介绍, 可以到专栏中查看;原创 2024-08-08 15:04:13 · 380 阅读 · 0 评论 -
【最小生成树】(一) 预备知识 并查集
并查集的本质就是一个数组;表示元素 i 属于 集合 j;" 集合 j " 说明这个集合以元素 j 为根;只要一个元素 i 沿着 father 数组能往上找到 j , 那么 i 就属于根为 j 的集合;例如 father = {1, 3, 3, 5, 1, 5};我们希望找到 下标0 所属集合的根, father[0] = 1, father[1] = 3, father[3] = 5, father[5] = 5;于是我们沿着 father 数组找到了 下标0 所属集合的根, 即 下标5;原创 2024-08-08 14:46:38 · 368 阅读 · 0 评论