美丽的图论

news2024/11/24 9:17:02

**美丽的图论 **

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.coloradmin.cn/o/1056939.html

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

相关文章

Python机器学习-灵敏度分析

文章目录 灵敏度分析详细步骤单参数分析 灵敏度分析详细步骤 灵敏度分析是一种用于确定输入参数变化对模型输出结果的影响程度的方法。以下是进行灵敏度分析的一般步骤: 确定模型:选择需要进行灵敏度分析的模型,该模型必须具有可变参数和可…

算法框架-LLM-1-Prompt设计(一)

原文:算法框架-LLM-1-Prompt设计(一) - 知乎 目录 收起 1 prompt-engineering-for-developers 1.1 Prompt Engineering 1.1.1 提示原则 1. openai的环境 2. 两个基本原则 3. 示例 eg.1 eg.2 结构化输出 eg.3 模型检验 eg.4 提供示…

OpenCV实现视频的读取、显示、保存

目录 1,从文件中读取视频并播放 1.2代码实现 1.3效果展示 2,保存视频 2.1 代码实现 2.2 结果展示 1,从文件中读取视频并播放 在OpenCV中我们需要获取一个视频,需要创建一个VideoCapture对象,指定你要读取的视频文件&am…

八大排序(三)堆排序,计数排序,归并排序

一、堆排序 什么是堆排序:堆排序(Heap Sort)就是对直接选择排序的一种改进。此话怎讲呢?直接选择排序在待排序的n个数中进行n-1次比较选出最大或者最小的,但是在选出最大或者最小的数后,并没有对原来的序列…

聊聊并发编程——线程池

目录 Java线程池 处理流程 线程池主要参数 常见的拒绝策略 execute和submit区别 关闭线程池 常见的线程池 newSingleThreadExecutor newFixedThreadPool newCachedThreadPool newScheduledThreadPool 线程池的状态 Java线程池 运用场景最多的并发框架,…

【面试总结大纲】

面试 springSpring AOP的具体实现核心概念分别指的是什么?基于注解的切面实现主要包括以下几个步骤:两个切面,它们之间的顺序是怎么控制的 springmvc的工作流程设计模式原则Spring 框架中用到了哪些设计模式? spring Spring AOP的具体实现 …

讲讲项目里的仪表盘编辑器(三)布局组件

布局容器处理 看完前面两章的讲解,我们对仪表盘系统有了一个大概的理解。接着我们讲讲更深入的应用。 上文讲解的编辑器只是局限于平铺的组件集。而在编辑器中,还会有一种组件是布局容器。它允许其他组件拖拽进入在里面形成自己的一套布局。典型的有分页…

如何实现电脑语音输入功能?

现在的手机都具备语音输入功能,并且识别率非常高,语音输入是目前最快速的文字输入方式,但是电脑上却无语音输入的功能,那么如何实现在电脑端也可进行语音输入的梦想呢?现在介绍一款小工具“书剑电脑语音输入法”&#…

Llama2-Chinese项目:4-量化模型

一.量化模型调用方式   下面是一个调用FlagAlpha/Llama2-Chinese-13b-Chat[1]的4bit压缩版本FlagAlpha/Llama2-Chinese-13b-Chat-4bit[2]的例子: from transformers import AutoTokenizer from auto_gptq import AutoGPTQForCausalLM model AutoGPTQForCausalLM…

DDD项目落地之充血模型实践

一、背景 充血模型是DDD分层架构中实体设计的一种方案,可以使关注点聚焦于业务实现,可有效提升开发效率、提升可维护性; 二、DDD项目落地整体调用关系 调用关系图中的Entity为实体,从进入领域服务(Domin)…

基于Java的健身房会员管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

【算法挨揍日记】day10——704. 二分查找、34. 在排序数组中查找元素的第一个和最后一个位置

704. 二分查找 704. 二分查找 题目描述: 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 解题思路&…

使用序列到序列深度学习方法自动睡眠阶段评分

深度学习方法,用于使用单通道脑电图进行自动睡眠阶段评分。 def build_firstPart_model(input_var,keep_prob_0.5):# List to store the output of each CNNsoutput_conns []######### CNNs with small filter size at the first layer ########## Convolutionnetw…

Ant-Design-Vue:a-range-picker组件国际化配置

在使用Ant-Design-Vue中的时间范围选择器开发个人项目时,发现默认显示为英文。如何解决呢? date-picker分类 Antd-Vue提供了DatePicker、MonthPicker、RangePicker、WeekPicker 几种类型的时间选择器,分别用于选择日期、月份、日期范围、周范…

JSON的MIME媒体类型是application/json

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

最新AI智能问答系统源码/AI绘画系统源码/支持GPT联网提问/Prompt应用+支持国内AI提问模型

一、AI创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的AI智能问答系统和AI绘画系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图…

总部位于德国的拉丁美洲在线杂货配送服务商Jokr完成5000万美元D轮融资

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于德国柏林的拉丁美洲在线杂货配送服务提供商Jokr今日宣布已完成5000万美元D轮融资。 本轮融资完后Jokr的估值已达到8亿美金,本轮融资由convialit Ventures领投,Lomba…

XDM,10.1

XDM,今天是国庆,就没有其他啥事情,祝大家国庆节快乐,玩的开心。 这两天放假也有时间捣鼓自己的事情了,挺开心的,第一件事就是把自己的一个小开发板修好了,然后自己的小os也能跑了几个假的线程。…

基于Javaweb的护肤品推荐系统 /基于ssm的护肤品销售系统

摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&a…

RabbitMQ之发布确认高级

RabbitMQ之发布确认高级 一、发布确认 SpringBoot 版本1.1 确认机制方案1.2 代码架构图1.3 配置文件1.4 添加配置类1.5 消息生产者1.6 回调接口1.7 消息消费者1.8 结果分析 二、回退消息2.1 Mandatory 参数2.2 消息生产者代码2.3 回调接口2.4 结果分析 三、备份交换机3.1 代码架…