2017-01-21 4 views
4

私は試験からの質問があり、私のアプローチがこの質問に適しているかどうかを知りたいと思います。スパニングツリーの最小限の問題は正しい解決法ですか?

Input: graph G(V,E),weight function f:E->R and edge e=(u,v). 
output: algorithm that finds a minimum spanning tree with edge e in it. 

私のソリューションクラスカルのアルゴリズムを実行し、それが存在しない場合は、エッジeを追加することで、それは木がn-1のエッジであるので、我々は、円を通過して円を作り、最大のエッジを削除する必要があります(その円に存在するものではありません。

は私の解決策ですか?もしそれがあればそれを証明する方法、誰かがなぜ私に教えてくれるのですか?

(PS私はこの質問のためのソリューションは、ちょうど私のアプローチが正しいかどうかを知りたいき)

+1

eが最小スパンツリーの一部である場合、あなたは幸いです。そうでなければ、それを追加することは間違いなく円を作る(そうでなければ 'e'はスパニングツリーの一部でなければならない)が、エッジを削除する次のステップはまた、エッジが削除されたときにグラフを切断できないことを考慮する必要がある。 – apokryfos

+1

FWIWオリジナルのソリューションも正しいと思います(ただし、Sandipanの提案と同じように実装するのは簡単ではありません)。あなたがサークルを持っているので、削除したエッジに関係なく、グラフは常に接続されたままであり、同じスパニングツリーも生成されます。 –

答えて

4

またはその他の方法かもしれない、PrimまたはKruskalのアルゴリズムを使用していますが、最初のグラフにedge eを追加(ツリー内に存在しなければならないため)、その後、通常のアルゴリズムステップで優先キュー(例えば、fibonacci heap)からポップすることによって重み値の昇順でエッジを追加し続けると、アルゴリズム自体はサイクルが存在しないことを保証し、ツリーがグラフにまたがっています(サイクルをトラバースし、eとは異なる最大ウェイトエッジを削除するための余分なステップは必要ありません)。

+2

ありがとうあなたのおい:) –

+0

あなたは大歓迎@elias rizik –

関連する問題