Algorithm 有向循环图或竞赛(图)中的边消去

Algorithm 有向循环图或竞赛(图)中的边消去,algorithm,graph,directed-graph,tournament,Algorithm,Graph,Directed Graph,Tournament,我想要一个算法来消除循环有向图或主要是锦标赛的边,并输出一个边数最少的树型结构 消除应基于侧面的重量,如下所述,作为一个简单的真实示例 如果有三个朋友A、B、C,那么假设他们相互借钱还钱 人员A必须将人员B转移至10美元。 人员B必须将人员C转移至20美元。 人员C必须将人员A转移至20美元 在最终结算中,为了尽量减少彼此之间的转账次数,我们可以将上述内容重新安排为“B人将转账A人-10美元”,然后一切都结算完毕 我正在寻找一些算法,当每边的权重和方向给定时,这些算法将适用于任意数量的节点 考虑

我想要一个算法来消除循环有向图或主要是锦标赛的边,并输出一个边数最少的树型结构

消除应基于侧面的重量,如下所述,作为一个简单的真实示例

如果有三个朋友A、B、C,那么假设他们相互借钱还钱

人员A必须将人员B转移至10美元。 人员B必须将人员C转移至20美元。 人员C必须将人员A转移至20美元

在最终结算中,为了尽量减少彼此之间的转账次数,我们可以将上述内容重新安排为“B人将转账A人-10美元”,然后一切都结算完毕

我正在寻找一些算法,当每边的权重和方向给定时,这些算法将适用于任意数量的节点


考虑到该图可以重新排列,并且该图很可能是一个“”图,其中每个节点都连接到该图中的所有节点,我遵循的最佳方法是什么。

n-1边非常容易获得。首先计算每个人的“净资产”,将借款人放在一个列表中,将贷款人放在另一个列表中,然后重复地从最前面的借款人转移到贷款人,如果他们已经饱和(返回到零),则移除其中一个或两个


前面的算法是2-近似。最小化传输数量意味着最大化双饱和传输数量,这是一个背包问题,至少是弱NP难的。有一个指数时间动态程序可能适用于小n(naive更像是n^n)。

n-1边并不完全是我想要的,但最终可以有n个节点的一条边。实际上是(非净零的人数)-1,只要答案是一条边,它就是一条边。