在无向非循环简单图中找到最小子图

时间:2018-05-04 19:12:30

标签: algorithm graph-theory

我有一个带有N个节点和N-1边的无向非循环简单图(所有节点都相互连接)。

删除边E_i会将图形分成两个分别具有M_iN-M_i个节点的子图。

我正在寻找一种搜索边E_i的算法,以找到最平等的节点分区:我想找min(max(M_i, N-M_i))

2 个答案:

答案 0 :(得分:2)

什么是无向非循环连通图?没错,tree

  1. 将树根植于任意顶点并计算每个顶点的子树的大小。
  2. 设m(i)是第i个顶点的子树的大小。
  3. 假设你有固定的边缘(u,v),深度(u)<深度(V)。然后,简单地计算max(m(v),N-m(v))。
  4. 所有这些值中的最小值就是您的答案。

答案 1 :(得分:1)

我假设图表由边列表表示;从这里我们可以创建相应的节点列表及其相关的边缘。

理由:

  • 将每个节点视为自己的群集,权重为1。
  • 连续"合并"每个叶节点进入其父节点,增加父节点的权重。
  • 在每次迭代中,构建最轻的群集。
  • 继续,直到只剩下两个群集;连接它们的边缘是要移除的边缘。

初​​始化:

  1. 将所有叶节点(订单1)放入列表中。
  2. 通过增加重量对列表进行排序。
  3. 获取列表顶部的叶节点;将其合并到其父级(添加权重)。
  4. 如果结果节点现在是叶子,请将叶子插入列表中的适当位置。
  5. 重复步骤3& 4直到只剩下两个节点;这些形成了所需的分区。