【问题标题】:Algorithm to "fill" trees“填充”树的算法
【发布时间】:2016-06-10 04:28:15
【问题描述】:

我正在寻找满足一系列树和数据地图所描绘的需求的最佳方式。一棵基本的树可能如下所示:

  10
 /  \
A    B

数据图可能如下所示:

A: 7
B: 6

在这些示例中,10 表示要求,而数据列表是我必须使用的。所以,我可以通过给它 4 个As 和 6 个Bs,或每个 5 个等来“填充”这棵树。现在,我想使用所有可用的 As 和 Bs我,并且有盈余不一定是问题(所以在这种情况下我将给出 7 和 6),但事情变得更加复杂;我们可以有多个树,树可以有多个层次,除了叶子之外的每个节点都是需求,可能会给我们这样的东西:

      40                           30
   /   |   \                      /  \
  20   C    D                    A    C
 /  \
A    B

所以我们需要将第一棵树上的 AB 添加到 20,将第一棵树上的 CD 添加到 20,以及 AC在第二棵树上加到 30。(没有一棵树应该有相同的字母出现两次。)我们可以在一棵树中拥有任意数量的级别,或者任意数量的树。

最后,我们的数据集可能并不完美。优化后可能无法将两棵树都填满(我们可能两棵树都达不到它们的要求,我们可能有一棵树超过了要求,而另一棵树却达不到要求,等等)我需要的是一种方法,给定这些树以及我们有多少As、Bs、Cs 等可用的列表,填满尽可能多的树。我们已经有一段时间了,但我们中没有人擅长证明“这种方式每次都有效”。

有谁知道这样做的方法吗?

【问题讨论】:

  • (你会尝试描述一个贪心近似吗?)

标签: algorithm tree


【解决方案1】:

这是一个最大流量问题。 https://en.wikipedia.org/wiki/Maximum_flow_problem
但是你需要修改图表。 你有一个来源。源通过边连接到您的资源(A、B、C)。该边的吞吐量是资源的数量。然后你将所有的树连接到资源。您修改树,使节点吞吐量达到传出边缘吞吐量 然后你的树的输出到一个目标节点。

【讨论】:

    猜你喜欢
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    相关资源
    最近更新 更多