美丽的图论

**美丽的图论 **

Prüf 😉

对于 n 个顶点上的树的数量

n^(n-2),这是凯莱公式,用于计算 n 个顶点上的树的数量,被放置在一个由 4 个标记顶点组成的圆圈中。

使用 Figma 制作

在图论中,树只是一个没有环的图。

树在离散数学的许多现实世界应用中都很重要。从大脑中的神经元结构到机器学习中的决策树和计算机科学中的二叉搜索树

更不用说你的亲人为之自豪的传统家谱了!

图论中的树有许多应用:Pixabay |Wikimedia Commons

n 个标记顶点上的树的数量由凯莱公式 n^(n − 2) 给出。

但是为什么会这样呢?

例如,这个公式告诉我们,使用从 1 到 4 标记的顶点,应该有 16 个树。

这实际上是正确的,这 16 个树在页眉图像中显示出来。但为什么树的数量应该是 4 × 4?

如果我们有从 1 到 5 标记的顶点,为什么应该有 5 × 5 × 5 = 125 个树?

如果我们有从 1 到 6 标记的顶点,为什么应该有 6 × 6 × 6 × 6 = 1296 个树?

让我们以 6 个顶点的示例进行调查!🧐

6 × 6 × 6 × 6 是从哪里来的?这意味着我们有 6 个连续选择的选项。这些连续的 4 个选择是什么?为什么有 6 个?

这就是 Prüfer 序列发挥作用的地方。现在你终于可以欣赏标题中的双关语了 🙄🤣

Prüfer 序列是一种巧妙的方法,可以将具有 n 个顶点的任何树编码成长度为 (n − 2) 的序列,其中每个数字可以取 1 到 n 中的任何值。

下面显示了一些 Prüfer 序列及其对应的树的示例。

因为每个数字可以取 1 到 n 中的任何值,长度为 (n − 2) 的 Prüfer 序列的数量显然是 n^(n − 2)。

现在让我们解释为什么每个树都有唯一的 Prüfer 序列,反之亦然。

我们将使用上面显示的第三个示例,Prüfer 序列 {6, 6, 3, 1}。为给定的树创建 Prüfer 序列非常容易。

只需按升序连续删除树的叶子节点。树的叶子是度为 1 的顶点。

稍微正式一点:

因为我们会一直删除顶点,直到 T 的度为 2,所以这个算法必须经过 (n − 2) 次迭代,并输出一个包含 (n − 2) 个数字的列表。

下面的图表显示了从相应树中获取 Prüfer 序列 {6, 6, 3, 1} 需要的 4 个迭代。

从相应树中获取 Prüfer 序列 {6, 6, 3, 1} 需要 4 个迭代。 现在来验证每个树获得的 Prüfer 序列都是唯一的。

如果我们仔细观察这个算法,实际上我们会发现每个步骤都只有一种选择。

在每个步骤中,具有最小标签的度为 1 的顶点是唯一的。而这个顶点的邻居是唯一的,因为这个顶点的度为 1

这种唯一性意味着将树映射到 Prüfer 序列的函数是单射的(没有两个树输出相同的 Prüfer 序列)。

但为了证明 Prüfer 序列的数量等于标记树的数量,我们需要进一步证明该函数是双射的。

也就是说,我们需要证明每个 Prüfer 序列也可以映射到唯一的树。

从序列构建树的算法本质上与我们之前所做的相反,但似乎更复杂,因为我们需要输出一棵树,而不仅仅是一个数字列表。

以下是显示与 Prüfer 序列 {6,6,3,1} 相关联的唯一树所需的五个步骤的图表。

为了好玩,再来一个例子。下面的图表显示了与 Prüfer 序列 {4,3,2,1} 相关联的唯一树所需的五个步骤。

再次,通过观察算法,我们可以看到每个步骤实际上只有一种选择。在每个步骤中,必须有一个唯一的 x,它是 L 中最小的标签,必须有一个唯一的 y,它是 P 中的第一个标签。

这证明了每个 Prüfer 序列也可以映射到唯一的树,因此标记树与 Prüfer 序列之间的映射是双射的。因此,Prüfer 序列的数量等于标记树的数量,即 n^(n − 2)。

