【问题标题】:Partition in Equivalence sets等价集中的分区
【发布时间】:2013-01-13 22:50:56
【问题描述】:

我有一个简单的非定向树T。我应该找到一个名为A 的路径和另一个名为B 的路径,其中AB 没有公共顶点。目的是最大化Len(A)*Len(B)

我认为这个问题类似于分区问题,除了在分区问题中你有一个集合,但在这里你有一个等价集。解决方法是找到两条未交叉的路径Len(A) ~ Len(B) ~ [n-1/2]。这是正确的吗?我应该如何实现这样的算法?

【问题讨论】:

  • 您的问题令人困惑。如果它是无方向的,你如何定义 len(A) ?同时更正您问题中的拼写错误。

标签: c++ python algorithm dynamic-programming


【解决方案1】:

首先。我认为您以错误的方式看待这个问题。据我了解,您有 graph 相关问题。你要做的是

  1. 构建最大生成树并求长度 L。
  2. 现在,你说两条路径不能有任何共同的顶点,所以我们必须删除一条边来归档它。我假设图中的每条边的宽度都是 1。因此,在删除一条边后,两条路径 A 和 B 的总和为 L-1。现在的问题是您必须删除一条边,以使 len(a) 和 len(b) 的乘积最大化。您可以通过移除 L 的 et most 'middel' 中的边缘来做到这一点。为什么,问题与优化具有固定周长的矩形的面积相同。可以在 here 找到有关该主题的简短 youtube 视频。

请注意,如果您的边权重不等于 1,那么您有一个更难的问题,因为可能存在不止一个最大生成树。但是你也许可以用不同的方式拆分它们,如果是这种情况,给我回信,我会考虑解决方案,但我手头没有。

祝你好运。

【讨论】:

    【解决方案2】:

    我认为如果路径长度只是路径中链接的数量(因此链接没有权重),那么动态规划解决方案几乎是易于处理的。

    从头开始工作。在每个节点上,您需要跟踪限制在该节点处具有根的子树的最佳解决方案对,并且对于每个 k,具有在该节点终止的长度为 k 的路径和最大长度的第二个路径的最佳解决方案在该节点下方的某个位置,并且没有触及路径。

    给定一个节点的所有后代的此信息,您可以为该节点生成类似的信息,然后按照自己的方式找到路由。

    如果您考虑一棵实际上只是一行节点的树,您会发现需要这么多信息。一行节点的最佳解决方案是将其一分为二,因此,如果您仅在该行的长度为 2n + 1 时制定了最佳解决方案,那么您将没有长度为 2n 的行所需的构建块+ 3。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多