去除直连分量后的最小元素数
Posted
技术标签:
【中文标题】去除直连分量后的最小元素数【英文标题】:Minimum number of elements after removing directly connected components 【发布时间】:2019-09-03 20:16:56 【问题描述】:假设我有一个由邻接矩阵表示的无向:
[[0, 1, 0, 0],
[1, 0, 0, 1],
[0, 0, 0, 1],
[0, 1, 1, 0]]
a[i][j] = 1
如果节点 i
和 j
已连接。一项操作包括从图中删除任何两个直接连接的组件。例如,在上图中,您可以删除节点 0 和 1。经过任意次数的操作后,剩余的最小节点数是多少?
显然,我们可以在O(N^2 * 2^N)
中通过暴力破解组件的每一个组合来做到这一点。我在想有一种贪婪的方法可以在O(N)
或O(N^2)
中解决这个问题。
编辑:
如果A[i][j] = 1
,则两个节点直接相连。这不是传递的,所以如果(i, j)
直接连接并且(j, k)
直接连接,(i, k)
不一定直接连接。
【问题讨论】:
“直连组件”是不是一个概念(不同于连接组件)?如果有,它的定义是什么? 问题陈述我不清楚。您是否按照通常的含义使用术语connected component
?因为在那种情况下,two directly connected components
是什么意思?您是否还打算找到一个最佳算法来计算给定输入的剩余数量?在那种情况下是N
矩阵的维度或条目数还是什么?
我的错,见编辑
在编辑中,您为节点定义了形容词“直接连接”,但这个形容词用于“组件”的问题。你叫什么组件?节点?
这听起来像是一个最大匹配,可以通过Edmonds' algorithm找到。
【参考方案1】:
正如 Nico Schelter 所写,您要查找的是 maximum matching。
您可以为此使用blossom algorithm。
【讨论】:
以上是关于去除直连分量后的最小元素数的主要内容,如果未能解决你的问题,请参考以下文章