我认为这对于mathoverflow来说还不够,所以我想我会在这里试试。它有一个编程问题,所以它的主题就是它。
我有一个图形(如数学一样),其中我有许多顶点,A,B,C ..每个都有一个负载“值”,这些顶点通过某种任意拓扑连接(至少有生成树)。该问题的目的是在每个顶点之间传递负载,优选地使用尽可能小的流量。
我希望知道每条边的传输值。
我想到的问题的解决方案是将其视为传热问题,迭代地传递载荷,或以某种方式求解热量方程,计算沿每个边缘消散的载荷量。因此,直到网络达到稳定状态的热传递量应该产生结果。
虽然我认为这会奏效,但这似乎是一个愚蠢的解决方案。我想知道是否有人可以指出我的参考或样本问题 - 我不确定要搜索哪些关键字。
我无法看到如何将问题耦合为单一问题或网络流问题 - 每个边缘都有无限容量,每个节点也是如此。有两个同时最小化的问题要解决,所以单纯形似乎不适用??
答案 0 :(得分:1)
如果你有生成树,那么就有一个O(n)解决方案。
计算平均值。 (最后,每个节点都将具有此值。)然后迭代叶子:计算该叶子所需的值的变化(平均值 - 值),将该更改添加到叶子,将其(作为流程)分配给边缘将该叶子连接到树,并从另一个节点中减去它。从树上移除那片叶子和边缘(当然不是从图表中删除);如果另一个节点在树中只有一个剩余边缘,则它可能成为新叶子。
当你到达最后一个节点时,如果你已经完成了算术运算,它将以平均值结束,就像所有其他节点一样。