现在,Mr. Prüfer (Heinz) 是如何在 1918 年提出这个美丽而巧妙的算法的直觉呢?

Prüfer 序列在图论中具有广泛的应用场景,特别是与标记树相关。以下是一些 Prüfer 序列的应用场景:

  1. 计算树的数量: Prüfer 序列可以用来计算给定顶点数的所有可能的标记树的数量。通过使用凯莱公式(Cayley's formula) n^(n − 2),其中 n 是顶点数,可以确定树的数量。这在组合数学和图论中非常有用。

  2. 网络拓扑分析: 在计算机网络和通信领域,Prüfer 序列可以用于分析网络拓扑结构和寻找最小生成树。它有助于理解网络中的连接方式和通信路径。

  3. 生物学和神经科学: Prüfer 序列被用来分析生物学中的分子结构和神经系统的连接。在生物信息学中,它可以用于描述蛋白质或基因之间的相互作用。

  4. 编码理论: Prüfer 序列的概念与编码理论相关,可以用于设计和分析错误检测和纠正编码。

  5. 排列和组合: Prüfer 序列可用于生成排列和组合的问题,特别是在解决与图论相关的组合问题时。

  6. 数据压缩: 在一些数据压缩算法中,Prüfer 序列可以用来表示树结构,从而减少数据存储需求。

总的来说,Prüfer 序列是一个强大的工具,可用于解决多种与图论、组合数学和网络结构相关的问题。它提供了一种紧凑而有效的方式来表示和分析树形结构,因此在多个领域都有实际应用。

当进行网络拓扑分析时,通常需要使用特定的网络拓扑数据来执行各种操作,例如查找最小生成树、计算网络中的节点关系、查找环路等。下面是一个Python示例,演示如何使用NetworkX库来创建一个简单的网络拓扑图并执行一些基本的分析操作。

首先,确保您已经安装了NetworkX库。您可以使用以下命令来安装它:

pip install networkx

接下来,以下是一个Python示例代码,用于创建一个简单的网络拓扑图,并查找最小生成树以及查找节点之间的最短路径:

import networkx as nx
import matplotlib.pyplot as plt# 创建一个空的无向图
G = nx.Graph()# 添加节点
G.add_node("A")
G.add_node("B")
G.add_node("C")
G.add_node("D")
G.add_node("E")# 添加边(连接节点)
G.add_edge("A", "B", weight=2)
G.add_edge("A", "C", weight=1)
G.add_edge("B", "C", weight=3)
G.add_edge("B", "D", weight=5)
G.add_edge("C", "E", weight=4)
G.add_edge("D", "E", weight=7)# 绘制图形
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_size=700, node_color='skyblue', font_size=10, font_color='black')
labels = nx.get_edge_attributes(G, 'weight')
nx.draw_networkx_edge_labels(G, pos, edge_labels=labels)# 查找最小生成树
minimum_spanning_tree = nx.minimum_spanning_tree(G)
print("Minimum Spanning Tree Edges:")
for edge in minimum_spanning_tree.edges(data=True):print(edge)# 查找节点之间的最短路径
shortest_path = nx.shortest_path(G, source="A", target="D", weight="weight")
print("Shortest Path from A to D:", shortest_path)# 计算最短路径长度
shortest_path_length = nx.shortest_path_length(G, source="A", target="D", weight="weight")
print("Shortest Path Length from A to D:", shortest_path_length)# 显示图形
plt.show()

这个示例首先创建了一个简单的无向图,然后添加了节点和边。接下来,它使用NetworkX库来查找最小生成树和节点之间的最短路径。

A 到 D 之间的最小生成树:D: ['A', 'B', 'D']

A 到 D 之间的最短路径是:7

详见输出👇

Minimum Spanning Tree Edges:
('A', 'C', {'weight': 1})
('A', 'B', {'weight': 2})
('B', 'D', {'weight': 5})
('C', 'E', {'weight': 4})
Shortest Path from A to D: ['A', 'B', 'D']
Shortest Path Length from A to D: 7

