2016-04-23 15 views
-1

トーナメントは完全な有向グラフで、任意の2つの頂点uとvが与えられたときにそれらの間に有向エッジが存在するエッジはuからvまでです)。Pythonで隣接リストを持つトーナメントでハミルトニアンパスを見つける

ハミルトニアンパスは常にトーナメントに存在します。したがって、{u:[v、w]、v:[w]}形式の隣接関係リストは、uからw、uからv、wからwへの有向エッジがある場合、ハミルトニアンパスVeritcesを順番に印刷していますか?

あなたがpythonなどを知らなくても、アルゴリズムだけが役に立ちます。私はそれについて考えました、そして、私は最高度の頂点から始める必要があると思いますか?次に、2番目に高い等級の頂点を、最も低い次数の頂点まで追加します。しかし、私はこれがフェールセーフな方法であるとは思わないが、最高度の頂点は2番目に高い頂点で殴られた可能性がある。

ありがとうございました!

+0

O(n^2)アルゴリズムはここに記述されています:https://sbjoshi.wordpress.com/2010/11/11/tournament-graph-and-hamiltonian-path/ –

+0

O(nlogn) //epubs.siam.org/doi/abs/10.1137/0403002 – Dandelion

+0

ありがとうございます@PeterdeRivazと@Vasei! – PolkaDot

答えて

0

この問題は再帰的に解決できます。 n+1頂点の名前がv_0からv_nであるとします。 v_1からv_nまでで、サイズnのトーナメントではそれらの間のエッジであるため、v_1v_nを含むハミルトニアンパスがあると仮定できます。そのパスに従って、u_1u_nという名前に変更します。 (:v_0u_1u_n勝ったv_0勝ったここでは、マージナルノードの世話をする必要があります)今u_iv_0v_0勝ったことなどがu_i+1勝ったu_iを見つけます。

u_1 , ... , u_i , v_0 , u_i+1 , ... , u_n 

このアルゴリズムは、Oのランタイム(N^2)を有する。このようなiを発見した後、全体的なハミルトン経路を構築することができます。この問題に対するO(nlogn)アルゴリズムが存在します。

+0

ありがとうございます!非常にきれいに説明、私はそれを理解しています。 – PolkaDot

関連する問題