メインノート
「最適パスの
距離combination of k cities
」では
なく、
「combination of k cities
AND forの最適パスの距離」を計算して保存することに注意してくださいend-point city from this combination
。
それを理解すると、次の式の最初の2つの乗数の意味がわかります。
第1段階
第一段階の動作の数である:
∑k>=2(n−1k−1)choose city combinationof size = k−1⋅(k−1)choose city to be the lastfrom k−1 citiesin chosen combination⋅((n−1)−(k−1))choose citythat is not in chosen combinationto add to path
和手段で上付き文字がありませんfor all k>=2 that is valid for binomial coefficient
。したがって、合計の最後の有効なnullでない項は、
に対するものになります。最初の都市に接続する都市の。最初の都市に接続する都市があります。最後に、この項を合計に追加します。k=n−1
(n−1n−2)⋅(n−2)⋅1
n−1
数式を変換して、Held-Karpウィキペディアのページにもある指定した形式に変換し
ます。
∑k>=2(n−1k−1)⋅(k−1)⋅((n−1)−(k−1))=∑k>=2(n−1)!(k−1)!(n−k)!⋅(k−1)⋅(n−k)=∑k>=2(n−1)!k!(n−1−k)!⋅k⋅(k−1)=∑k>=2(n−1k)⋅k⋅(k−1)
二項係数を操作すると、次のようになり:
したがって、最初の操作の数フェーズは∑k>=2(n−1k)⋅k⋅(k−1)=∑k>=2(n−1)!k!(n−1−k)!⋅k⋅(k−1)=∑k>=2(n−3)!(k−2)!(n−3−(k−2))!⋅(n−1)⋅(n−2)=(n−1)⋅(n−2)∑k>=2(n−3k−2)=(n−1)⋅(n−2)⋅2n−3
(n−1)⋅(n−2)⋅2n−3+(n−1)
第二段階
第2フェーズでは、距離の計算と同時に、第1フェーズで作成したマークによって最適なパスを復元します。
「のcombination of k cities
ANDのためのend-point city from this combination
」最適なパスごとに、最後から2番目の都市を保存しました。
最適な経路を後戻りするために私たちは「のために最後から2番目の都市を返すために、いくつかのデータ構造を依頼する必要があるcombination of k cities
とのためにend-point city from this combination
」。したがって、このデータ構造はのようなものでなければなりません
Map<combination of k cities, Map<last city, second-to-last city>>
。combination of k cities
たとえば、のインデックスとして使用できますbinary_string[city id]=1 if city id is in combination
。したがって、のすべての要素を調べてcombination of k cities
、データ構造の組み合わせとインデックスを特定する必要があります。これにより、第2フェーズの操作数が得られ。
∑k>=2n−1k=(n)(n−1)2−1