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)。此边缘的吞吐量是资源量。然后将所有树连接到资源。修改树,使节点吞吐量变为传出边缘吞吐量
然后,树的输出将传递到一个目标节点 (你会试着描述一个贪婪的近似吗?)(你会试着描述一个贪婪的近似吗?)