を単純にサイクルだけ許可すると仮定すると、いいえ、Hamiltonian Path Problemを効率的に解決できるため、効率的なアルゴリズムはありません。 (つまり、この問題はNP-Hardです)。
削減:
(我々がゼロに等しい/大きい重みを持つようにシンプルサイクルがある場合、我々は見つけるあなたの問題のバリアントを使用します)。直感的に
G' = (V',E')
V' = V U {s,t}
E' = E U { (s,v), (v,t), (s,t) }
And add weights to the graph:
w(s,t) = -|V'| + 1
w(u,v) = 1 for u!=s and v!= t
、私たちは、「ソース」と「ターゲット」ノードを追加する他のすべてのノードに接続し、負に接続された2つのノードを作成:グラフG=(V,E)
、新しいグラフを構築考える
すべてのパスの重み。
新しいアルゴリズムには、(G', (s,t))
が減少しています。
元のグラフのハミルトニアンパスがv1->v2->...->vn
の場合、新しいグラフの周期はs->v1->v2->...->vn->t->s
であり、その合計は0になり、単純なサイクルになります。
簡単(s,t)
を使用G'
におけるサイクル、および合計0より大きい任意の数のがあれば、それが使用(s,t)
除く他のすべてのエッジの重みの合計が少なくとも|V'|-1
であることを意味します。 これは、このサイクルに正確に|V'|
個のノードがあることを意味します。これはグラフ全体であり、サイクルはs->t->v1->v2->...->vn->s
であることがわかります。これは単純なのでv1,v2,...,vn
は元のV
のすべてのノードです。ハミルトン経路であるv1->v2->...->vn
です。
結論:私たちはHamiltionian Pathからあなたの問題への多項式時間の短縮を示しました.HPはNP-Hardなので、この問題もあります。
エッジを含まない負のサイクルが存在することはありますか? –
@DavidEisenstatあなたはそれが何を意味するか分かりません。任意の有効なサイクルは、正、ゼロ、または負にすることができます。 –