[解決済み] このHeld-Karp TSP Pseudocodeの説明をお願いします。
質問
巡回セールスマン問題に対するHeld-Karpアルゴリズムを、以下のような擬似コードで実装しようとしている。
(ここで見つけたものです。 https://en.wikipedia.org/wiki/Held%E2%80%93Karp_algorithm#Example.5B4.5D )
アルゴリズムは手書きでできるのですが、実際にコードで実装するのに苦労しています。どなたかわかりやすく解説していただけると幸いです。
これもよくわからない。
この部分は、開始都市から接続都市までの距離を設定するためのものだと思っていました。もしそうなら、以下のようになるのではないでしょうか?
C({1}, k) := d1,k
であって
C({k}, k) := d1,k
? 私が完全に誤解しているだけなのでしょうか?
また、このアルゴリズムは15~20都市を超えるとあまりうまくいかないと聞いたことがあるので、40都市程度では、何か良い代替手段があるでしょうか?
どのように解決するのですか?
ヘルドカープとは ダイナミックプログラミング のアプローチになります。
動的計画法では、タスクをサブタスクに分割し、quot;動的関数"を使って、すでに計算された小さなサブタスクの結果を使って大きなサブタスクを解決し、最終的にタスクを解決します。
DPアルゴリズムを理解するためには、サブタスクと動的関数をどのように定義しているかを理解することが不可欠です。
Held-Karpの場合、サブタスクは以下の通りです。
<ブロッククオート
与えられた頂点の集合に対して
S
とある頂点の
k
(
1 ∉ S
,
k ∈ S
)
C(S,k)
は、頂点
1
のすべての頂点を通過し
S
で終了します。
k
.
このサブタスクの定義を考えると、なぜ初期化なのかは明らかです。
C({k}, k) := d(1,k)
からのパスの最小の長さは
1
から
k
をトラバースして
{k}
からのエッジだけです。
1
から
k
.
次に、"dynamic function"です。
余談だが、DPアルゴリズムは次のように書くことができる。
トップダウンまたはボトムアップ
. この疑似コードはボトムアップ型である。つまり、小さいタスクから順に計算し、その結果を大きいタスクに使用する。より具体的には、集合のサイズが大きくなる順に計算します。
S
からスタートし
|S|=1
まで上がり
|S| = n-1
(すなわち
S
を除くすべての頂点を含む
1
).
では、あるタスクを考えてみましょう。
S, k
. からのパスに相当することを覚えておいてください。
1
を経由して
S
で終わる。
k
.
に分割しています。
-
からのパス
1
のすべての頂点を通過する。S
ただしk
(S\k
) で終わり、その頂点はm
(m ∈ S
,m ≠ k
):C(S\k, m)
-
からのエッジ
m
からk
を破るために考えられるすべての方法を調べれば、簡単にわかることです。
C(S,k)
の答えは、このように、その中から最小の経路を見つけることである。
C(S, k)
.
最後に、すべての
C(S, k)
に対して
|S| = n-1
の欠けたエッジでサイクルを完了させる。
k
から
1
:
d(1,k)
. 最小のサイクルが最終的な結果です。
についてですが。
また、このアルゴリズムは15~20都市を超えるとあまりうまくいかないと聞いているので、40都市程度では、何か良い代替手段があるでしょうか?
Held-Karpのアルゴリズムの複雑さはθ(n²2)です。 n ). 40² * 2 40 ≈ 1.75 * 10 15 これは、1台のマシンで合理的に計算するのは不可能だと言えるでしょう。
David Eisenstatが提案したように、以下のようなアプローチもあります。 混合整数計画法 N=40の場合、この問題を十分に高速に解くことができます。
関連
-
[解決済み】Quickselectの時間の複雑さを説明する
-
[解決済み】なぜO(n)はO( nlog(n) )よりも優れているのでしょうか?)
-
[解決済み] NPとco-NPの違いは何ですか?
-
[解決済み] T(n) = 2T(n/2) + O(n) からO(nlogn)を得る方法
-
[解決済み] このHeld-Karp TSP Pseudocodeの説明をお願いします。
-
[解決済み] ビッグシータ記法の証明
-
[解決済み] 解いてみてください。T(n) = T(n-1) + n [重複] とする。
-
[解決済み] log(n!)=Θ(n-log(n))でしょうか?
-
[解決済み] 整数の絶対値の計算方法
-
[解決済み] ある問題がNP完全であることをどのように証明するか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】決定木(比較ソートアルゴリズム)の葉の最短の深さ)
-
[解決済み] 構造的再帰と生成的再帰はどのように違うのですか?
-
[解決済み] クイックソートとヒープソートの比較
-
[解決済み] T(n) = 2T(n/2) + O(n) からO(nlogn)を得る方法
-
[解決済み] 素朴な」アルゴリズムとは何か、「閉じた」解とは何か?
-
[解決済み] DPLLアルゴリズムはどのように動作しますか?[クローズド]
-
[解決済み] 簡単:T(n)=T(n-1)+nを反復法で解く。
-
[解決済み] ビッグシータ記法の証明
-
[解決済み] は、「減少しない」列が「増加する」のか?
-
[解決済み] 隣接リスト表現の時間複雑性?