最后,通过matplotlib库绘制了网络拓扑图,并在图上标记了权重信息。

请注意,这只是一个简单的示例,用于演示如何使用NetworkX进行网络拓扑分析。

在实际应用中,您可能会处理更复杂的网络结构和更多的数据。根据您的具体需求,您可以进一步扩展和自定义此示例。

这对我来说是一个谜!如果您对其背后的直觉有想法,请随时留下评论。 😊

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MATLAB-基于直方图优化的图像去雾技术】

【MATLAB-基于直方图优化的图像去雾技术】 1 直方图均衡2 程序实现3 局部直方图处理 1 直方图均衡 直方图是图像的一种统计表达形式。对于一幅灰度图像来说,其灰度统计直方图可以反映该图像中不同灰度级出现的统计情况。一般而言,图像的视觉效果和其直方…

javaWeb学生信息管理

一、引言 学生信息管理系统是基于Java Web技术开发的一个全栈应用,用于管理学生的基本信息。本系统采用Eclipse作为开发工具,Navicat用于MySQL数据库管理,运行在JDK1.8、Tomcat9.0、MySQL8.0环境下。前端采用JavaScript、jQuery、Bootstrap4…

五款可替代163邮箱的电子邮件服务

在众多邮箱品牌中,163邮箱作为中国最早的邮箱服务提供商之一,其出海之路并不顺利。本文将探讨163邮箱出海的劣势,并介绍一些替代品,以帮助用户更好地选择适合自己的邮箱服务。 “163邮箱的替代品有哪些?外贸行业适合选…

Go_原子操作和锁

原子操作和锁 本文先探究并发问题,再探究锁和原子操作解决问题的方式,最后进行对比。 并发问题 首先,我们看一下程序 num该程序表面看上去一步就可以运行完成,但是实际上,在计算机中是分三步运行的,如下…

世界第一ERP厂商SAP,推出类ChatGPT产品—Joule

9月27日,世界排名第一ERP厂商SAP在官网宣布,推出生成式AI助手Joule,并将其集成在采购、供应链、销售、人力资源、营销、数据分析等产品矩阵中,帮助客户实现降本增效。 据悉,Joule是一款功能类似ChatGPT的产品&#xf…

国庆day2---select实现服务器并发

select.c&#xff1a; #include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr,"__%d__:",__LINE__);\perror(msg);\ }while(0)#define IP "192.168.1.3" #define PORT 8888int main(int argc, const char *argv[]) {//创建报式套接字socketi…

S-Clustr(影子集群)僵尸网络@Мартин.

公告 项目地址:https://github.com/MartinxMax/S-Clustr/tree/V1.0.0 1.成功扩展3类嵌入式设备,组建庞大的"僵尸网络" |——C51[开发中] |——Arduino |——合宙AIR780e[开发中] 2.攻击者端与服务端之间通讯过程全程加密,防溯源分析 3.Generate一键自动生成Arduino…

【机器学习】熵和概率分布,图像生成中的量化评估IS与FID

详解机器学习中的熵、条件熵、相对熵、交叉熵 图像生成中常用的量化评估指标通常有Inception Score (IS)和Frchet Inception Distance (FID) Inception Score (IS) 与 Frchet Inception Distance (FID) GAN的量化评估方法——IS和FID&#xff0c;及其pytorch代码

计算机组成原理期末复习

第一章 上机前的准备&#xff1a;建立数学模型、确定计算方法和编制解题程序n位操作码有 2 n 2^n 2n种不同操作主储存器&#xff08;主存/内存&#xff09;包括存储体M、各种逻辑部件及控制电路。储存体有多个储存单元&#xff0c;储存单元有多个储存元件&#xff0c;每个存储…

《视觉 SLAM 十四讲》V2 第 4 讲 李群与李代数 【什么样的相机位姿 最符合 当前观测数据】

P71 文章目录 4.1 李群与李代数基础4.1.3 李代数的定义4.1.4 李代数 so(3)4.1.5 李代数 se(3) 4.2 指数与对数映射4.2.1 SO(3)上的指数映射罗德里格斯公式推导 4.2.2 SE(3) 上的指数映射SO(3),SE(3),so(3),se(3)的对应关系 4.3 李代数求导与扰动模型4.3.2 SO(3)上的李代数求导…

