去除直连分量后的最小元素数

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 如果节点 ij 已连接。一项操作包括从图中删除任何两个直接连接的组件。例如,在上图中,您可以删除节点 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。

【讨论】:

以上是关于去除直连分量后的最小元素数的主要内容,如果未能解决你的问题,请参考以下文章

去除信号中的直流分量

去除信号中的直流分量

新笔记

最小生成数(并查集)Kruskal算法

Problem02 输出素数

求100之内的素数