Algorithm 算法到";填写「;树

Algorithm 算法到";填写「;树,algorithm,tree,Algorithm,Tree,我正在寻找满足由一系列树和数据地图描述的需求的最佳方法。基本树可能如下所示: 10 / \ A B A: 7 B: 6 40 30 / | \ / \ 20 C D A C / \ A B 数据地图可能如下所示: 10 / \ A B A: 7 B: 6 40

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

  10
 /  \
A    B
A: 7
B: 6
      40                           30
   /   |   \                      /  \
  20   C    D                    A    C
 /  \
A    B
数据地图可能如下所示:

  10
 /  \
A    B
A: 7
B: 6
      40                           30
   /   |   \                      /  \
  20   C    D                    A    C
 /  \
A    B
在这些示例中,10表示一个需求,而数据列表是我必须处理的。因此,我可以通过给它4个
A
s和6个
B
s,或者每个树5个,等等来“填充”这棵树。现在,我想使用我可用的所有
A
s和
B
s,并且有盈余不一定是个问题(因此我在本例中会给出7和6),但事情会变得更复杂;我们可以有多棵树,树可以有多个级别,其中每个节点(但叶子)都是需求,可能会给我们这样的东西:

  10
 /  \
A    B
A: 7
B: 6
      40                           30
   /   |   \                      /  \
  20   C    D                    A    C
 /  \
A    B
因此,我们需要第一棵树上的
A
B
添加到20,第一棵树上的
C
D
添加到20,第二棵树上的
A
C
添加到30。(没有一棵树应该让同一个字母出现两次。)我们可以在一棵树中有任意数量的级别,也可以有任意数量的树

最后,我们的数据集可能并不完美。在优化之后,可能不可能完全填满这两棵树(我们可能两棵树都没有达到它们的要求,我们可能有一棵树超过了要求,而另一棵树没有达到要求,等等)。我需要的是一种方法,给定这些树和一个列表,列出有多少棵树
a
s、
B
s、
C
s,等,我们有可用的,填补尽可能多的树木。我们已经做了一段时间了,但我们中没有一个人擅长证明“这种方法每次都会奏效”

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

这是最大流量问题
但您需要修改图形。 你有消息来源。源通过边缘连接到您的资源(A、B、C)。此边缘的吞吐量是资源量。然后将所有树连接到资源。修改树,使节点吞吐量变为传出边缘吞吐量 然后,树的输出将传递到一个目标节点

这是一个最大流量问题
但您需要修改图形。 你有消息来源。源通过边缘连接到您的资源(A、B、C)。此边缘的吞吐量是资源量。然后将所有树连接到资源。修改树,使节点吞吐量变为传出边缘吞吐量
然后,树的输出将传递到一个目标节点

(你会试着描述一个贪婪的近似吗?)(你会试着描述一个贪婪的近似吗?)