【问题标题】:Building a graph given constraints在给定约束条件下构建图
【发布时间】:2012-03-05 15:01:45
【问题描述】:

给定:

  • 节点列表
  • 这些节点可能连接到的节点列表
  • 每个节点必须连接到一个且仅一个其他节点的约束(单向连接)
  • 所有节点必须可以从任意节点开始访问

如果可以构造或以其他方式给我可能的节点数最多的图,是否有一种算法可以给我这样的图?

是否可以在多项式时间内完成?

否则,有没有一种算法可以足够快地给出足够好的解决方案?

【问题讨论】:

  • 多项式时间,当然 - O(n(n-1)/2),除非约束本身取决于节点数。
  • 这是一个标准问题;我想你很困惑,既然你得到了节点列表,为什么还要问最大数量的节点呢?节点不会改变......什么足够快?是的,你可以在多项式时间内做到这一点。
  • 第二个节点列表,是map吗? list1 中的每个节点都可以连接到 list2 中的任何节点吗?或任何细节?
  • 我忘记了一个约束,我需要所有节点都可以从所有节点访问。我不能有 A->B->C->A 和 D->E->F->D
  • 我猜3.请求应该更新为:“每个节点必须连接到其他两个节点”或类似的东西。

标签: algorithm graph graph-algorithm


【解决方案1】:

如果我理解正确,您正在尝试查找Hamiltonian cycle,即NP-Complete problem

为什么问题等同于寻找哈密顿循环:

n 为节点数。鉴于每个节点都连接到一个其他节点的约束,该解决方案具有n 边。因为每个节点都必须是可达的,所以每个节点将是至少一条边的尾部。但是该解决方案具有n 边,因此每个节点将是恰好一条边的尾部。因此,解决方案是路径的联合。所有边都必须可以从所有其他边到达的约束使解成为哈密顿循环。

【讨论】:

  • 这是正确的:给定的问题相当于找到一个哈密顿循环。如果你能说明为什么它们是等价的,那就太好了。
  • 这不是哈密顿循环,也可能是最小哈密顿路径。 NP-hard的旅行推销员
  • @amit:解决给定约束的唯一方法是创建哈密顿循环。您的“所有叶子后来都连接到根的树”的解决方案不符合约束条件,因为根需要连接到多个节点。
  • @interjay - 我已经编辑了我的答案,以说明为什么这个问题会归结为寻找哈密顿循环。
  • +1 好答案,可惜错误的答案被接受了。
【解决方案2】:

搜索有向最小生成树算法。

这看起来不错: http://www.utdallas.edu/~rbk/papers/dmdst.pdf

问题也是 NP 难的。

编辑: 编辑后是有向哈密顿循环问题http://www.proofwiki.org/wiki/Directed_Hamilton_Cycle_Problem_is_NP-complete

【讨论】:

  • 嘿,鉴于您对最大连接数的限制,这已简化为旅行推销员问题。
  • 有向生成树不符合给定的约束,即任何节点都可以从任何其他节点到达。例如,无法从任何其他节点访问根。
  • @interjay 是的,但是这个条件是后来添加的;)
  • 嗯,它是在您回答前 7 分钟添加的。当边没有权重时,谈论最小生成树和旅行商似乎也不合适。
  • @interjay 不,通过使用 weight = 1,两者都可以在没有权重的情况下使用。但是现在我看到没有限制图形应该是最小的,我认为有,所以我们回到基本的哈密​​顿循环。大声笑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 2021-05-23
相关资源
最近更新 更多