0

循環有向グラフまたはほとんどのトーナメントの辺を削除し、辺の数が最小のツリー型の構造を出力するアルゴリズムが必要でした。

単純な実世界の例として以下で説明するように、除去は辺の重みに基づく必要があります。

A、B、Cの友達が3人いる場合。お互いの間でお金を借りたり返したりするシナリオを考えてみましょう。

人物Aは人物Bを転送する必要があります-$10。人物Bは人物Cを転送する必要があります-$20。人物Cは人物Aを転送する必要があります-$20。

相互の送金回数を最小限に抑えるための最終決済では、上記を「BさんがAさんを転送します-$ 10」のように並べ替えると、すべてが決済されます。

各辺と方向の重みが与えられたときに、任意の数のノードで機能するアルゴリズムを探しています。

グラフを再配置でき、グラフが「トーナメント」であり、各ノードがグラフ内のすべてのノードに接続されている可能性が高いことを考えると、私が従う最善のアプローチは何でしょうか。

4

1 に答える 1

1

n-1つのエッジを取得するのは非常に簡単です。まず、全員の「純資産」を計算し、借り手を1つのリストに入れ、貸し手を別のリストに入れてから、ラインの最前線にある借り手から貸し手に繰り返し転送し、飽和している(返される)場合は一方または両方を削除します。ゼロに)。

上記のアルゴリズムは2近似です。転送の数を最小化することは、二重に飽和する転送の数を最大化することを意味します。これは、少なくとも弱くNPハードであるナップザックのような問題です。小さいnに適している可能性のある指数時間動的プログラムがあります(ナイーブはn ^ nに似ています)。

于 2012-06-03T18:23:39.147 に答える