无向非加权图中的最大顶点对数
Maximal number of vertex pairs in undirected not weighted graph
给定具有任何类型连通性的无向非加权图,即它可以包含 1 到多个组件,有或没有单个节点,每个节点可以有 0 到多个连接,允许循环(但没有从节点到循环本身)。
假设每个顶点只能使用一次,我需要找到最大数量的顶点对,例如。如果图有节点 1、2、3 并且节点 3 连接到节点 1 和 2,答案是一个(1-3 或 2-3)。
我正在考虑以下方法:
- 删除所有单个节点。
- 找到连接边数最少的节点和边数最多的节点的边(如果有多个 - 取其中任何一个),计算并从图中删除这对节点。
- 当图形具有连接节点时重复步骤 2。
我的问题是:
它是否提供了任何情况下的最大对数?我是
担心一些极端情况,比如与某些事物相关的周期
单个或多个路径等
有没有更快更正确的算法?
我可以使用 java 或 python,但伪代码或算法描述完全没问题。
即使在无环图的情况下,您的方法也不能保证提供最大数量的顶点对。例如,在下图中,您的方法将到达 select 边 (B,C)。在那个不幸的选择之后,没有更多的顶点对可供选择,因此您最终会得到大小为 1 的解决方案。显然,最佳解决方案包含两个顶点对,因此您的方法不是最佳的。
您要解决的问题是最大匹配问题(不要与 Maximal Matching Problem 混淆,后者很容易解决):
Find the largest subset of edges S
such that no vertex is incident to more than one edge in S
.
The Blossom Algorithm 解决了 O(EV^2)
中的这个问题。
该算法的工作方式并不简单,它引入了重要的概念(如收缩匹配、森林扩展和开花)来建立最佳匹配。如果您只是想在不完全理解其复杂性的情况下使用该算法,您可以在线找到它的现成的实现(例如 this Python implementation)。
给定具有任何类型连通性的无向非加权图,即它可以包含 1 到多个组件,有或没有单个节点,每个节点可以有 0 到多个连接,允许循环(但没有从节点到循环本身)。
假设每个顶点只能使用一次,我需要找到最大数量的顶点对,例如。如果图有节点 1、2、3 并且节点 3 连接到节点 1 和 2,答案是一个(1-3 或 2-3)。
我正在考虑以下方法:
- 删除所有单个节点。
- 找到连接边数最少的节点和边数最多的节点的边(如果有多个 - 取其中任何一个),计算并从图中删除这对节点。
- 当图形具有连接节点时重复步骤 2。
我的问题是:
它是否提供了任何情况下的最大对数?我是 担心一些极端情况,比如与某些事物相关的周期 单个或多个路径等
有没有更快更正确的算法?
我可以使用 java 或 python,但伪代码或算法描述完全没问题。
即使在无环图的情况下,您的方法也不能保证提供最大数量的顶点对。例如,在下图中,您的方法将到达 select 边 (B,C)。在那个不幸的选择之后,没有更多的顶点对可供选择,因此您最终会得到大小为 1 的解决方案。显然,最佳解决方案包含两个顶点对,因此您的方法不是最佳的。
您要解决的问题是最大匹配问题(不要与 Maximal Matching Problem 混淆,后者很容易解决):
Find the largest subset of edges
S
such that no vertex is incident to more than one edge inS
.
The Blossom Algorithm 解决了 O(EV^2)
中的这个问题。
该算法的工作方式并不简单,它引入了重要的概念(如收缩匹配、森林扩展和开花)来建立最佳匹配。如果您只是想在不完全理解其复杂性的情况下使用该算法,您可以在线找到它的现成的实现(例如 this Python implementation)。