求最小生成树的新算法

不管 prim 算法还是 kruskal 算法都基于 “当前可见最短边” 作贪心策略,但这并不适合分布式并行操作,比方说所有节点一起构建最小生成树,这些算法都显得同步开销过大,甚至导出错误的结果。

最近研究并构建最大流多路径传输协议的模型,也懒得翻书,在早上冒大雨跑步时思考,后来发现 STP(Spanning Tree Protocol) 大致上(并非完全一致)也是这思路。分布式环境下必须要并行操作,而这需要一个新路子。

先说基础,连通图中环路上的最大边一定不在最小生成树中。这很容易用反证法证明:
在这里插入图片描述

这也是个自由度问题,因为事情必须这样,不这样就会有不可能的结果。反之,“一个环的最小边一定在最小生成树中” 却不正确。

环最小边不一定在最小生成树,双环叠加时,同一边可以同时最小和最大正负对冲,不能同时保留,但最大边一定不在最小生成树,同时将它们都砍掉可正正叠加,越砍权重越小:
在这里插入图片描述

基于此,只要找到一个环,砍掉它的最大边,砍掉所有环最大边后,事情就成了。

和最短路径树用广度优先遍历策略不同,遍历连通图的过程中发现所有环路,可采用深度优先策略结合回溯,参考 tarjan 算法,大致是下面代码:

def dfs(node, parent, visited, graph, cycle):
    visited[node] = "grey"
    for neigh in graph[node]:
        if visited[neighbor] == "white":
            dfs(neigh, node, visited, graph, cycle)
        elif visited[neigh] == "grey" and neigh != parent:
            # 发现环路,从当前节点到 neighbor 的路径构成一个环
            # 回溯过程中直接冒泡最大边并标记,代码写不好,算了
            cycle.append(list(reverse_path(path[node]) + [node, neigh, weight]))
    visited[node] = "black"

def find_cycles(graph):
    visited = {node: "white" for node in graph}
    cycles = []
    for node in graph:
        if visited[node] == "white":
            dfs(node, None, visited, graph, cycles)
    return cycles

深度优先遍历结束后,直接把所有标记的边砍掉即可,时间复杂度被边数量,回溯深度影响,控制在 O(EV)。有个细节点,如果一条边同时是两个环的最大边,则需要再砍一刀,否则就需要再遍历一次而不可止:
在这里插入图片描述

以上算法只是一个可行性说明,在更普遍场景,这个算法应由多节点并行完成,各节点相互交互转发 [节点,边,权重] 的 list 信息来判断出环路,由最大边所连接节点自行 block 该边。我说的 STP 大致是这个意思,说的就是这。

仍以老图为例,给出一个交互示例,也用几何表示,给出用肉眼识别环路的方法:
在这里插入图片描述

通过交互消息发现环路,自己阻塞端口,这就是 STP 的绝佳实例。而对于上图右边部分,给一个菌类生长形态的类比:
在这里插入图片描述
浙江温州皮鞋湿,下雨进水不会胖。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/728439.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【配置】Notion自动化备份到github方案

步骤 打开notion网页,获取到需要的值 token_v2 找到请求getSpaces的 Cookie 值 token_v2 space_id 找到请求getSpaces的响应结果space,如下图: file_token 找个页面点击导出,之后拿到这个配置项 注意:配置项会过期&#xff0c…

内容安全复习 9 - 身份认证系统攻击与防御

