頂点集合 をもつ重みつき単純無向グラフ があり、辺とその重みは次の 本である。
の最小全域木の重み(最小全域木に含まれる辺の重みの和)を求めよ。
最小全域木(クラスカル法・プリム法)
木の辺数が であることと、カット性質(カットを横切る最小の重みの辺は最小全域木に含まれる)を使える。クラスカル法やプリム法で、重みつき連結グラフの最小全域木の重みを求められる
前提
- グラフの次数と握手補題 (大学数学 グラフ理論)
この技能までの道筋(6 技能)
読み込み中…
右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
- 樹形図で数え上げる (算数 場合の数)
- 積の法則と和の法則 (算数 場合の数)
- 和の法則・積の法則と樹形図 (数学A 場合の数と確率)
- 順列・円順列・重複順列 (数学A 場合の数と確率)
- 組合せ (数学A 場合の数と確率)
- グラフの次数と握手補題 (大学数学 グラフ理論)
説明
重みつきの連結グラフでは、すべての頂点をつなぎ閉路を含まない辺の集まりを全域木といいます。この技能では、全域木のうち重みの合計が最小のもの(最小全域木)を求めます。送電網や通信網を最も安くつなぐ問題などで使います。クラスカル法では「軽い辺から順に、閉路ができない限り採用する」、プリム法では「1 頂点から木を広げ、毎回いちばん軽い辺で 1 頂点ずつ取り込む」という手順で求めます。
なぜそうしてよいのか
まず用語を決めます。同じ頂点を 2 度通らずに辺でたどる道を路といい、辺を 3 本以上使って始点に戻る道(始点以外の頂点は重複しない)を閉路といいます。どの 2 頂点も路で結べるグラフを連結といい、連結で閉路をもたないグラフを木といいます。グラフ の辺の一部を選んで のすべての頂点を含む木にしたものが全域木です。頂点 個の木の辺はちょうど 本です。頂点が 2 個以上の木で最も長い路をとると、その端点 の次数は 1 です(路の外へ辺が出ていれば路を延ばせ、路の上の頂点へ辺が出ていれば閉路ができるからです)。 とその辺を除いても、残りの 2 頂点を結ぶ路は次数 1 の を途中で通れないので連結のままで、辺を減らしただけなので閉路もできず、木のままです。これを繰り返すと頂点 1 個・辺 1 本ずつ減り、最後は頂点 1 個・辺 0 本になるので、辺数 です。また、木の 2 頂点を結ぶ路は 1 本しかありません(2 本あれば、それらが分かれてから再び合流するまでの部分で閉路ができるからです)。
次にカット性質です。 を空でない 2 つの部分 と に分けたものをカットといい、両端が別々の側にある辺を「カットを横切る辺」といいます。カット性質とは次の主張です。「辺の集合 がある最小全域木に含まれ、 のどの辺もカットを横切らないとする。カットを横切る辺のうち重みが最小の辺を ()とすると、 を含む最小全域木も存在する。」理由: を含む最小全域木 が を含めばそれで終わりです。含まないとき、 に を加えると、できる閉路は と 内の - 路を合わせたものに限られ、その路は 1 本しかないので、閉路はちょうど 1 つ です。 内の - 路は から へ移るので、カットを横切る辺 を含みます。 は の辺なので とは異なり、カットを横切るので には属しません。 に を加えて を除いたものを とします。 の両端は の残りの部分でつながるので は連結で、唯一の閉路 が を失って壊れるので閉路もなく、 は全域木です。重みは だけ変わるので増えず、 も最小全域木で、しかも を含みます。
これで二つの方法が正しいことを帰納法で示せます。主張は「採用済みの辺の集合 は、いつでもある最小全域木に含まれる」です。はじめ は空で、連結グラフは閉路の辺を 1 本ずつ除けば全域木をもち、全域木は有限個なので最小全域木があり、主張は成り立ちます。クラスカル法で を採用するとき、 を含む塊( の辺でつながった頂点の集まり)を とします。 の辺は塊の内部にあるので、カットを横切りません。 より前に見た辺は、採用されて に入ったか、そのとき同じ塊の中にあって捨てられたかのどちらかです。塊は合わさって大きくなるだけなので、どちらも今のカットを横切りません。後で見る辺の重みは 以上なので、 はカットを横切る最小辺であり、カット性質から採用後も主張が保たれます。プリム法では、育てている木の頂点集合を とすれば同じ議論がそのまま使えます。最後に は閉路をもたず、すべての頂点をつなぐ全域木になります(つながっていない塊が残っていれば、それらを結ぶ辺が見られたときに採用されていたはずです)。 も、 を含む最小全域木も辺は 本なので、両者は一致し、 が最小全域木です。
手順
グラフが連結であることを確かめ、頂点数 から、採用すべき辺の本数 を求める。
(クラスカル法)辺を重みの小さい順に並べる。重みが等しい辺の順はどちらが先でもよい。
並べた順に辺を見る。両端がまだ別々の塊にあれば採用し(2 つの塊が 1 つになる)、すでに同じ塊にあれば閉路ができるので捨てる。
採用した辺が 本になったら終了し、その重みの合計を最小全域木の重みとする。
(別法:プリム法)1 頂点だけの集合 から始める。 と を結ぶすべての辺のうち最も軽いものを採用し、その端点を に加える。これを になるまで繰り返す。
例題
頂点集合 、辺と重みが である重みつき連結グラフの最小全域木の重みを求めよ。
例題の解答
手順 1: なので、採用する辺は 本である。
手順 2:辺を重みの小さい順に並べると となる。
手順 3:順に見ていく。
- : は別々の塊なので採用する。塊は になる。
- :採用する。塊は になる。
- :採用する。塊は になる。
- :両端がともに にあり、閉路 ができるので捨てる。
- :2 つの塊を結ぶので採用する。塊は になる。
手順 4:採用した辺は の 4 本で、 本に達したので終了する。重みの合計は である。
(確認:手順 5 のプリム法で から始めると、 から 、 から 、 から 、 から が採用され、合計は同じく になる。)
答え:
よくある誤り
重みの小さい辺を、閉路を気にせず 本取ってしまう誤り。例題では となるが、 は閉路をつくり、 が他の頂点とつながらないので全域木ではない。正しくは を捨てて を採用し、合計は である。
「各頂点に接する辺のうち最も軽いものを全部集めれば全域木になる」としてしまう誤り。例題では各頂点 の最軽辺は で、集めても の 3 本にしかならず、連結にならない。正しくは、辺数が になるまでクラスカル法やプリム法を続ける。
プリム法で、直前に加えた頂点に接する辺だけから最小のものを選んでしまう誤り。例題で から始めて の次に に接する辺だけを見ても結果は同じだが、一般には誤る。正しくは、木の頂点集合 全体と を結ぶすべての辺の中から最小のものを選ぶ。カット性質が保証するのは、カット を横切る辺の中で最小の辺だけである。
カット性質を「カットを横切る最小の辺はすべての最小全域木に含まれる」と言い切ってしまう誤り。同じ重みの辺があると成り立たないことがある。たとえば で 3 辺の重みがすべて なら、どの 2 辺を選んでも最小全域木で、カット を横切る最小辺 を含まない最小全域木 もある。正しくは「最小の辺を含む最小全域木が存在する」である。なお、重みがすべて異なるときは、カットを横切る最小辺が 1 本に決まり、入れ替えで重みが真に減るので、その辺はすべての最小全域木に含まれる(これは十分条件であり、重みが重なっていても最小辺が 1 本だけならやはり成り立つ)。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
入口の問題
頂点集合を とする重みつき単純無向グラフ があり、辺とその重みは次の 本である。
の最小全域木の重み(最小全域木に含まれる辺の重みの和)を求めよ。頂点集合を とする重みつき単純無向グラフ があります。辺とその重みは、次の 本です。
の最小全域木の重み(最小全域木に含まれる辺の重みの和)を求めなさい。
この技能を使う問題
頂点集合を とする完全グラフ を考え、相異なる 2 頂点 を結ぶ辺の重みを と の最小公倍数 と定める。この重みつきグラフの最小全域木の重み(全域木に含まれる辺の重みの和の最小値)を求めよ。
を有限な連結な単純無向グラフとし、各辺 に実数の重み が与えられているとする。全域木の重みをその辺の重みの和で定め、重みが最小の全域木を最小全域木という。
の道 に対し、 に含まれる辺の重みの最大値を と書く。 を の最小全域木とし、 を の相異なる 2 頂点とする。 の中で と を結ぶ(ただ 1 つの)道を とする。このとき、 において と を結ぶ任意の道 に対して
が成り立つことを証明せよ。なお、木の基本的な性質(頂点数 の木の辺数は であること、木の 2 頂点を結ぶ道はただ 1 つであること、頂点数 で辺数 の連結グラフは木であること)は用いてよい。
頂点集合を とする完全グラフ を考える。相異なる 2 頂点 を結ぶ辺 には、重み
が与えられているとする( は最小公倍数、 は最大公約数)。たとえば 、 である。この重みつきグラフの最小全域木の重み(最小全域木に含まれる辺の重みの総和)を求めよ。
頂点集合を ( 個の頂点)とし、相異なる任意の 2 頂点 を辺で結んだ完全グラフ を考える。辺 の重みを と定める。この重みつきグラフの最小全域木の重み(最小全域木に含まれる辺の重みの総和)を求めよ。
0 以上の整数 に対し、 で と を 2 進法で表したときの桁ごとの排他的論理和(ビットごとの XOR)を表す。たとえば ()である。
頂点集合を とする完全グラフ において、異なる 2 頂点 を結ぶ辺の重みを と定める。このグラフの最小全域木の重み(最小全域木に含まれる辺の重みの総和)を求めよ。
頂点集合 をもつ重みつき単純無向グラフ があり、辺とその重みは次の 本である。
全域木の重みを、その全域木に含まれる辺の重みの和と定める。辺の重みはすべて異なるので、 の最小全域木(重みが最小の全域木)はただ 1 つに定まる。これを とする。と異なる の全域木の重みの最小値を求めよ。
この技能の次に学べること
- マトロイドの独立集合・基・階数 (大学院数学 凸最適化・組合せ最適化)