首页 > 编程语言 >生成树算法

生成树算法

时间:2024-04-08 21:12:32浏览次数:28  
标签:连通 range 生成 算法 inf 节点 dis

一、Prim算法

概论

适合稠密图,不进行堆优化的时间复杂度是\(O(n^2)\),进行堆优化则是\(O(mlogn)\)
每次将离连通部分最近的点点对应的边加入的连通部分,连通部分逐渐扩大,最后将整个图连通起来,并且边长之和最小,基于一种贪心的策略。
证明的引理
对于任意切割 (S, V-S),其中 S 是生成树 T 的节点集合,V-S 是未包含在 T 中的节点集合,存在一条横切边连接 S 和 V-S 中的顶点,并且该边的权重是最小的。

image
礼貌拿图:@Hasity【https://www.acwing.com/solution/content/38312/】
如果像记录生成树的边的话,可以用一个pre数组,在更新时记录前驱节点!

代码

# prim算法求最小生成树

from math import inf
n,m = map(int,input().split())
g = [[inf] * (n + 1) for _ in range(n + 1)]
for _ in range(m):
    u,v,w = map(int,input().split())
    g[u][v] = g[v][u] = min(g[u][v],w)

vis = [False] * (n + 1)
dis = [inf] * (n + 1)

ans = 0
# dis[i]保存的是节点i与已连通树的最短距离
# 首先将1节点作为生成树开始的起点
dis[1] = 0

for _ in range(n):
    t = -1
    # 寻找距离连通部分距离最短的节点将其纳入生成树的范围
    for i in range(1,n + 1):
        if not vis[i] and (t == -1 or dis[t] > dis[i]):
            t = i
    vis[t] = True
    # 如果一个点距离已结成的生成树的距离为inf,那么说明不存在一棵树将所有点串起来
    if dis[t] == inf:
        print("impossible")
        exit()
    # 加 上 那 条 边
    ans += dis[t]
    # 用新加入t点去更新剩余的点到生成树的最小距离!
    for j in range(1,n + 1):
        if dis[j] > g[t][j]:
            dis[j] = g[t][j]
print(ans)

标签:连通,range,生成,算法,inf,节点,dis
From: https://www.cnblogs.com/gebeng/p/18122591

相关文章

  • 文心一言 VS 讯飞星火 VS chatgpt (232)-- 算法导论17.1 3题
    三、假定我们对一个数据结构执行一个由n个操作组成的操作序列,当i严格为2的幂时第i个操作的代价为i,否则代价为1。使用聚合分析确定每个操作的摊还代价。文心一言:为了进行聚合分析并确定每个操作的摊还代价,我们需要理解操作序列的性质,特别是代价的变化规律。根据题目描......
  • 基于深度学习的海洋鱼类识别算法matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本MATLAB2022a 3.算法理论概述        深度学习在海洋鱼类识别中常采用卷积神经网络(ConvolutionalNeuralNetworks,CNNs)。CNN由多个层级组成,包括卷积层、池化层、全连接层以及分类层。典型流程如下:   训练......
  • 音频混音算法及应用
     一、音频算法和原理简介在视频会议系统中,音频模块有着很大的重要性,也是评测一个视频会议系统质量的重要方面,相比起视频模块来说,音频质量的好坏涉及到会议内容,有可能会影响到交流的准确性,而质量稍微差一点的视频则是可以承受的.在音频模块中,传统上是使用控制发言权的......
  • 懒农可视化代码生成器
              我开发了一款为只懂得一般电脑操作的人设计的代码生成器懒农,经过前一段时间推广,根据一些用户意见对功能做了修改,目前已更新发布新版,欢迎各位试用反馈。......
  • asp.core生成docker镜像(使用本地nuget)
    生成Dockerfilevs自带生成Dockerfile功能了使用本地的nuget包加入nuget配置文件NuGet.ConfigNuGet.Config配置文件,配置地址如果没有配置生成镜像会报错,没找到package生成镜像生成Docker映像(想深入了解,可以网上看看dockerbuild的参数)dockerbuild-f"C:\Projec......
  • 数字图像处理项目——模糊图像边缘检测算法设计及实现(论文/代码)
    完整的论文代码见文章末尾以下为部分内容摘要本研究旨在针对大脑核磁图像中的黑色腔体进行有效分割,以提供可靠的腔体定位和分析。为此,采用了三种常用的图像分割方法:8邻域区域生长法、Canny算子边缘检测和8邻域边界跟踪法。首先,应用8邻域区域生长法来识别具有相似性质的......
  • 【数据结构与算法】:堆排序和选择排序
    1.堆排序堆排序是一种比较复杂的排序算法,因为它的流程比较多,理解起来不会像冒泡排序和选择排序那样直观。1.1堆的结构要理解堆排序,首先要理解堆。堆的逻辑结构是一棵完全二叉树,物理结构是一个数组。(如果不知道什么是二叉树,请前往我的主页查看)。所以堆是一个用数组表......
  • TSINGSEE青犀边缘计算AI智能分析网关V4客流统计算法的配置步骤及使用
    TSINGSEE青犀AI智能分析网关V4内置了近40种AI算法模型,支持对接入的视频图像进行人、车、物、行为、烟火等实时检测分析,上报识别结果,并能进行语音告警播放。硬件支持RTSP、GB28181协议、以及厂家私有协议接入,可兼容市面上常见的厂家品牌设备,可兼容IPC、网络音柱等。同时也支持智能......
  • TSINGSEE青犀边缘计算AI智能分析网关V4客流统计算法的配置步骤及使用
    TSINGSEE青犀AI智能分析网关V4内置了近40种AI算法模型,支持对接入的视频图像进行人、车、物、行为、烟火等实时检测分析,上报识别结果,并能进行语音告警播放。硬件支持RTSP、GB28181协议、以及厂家私有协议接入,可兼容市面上常见的厂家品牌设备,可兼容IPC、网络音柱等。同时也支持智......
  • 最短路算法
    最短路算法一、Dijkstra简介用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先遍历与贪心思想,如果权重为1的话就是BFS寻找最短路了),直到扩展到终点为止。按长度递增的次序产生最短路径适用于正权图,可以有环,不可以有负权边代码fr......