【发布时间】: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找到。
标签: algorithm