文章目录 基于生物特征的身份认证系统概述基于生物特征的身份认证 人脸活体检测检测方法未解决问题 基于生物特征的身份认证系统概述 作用:判别用户的身份、保障信息系统安全。 是识别操作者身份的过程,要保证其**物理身份(现实&#xff0…

『 Linux 』 进程间通信概述

文章目录 什么是进程间通信为什么要有进程间通信如何进行进程间通信 什么是进程间通信 进程间通信(IPC)指的是在操作系统重,允许两个或者多个进程之间传递信息或者数据的机制; 进程是操作系统重独立运行的实体,即进程间具有独立性,存在自己的地址空间; 因此进程间默认无法直接访…

mysql8.0找不到my.ini

报错问题解释: MySQL 8.0 在Windows系统中通常不需要 my.ini 文件,因为安装程序会在 %PROGRAMDATA%\MySQL\MySQL Server 8.0\ (通常是 C:\ProgramData\MySQL\MySQL Server 8.0\)创建默认的配置文件。如果你的系统中找不到 my.ini…

oracle 数据库导入dmp文件

荆轲刺秦王 从线上正式环境导出的 dmp 文件,导入到本地 oracle 数据库。 1. 创建用户: CREATE USER hf_chip IDENTIFIED BY hf_chip; 2. 授予 CONNECT 和 RESOURCE 基本权限给新用户。 GRANT CONNECT, RESOURCE TO hf_chip; 3. 创建表空间 CREATE TABLESPACE…

qt界面开发-01我的第一个qt程序

Qt 是一个跨平台的 C开发库。主要用来开发图形用户界面(Graphical User Interface,简 称 GUI)程序。 Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部; Qt 除了可以绘制漂亮的…

Mac磁盘满了去哪里删 Mac清理了回收站还是空间不足怎么办

在使用Mac电脑的过程中,我们经常会遇到磁盘空间不足的问题。尤其是当我们清理了回收站之后,发现剩余空间依然不足。如何有效解决Mac磁盘空间不足的问题,以及当清理回收站后空间仍然不足时应怎么办呢?本文将为大家介绍Mac磁盘满了去…

搭建预约咨询小程序,高效便捷新选择

一、预约咨询小程序是什么? 预约咨询小程序是一款适用于各种生活场景包括医疗、保洁、宠物护理、法律等方面的预约咨询类小程序。 二、这款小程序有什么亮点优势? 预约咨询小程序适用场景广泛,无论是心理咨询、法律咨询,还是宠物…

INFINI Labs 助力开源与教育:免费许可证计划全面升级

在数字化浪潮席卷全球的今天,INFINI Labs 深刻认识到开源项目和教育机构在技术创新与人才培养中的核心作用。因此,我们郑重推出全新升级的免费许可证计划,旨在全球范围内为开源社区和教育界提供有力支持,共同推动软件生态的繁荣与…

.NET C# 操作Neo4j图数据库

.NET C# 操作Neo4j图数据库 目录 .NET C# 操作Neo4j图数据库环境Code 环境 VisualStudio2022 .NET 6 Neo4j.Driver 5.21 Code // 连接设置 var uri "bolt://localhost:7687"; var user "neo4j"; var password "password"; // 请替换为你的…

React+TS前台项目实战(十三)-- 全局常用响应式加载动画Loading组件封装

文章目录 前言Loading组件1. 功能分析2. 代码详细注释3. 使用方式4. 不同尺寸loading动画效果展示 总结 前言 高阶组件有几大优点,其中一个就是渲染劫持,如懒加载,是否显示该元素loading,这在项目中我们经常用到。毫无疑问&#…

无人机校企合作

有没有想过,无人机和校企合作能碰撞出怎样的火花?🔥今天就来给大家揭秘一下这个神秘组合! 无人机,作为现代科技的代表,已经渗透到我们生活的方方面面。而校企合作,更是推动科技创新、培养人才的…

武汉工程大学24计算机考研数据,有学硕招收调剂,而专硕不招收调剂!

武汉工程大学是一所以工为主,覆盖工、理、管、经、文、法、艺术、医学、教育学等九大学科门类的多科性教学研究型大学,是湖北省重点建设高校、湖北省国内一流学科建设高校,入选卓越工程师教育培养计划、中西部高校基础能力建设工程、“新工科…

从零开始:使用ChatGPT快速创作引人入胜的博客内容

随着科技的飞速发展,人工智能逐渐渗透到我们生活的各个领域。无论是商业、教育还是娱乐,AI技术都在以惊人的速度改变着我们。特别是在内容创作领域,人工智能正发挥着越来越重要的作用。今天,我将和大家分享如何从零开始&#xff0…

微软Azure AI更新视频翻译和语音翻译 API 功能!企业适用TTS文本转语音

很高兴与大家分享 Azure AI 语音翻译产品套件的两个重大更新! 分别是视频翻译和增强的实时语音翻译 API。 视频翻译(批量) 微软宣布推出视频翻译预览版,这是一项突破性的服务,旨在改变企业本地化视频内容的方式。 随着…

天润融通CEO吴强:把简单留给客户,复杂留给自己丨数据猿专访

大数据产业创新服务媒体 ——聚焦数据 改变商业 “这是一种‘无奈’,但更是一种责任”。 这句话听起来似乎有点悲情,但用来形容一家技术服务提供商,似乎也在情理之中。细想,实则充满商业智慧。 这句感慨,缘于数据猿专…

养车小程序系统源码,汽修源码,仿途虎养车系统源码,车辆保养小程序系统

用户端+商家端+师傅端 功能介绍: 支持下单上门服务、到店核销,支持单独选择项目、 也支持选择服务人员、和选择门店多种下单方式, 支持上门服务和到店核销两种服务方式,支持自营和多商家联营两种运营模式&#xff…

前端:Element UI 与 Vuetify 的选择

vuetify优势 1、多端适配,Vuetify完全按照Material设计规范进行开发,每一个组件都经过精心设计,具有模块化、响应式和优秀的性能。 使用独特和动态的 布局 自定义您的应用程序,并使用 SASS 变量 自定义您的组件的样式。只需要做下…

八大经典排序算法

前言 本片博客主要讲解一下八大排序算法的思想和排序的代码 💓 个人主页:普通young man-CSDN博客 ⏩ 文章专栏:排序_普通young man的博客-CSDN博客 若有问题 评论区见📝 🎉欢迎大家点赞👍收藏⭐文章 目录 …

昇思25天学习打卡营第3天|数据集 Dataset|数据变换 Transforms

学AI还能赢奖品?每天30分钟,25天打通AI任督二脉 (qq.com) 数据集 Dataset 数据是深度学习的基础,高质量的数据输入将在整个深度神经网络中起到积极作用。MindSpore提供基于Pipeline的数据引擎,通过数据集(Dataset&am…