跳到主要内容

電気通信大学 情報理工学研究科 情報・ネットワーク工学専攻 2023年8月実施 選択問題 アルゴリズムとデータ構造

Author

祭音Myyura (co-authored with GPT 5.6 SOL)

Description

正の辺コストをもつ連結無向グラフに対する Prim 法を考える。指定グラフで辺の追加順を求め、隣接リストを単純走査する場合の計算量を評価せよ。さらに優先度付きキューによる高速化と、最小全域木の 1 辺のコストが増加した場合の再計算法を示せ。

题目描述

给出 Prim 最小生成树算法,要求写出指定图从顶点 BB 开始时的选边顺序,分析朴素邻接表实现的复杂度,以优先队列加速,并设计树边权值增大后的高效重算方法。

Kai

(1)

各段階でカットを横切る最小コストの辺を選ぶと、

(B,F),(F,C),(C,H),(F,A),(A,D)\boxed{(B,F),(F,C),(C,H),(F,A),(A,D)}

の順に追加される。

(2)

step.3 の各実行で UU に属する全頂点の隣接リストを走査すると、1 回当たり最悪 O(m)O(m) である。while ループは n1n-1 回実行されるので、

O(nm)\boxed{O(nm)}

となる。

(3)

XX を辺コストをキーとする二分最小ヒープとする。

  • 初期化時に ss に接続する全辺を XX に挿入する。
  • step.3 では XX から最小辺を取り出す。両端点がすでに UU にあれば捨て、カットを横切る辺が得られるまで繰り返す。
  • step.5 で新頂点 vvUU に加えた後、vv の隣接リストを走査し、他端点が VUV-U にある各辺を XX に挿入する。

各辺は高々 1 回挿入・取出しされ、各ヒープ操作は O(logm)O(\log m) である。

(4)

全隣接リストの走査は O(m)O(m)、ヒープ操作は合計 O(mlogm)O(m\log m) である。したがって、

O(mlogm)\boxed{O(m\log m)}

となる。

(5)

コストが増加した木の辺を ee とする。

  1. TT から ee を除き、2 つの連結成分 SSVSV-S を得る。
  2. 更新後の GG の全辺を 1 回走査し、このカットを横切る最小コスト辺 ff を求める。
  3. Te+fT-e+f を新しい全域木とする。

更新前後のコストを w,ww,w' とする。更新後の任意の全域木を SS とする。

  • eSe\in S ならば、ee を含む木はすべて同じだけ値が増えるので w(T)w(S)w'(T)\leq w'(S) であり、w(f)w(e)w'(f)\leq w'(e) より w(Te+f)w(S)w'(T-e+f)\leq w'(S) である。
  • eSe\notin S ならば、S+eS+e の閉路上にこのカットを横切る辺 gg がある。更新前の TT の最小性より
w(T)w(Sg+e)=w(S)w(g)+w(e).w(T)\leq w(S-g+e)=w(S)-w(g)+w(e).

w(f)w(g)=w(g)w'(f)\leq w'(g)=w(g) であるから、w(Te+f)w(S)w'(T-e+f)\leq w'(S) となる。

よって Te+fT-e+f は更新後の最小全域木である。

走査は 1 回だけなので計算量は

O(m)\boxed{O(m)}

であり、Prim 法を最初から行う O(mlogm)O(m\log m) より高速である。図の例で CFCF22 から 1010 にすると、代替辺は BCBC(コスト 33)となる。