分布式并行训练(DP、DDP、DeepSpeed)

[pytorch distributed] 01 nn.DataParallel 数据并行初步 数据并行 vs. 模型并行 数据并行&#xff1a;模型拷贝&#xff08;per device&#xff09;&#xff0c;数据 split/chunk&#xff08;对batch切分&#xff09; 每个device上都拷贝一份完整模型&#xff0c;每个device分…

spark SQL 任务参数调优1

1.背景 要了解spark参数调优&#xff0c;首先需要清楚一部分背景资料Spark SQL的执行原理&#xff0c;方便理解各种参数对任务的具体影响。 一条SQL语句生成执行引擎可识别的程序&#xff0c;解析&#xff08;Parser&#xff09;、优化&#xff08;Optimizer&#xff09;、执行…

RabbitMQ核心总结

AMQP协议核心概念 RabbitMQ是基于AMQP协议的&#xff0c;通过使用通用协议就可以做到在不同语言之间传递。 server&#xff1a;又称broker&#xff0c;接受客户端连接&#xff0c;实现AMQP实体服务。 connection&#xff1a;连接和具体broker网络连接。 channel&#xff1a…

堆栈与堆(Stack vs Heap)有什么区别?

​编写有效的代码需要了解堆栈和堆内存&#xff0c;这使其成为学习编程的重要组成部分。不仅如此&#xff0c;新程序员或职场老手都应该完全熟悉堆栈内存和堆内存之间的区别&#xff0c;以便编写有效且优化的代码。 这篇博文将对这两种内存分配技术进行全面的比较。通过本文的…

网络协议--链路层

2.1 引言 从图1-4中可以看出&#xff0c;在TCP/IP协议族中&#xff0c;链路层主要有三个目的&#xff1a; &#xff08;1&#xff09;为IP模块发送和接收IP数据报&#xff1b; &#xff08;2&#xff09;为ARP模块发送ARP请求和接收ARP应答&#xff1b; &#xff08;3&#xf…

Linux文件系统及命令 | 实用操作指令汇总

目录 ctrl c 强制停止与ctrl d 退出或登出 history&#xff1a;历史命令搜索 clear:清屏 ln命令&#xff1a;创建软硬连接 cat命令&#xff1a;显示文件命令 less命令&#xff1a;查看大文件 grep命令&#xff1a;正则表达式使用 sort命令&#xff1a;排序 uniq命令…

JSON的MIME媒体类型是application/json

JSON&#xff08;全称 JavaScript Object Notation&#xff09;即JavaScript对象表示法&#xff0c;通知使用application/json媒体类型。 目录 1、JSON介绍 2、JSON语法 3、实践总结 运行环境&#xff1a; Windows-7-Ultimate-x64、Windows-10-BusinessEditions-21h2-x64 1…

区块链实验室(27) - 区块链+物联网应用案例

分享最新的区块链物联网应用案例&#xff1a;HPCLS-BC

【Kafka专题】Kafka快速实战以及基本原理详解

目录 前言课程内容一、Kafka介绍1.1 MQ的作用1.2 为什么用Kafka 二、Kafka快速上手2.1 实验环境2.2 单机服务体验2.3 认识Kafka模型架构2.4 Kafka集群2.5 理解服务端的Topic、Partion和Broker2.6 章节总结&#xff1a;Kafka集群的整体结构 三、Kraft集群&#xff08;拓展&#…

集群-Nacos-2.2.3、Nginx-1.24.0集群配置

Nacos集群 高可用 Nginx 集群Nacos 集群&#xff08;至少三个实例&#xff09;高可用数据库集群&#xff08;取代 Nacos 内嵌数据库&#xff09; Nacos 集群搭建 集群使用版本&#xff1a; Nginx 1.24.0 Nacos 2.2.3 服务器IP服务器版本Nginx18.18.18.40CentOS-7.9MySQL18.18.…