不求甚解之 Spanning Tree
时间:2022-07-22
本文章向大家介绍不求甚解之 Spanning Tree,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
最近在阅读 USB4 的标准,文档中多次提到 Spanning Tree,于是网上搜了搜,大概有了些概念,写下来促进理解。
Spanning Tree(生成树) 在数学上属于 Graph Theory(图论)的范畴,在应用上属于数据结构和算法。
首先从 Graph(图) 的概念入手,简单来说,
- 一个图包含若干 Vertices(顶点,单数 Vertex) 和若干 Edges(边)。
- 顶点的 Degree(度)是指以该顶点为端点的边的数量。有方向的边叫做 Arc (有向边,弧)。
- 如果一个图是由顶点和有向边组成的,就叫做 Directed Graph(有向图)。
概念有点多,还是回到我们关注的生成树。
一个生成树是一个图的子集,它包含了最少数量的边以连接该图中所有的顶点。
如下图所示。
从上图可以对 Spanning Tree 有一个非常直观和浅显的了解。
不过深入的看,一个图的生成树有一些严谨的性质。
- 一个连通图可以有不止一个生成树;
- 一个图的所有可能的生成树,都有相同数量的边和顶点;
- 生成树不会有任何环(cycle,loop);
- 在一个生成树中删除一个边,会导致该图不连通;
- 在一个生成树中增加一个边,会创建一个环;
- 生成树有 n-1 条边,n 是顶点数量;
性质也是一大把,看的人头晕.
在我们能够接触到的实际应用中,比较典型的感觉还是在一个 Connected Weighted Graph(连通赋权图)中寻找它的 Minimum Spanning Tree (MST,最小权值生成树)。例如路径规划、人员分派等应用。
构造最小生成树有两种常用算法。
- Kruskal's Algorithm
- Prim's Algorithm
有了上面的基础,在文档中再遇到 Spanning Tree 这个词汇的时候,脑子里大概就会有个基本的生成树的拓扑结构,有助于更好的理解上下文。
- MVC发布后项目存在于根目录中的子目录中时的css与js、图片路径问题
- ORM中的继承关系映射全解——单表继承体系、一实体一具体表、一实体一扩展表、接口映射
- View与Control间的数据交互
- C#中Dispose和Close的区别!
- C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息
- 你真的会玩SQL吗?查询指定节点及其所有父节点的方法
- ASP.Net MVC框架配置与分析
- MVC利用MvcHtmlString在后台生成HTML
- ExtJs学习笔记(7)_获取GridPanel选中行的详细信息
- ExtJs学习笔记(5)_Ajax示例
- shell脚本之特殊符号总结性梳理
- Centos6.X 下安装并使用VNC的操作记录
- Linux系统是否被植入木马的排查流程梳理
- 添加php的memcached扩展模块
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Laravel框架基于ajax实现二级联动功能示例
- django haystack实现全文检索的示例代码
- 基于Python下载网络图片方法汇总代码实例
- 基于pytorch中的Sequential用法说明
- pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
- tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
- PHP基于cookie实现统计在线人数功能示例
- PHP实现对数字分隔加千分号的方法
- PHP验证类的封装与使用方法详解
- Laravel框架实现的rbac权限管理操作示例
- Laravel框架实现的批量删除功能示例
- PyTorch中model.zero_grad()和optimizer.zero_grad()用法
- 利用PyTorch实现VGG16教程
- PHP添加文字水印或图片水印的水印类完整源代码与使用示例
- Python 分布式缓存之Reids数据类型操作详解