グラフ理論の問題
0 以上の整数 に対し、 で と を 2 進法で表したときの桁ごとの排他的論理和(ビットごとの XOR)を表す。たとえば ()である。
頂点集合を とする完全グラフ において、異なる 2 頂点 を結ぶ辺の重みを と定める。このグラフの最小全域木の重み(最小全域木に含まれる辺の重みの総和)を求めよ。
この問題で使うもの
- 最小全域木(クラスカル法・プリム法)(説明と入口の問題)
この問題を解けるようになるまで(7 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
頂点を 2 進法で見て、最上位のビット( の位)が のもの と のもの に分けて、Kruskal 法がどう進むかを考えましょう。
ヒント 2
同じグループ内の辺の重みは 未満、グループをまたぐ辺の重みは 以上です。また なので、 の部分は の場合と同じ形になります。
ヒント 3
の場合の最小全域木の重みを とすると、 のとき が成り立ちます。まず を の式で求めましょう。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
頂点集合が の完全グラフに重み を与えたものを とし、その最小全域木の重みを とする()。求めるものは である。
準備 1(平行移動で重みは変わらない). 任意の 0 以上の整数 について である。よって が頂点集合の間の全単射なら、辺の重みを保つグラフの同型になる。
準備 2(分割と Kruskal 法). とし、 をみたす 0 以上の整数 をとる。頂点を
に分ける。 の頂点は 2 進法の第 桁( の位)が で、それより上の桁はすべて であり、 の頂点は第 桁以上がすべて である。したがって
- 内の辺、 内の辺の重みは第 桁以上が なので 未満、
- と を結ぶ辺の重みは第 桁が なので 以上で、 により最小値は
である。
Kruskal 法では重みの小さい辺から順に、閉路を作らない限り採用していく。重み 未満の辺は 内か 内の辺だけなので、それらを処理し終えた段階で、 と のそれぞれについて(その上の完全グラフに対する)Kruskal 法を実行したのと同じになり、 と それぞれの最小全域木ができている。残りは 2 つの連結成分をつなぐ辺で、Kruskal 法は最も軽い横断辺(重み )を 1 本採用して終わる。よって
上のグラフは そのものである。また、 は から への全単射なので、準備 1 より 上のグラフは と同型である。したがって
が 2 のべきのとき. ()とすると で、 とおくと 、。両辺を で割ると なので 、すなわち
とくに 。
の計算. より
より
よって
(確認) は、辺 (重み 1)と (重み 2)からなる全域木で実現され、重み の辺は の 2 本しかないことから最小であることも直接確かめられる。
答えは である。
別解
クラスカル法を、重みの小さい順(重みは のべき乗または他の値)に考える。 となるのは、 の 進表示で 以上の桁がすべて一致するとき、すなわち のとき、かつそのときに限る。したがって重み の辺だけを使った部分グラフの連結成分は、 を長さ のブロック に分けたものであり(各ブロック内では、最上位ビット以外が一致する頂点同士を重み の辺でたどれるので連結)、成分数は である。
重み の辺を加えると成分数は になるので、最小全域木で重みが の辺は 本あり、その重みはちょうど である( の辺で まで併合できる: ブロックの前半と後半の対応する頂点を結ぶ辺の重みは )。
。
- 重み : 本 →
- 重み : 本 →
- 重み : 本 →
- 重み : 本 →
- 重み : 本 →
- 重み : 本 →
- 重み : 本 →
辺の本数は で全域木の辺数 と一致する。合計は 。
検算: 各頂点 を とつなぐ木(重み )の総和 と一致する。