頂点集合 をもつ有向ネットワークがあり、有向辺とその容量は次の 本である。 始点を 、終点を とする。 を含み を含まない頂点集合 で定まる - カットの容量 を求めよ。ただし、和は , である有向辺 すべてについてとる。
ネットワークと s-t カットの容量
有向ネットワークのフロー(容量制約と流量保存を満たすもの)の値を計算できる。- カット の容量 を求め、フローの値がどのカットの容量も超えないことを使える
前提
- グラフの次数と握手補題 (大学数学 グラフ理論)
この技能までの道筋(6 技能)
読み込み中…
右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
- 樹形図で数え上げる (算数 場合の数)
- 積の法則と和の法則 (算数 場合の数)
- 和の法則・積の法則と樹形図 (数学A 場合の数と確率)
- 順列・円順列・重複順列 (数学A 場合の数と確率)
- 組合せ (数学A 場合の数と確率)
- グラフの次数と握手補題 (大学数学 グラフ理論)
説明
有向グラフの各辺に「流せる量の上限(容量)」を付けたものをネットワークといい、出発点 から到着点 へ物や情報を流す様子を表します。この技能では、流し方(フロー)が規則を満たしているかを確かめてその値を計算すること、頂点を 側と 側に分ける「カット」の容量を計算することを学びます。さらに「フローの値はどのカットの容量も超えない」という事実を使って、流せる量の上限を見積もったり、あるフローが最大であることを確かめたりできるようになります。
なぜそうしてよいのか
記号を定めます。ネットワークとは、頂点集合 、有向辺の集合 、区別された 2 頂点 (ソース)と (シンク)、各辺 の容量 の組です(辺がない では とします)。フロー とは各辺に流量 を割り当てたもので、(1) 容量制約 、(2) 流量保存「 以外の各頂点 で、 に入る流量の和 から出る流量の和」を満たすものです。フローの値 は「 から出る流量の和 に入る流量の和」と定めます。
- カットとは、、 となる頂点の部分集合 のことで、その容量を 、つまり「 の内側から外側へ向かう辺の容量の和」と定めます。外側から内側へ向かう辺は数えません。
なぜ なのかを見ます。 の各頂点 について「出る流量 入る流量」を足し合わせます。流量保存により 以外の頂点( なので は含まれない)では 、 では なので、合計は です。一方、この合計を辺ごとに見直すと、両端が の中にある辺は、始点で 、終点で と数えられて打ち消し合います。残るのは と外側をまたぐ辺だけで、 となります。握手補題で次数の和を辺ごとに数え直したのと同じ「数え方を変える」発想です。右辺の第 1 項は容量制約で 以下、第 2 項は 以上なので、 が従います。したがって、あるフローの値とあるカットの容量が等しければ、そのフローは最大(どのフローの値もその値を超えない)で、そのカットは容量最小だとわかります。
手順
フローが与えられたら、各辺で を確かめ、 以外の各頂点で「入る流量の和 出る流量の和」を確かめる。
フローの値を から出る流量の和 に入る流量の和 で計算する。
- カット (, )を選び、 の内側から外側へ向かう辺だけを拾って容量を足し、 を求める。 以外の頂点が 個なら、カットは各頂点を に入れるか入れないかで 通りある。
どのフロー とどのカット についても なので、カットの容量の最小値はフローの値の上限になる。
上限と等しい値をもつフローを実際に作れれば、それがフローの値の最大値だと結論できる。
例題
頂点集合 、有向辺とその容量が , , , , であるネットワーク(これ以外の辺はない)について、 から へのフローの値の最大値を求めよ。
例題の解答
【手順 3】 以外の頂点は の 2 個なので、- カットは 通りある。内側から外側へ向かう辺の容量を足すと:
・: で 。
・: で 。
・: で (辺 は外側から内側へ向かうので数えない)。
・: で 。
【手順 4】カットの容量の最小値は なので、どのフローも値は 以下である。
【手順 5・手順 1】, , , , とおく。どの辺でも流量は 以上かつ容量以下である。頂点 では入る量 、出る量 。頂点 では入る量 、出る量 。よって流量保存も満たし、これはフローである。
【手順 2】 に入る辺はないので、。
上限 に達するフローがあるので、最大値は である。
答え:
よくある誤り
カットの容量に、外側から内側へ向かう辺の容量も足してしまう誤り。例題の で とするのは誤りで、正しくは を数えずに 。
カットの容量で、外側から内側へ向かう辺の容量を引いてしまう誤り。 で とするのは誤りで、正しくは 。引き算が現れるのは容量ではなくフローの値の式 の方である。
から出る辺の容量の和や、1 つのカットの容量を、そのまま最大の流量だと決めてしまう誤り。1 つのカットからわかるのは上限 だけで、最大値と言うには、その値に達するフローを実際に作る必要がある。また、最小の容量を探すならすべてのカット(例題では 通り)を調べる必要がある。
流量保存を確かめずにフローの値を計算してしまう誤り。例えば , , では頂点 で入る量 出る量 となり、これはフローではない。正しくは 以外のすべての頂点で入る量の和と出る量の和が等しいことを先に確かめる。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
入口の問題
頂点集合 をもつ有向ネットワークがあり、始点は 、終点は である。有向辺とその容量は次の 本である。
- カット の容量
を求めよ。頂点集合 をもつ有向ネットワークがあり、有向辺とその容量は次の 本である。
を始点、 を終点とする。頂点の集合 で定まる - カットの容量
を求めよ。ただし、和は , を満たす有向辺 すべてについてとる。
この技能を使う問題
頂点集合 をもつ有向ネットワークがあり、有向辺とその容量は次の 7 本である。
ここで、 かつ をみたす頂点の部分集合 を - カットとよび、その容量を、始点が に属し終点が に属する有向辺の容量の和と定める( から へ向かう辺は数えない)。容量が最小となる - カット は何個あるか。
を正の実数とする。頂点集合 をもつ有向ネットワークがあり、有向辺とその容量は次の 8 本である。
始点を 、終点を とする - フローの最大値を とする。 が正の実数全体を動くとき、 が最大となるような の最小値を求めよ。頂点集合 をもつ有向ネットワークがあり、有向辺とその容量は次のとおりである。
始点を 、終点を とするとき、 から への流れの値の最大値を求めよ。を有限集合、 を有向辺の集合とし、各辺 に容量 (実数)が与えられたネットワーク を考える。相異なる 2 頂点 (始点)と (終点)を固定する。
, を満たす部分集合 を - カットといい、その容量を
と定める。容量が最小の - カットを最小カットという。, がともに最小カットであるとき、 も最小カットであることを証明せよ。
なお、フロー(各辺で を満たし、 以外の各頂点で流入量と流出量が等しい関数 )の値 について、次の 2 つは用いてよい。
- 任意の - カット に対して
- 最大流最小カット定理(最大フローの値は最小カットの容量に等しい)頂点集合 をもつ有向ネットワークがあり、有向辺とその容量は次の 本である。
ここで - カットとは、、 を満たす部分集合 のことをいい、その容量を から へ向かう有向辺の容量の総和で定める。容量が最小となる - カット (最小カット)は全部でいくつあるか。頂点集合
をもつ有向ネットワーク を考える。 の有向辺とその容量は次の 本である。
- に対し、辺 。容量は順に
- すべての に対し、辺 ( 本)。容量はすべて
- に対し、辺 。容量は順ににおける から への最大流の流量を求めよ。
頂点集合 をもつ有向ネットワークがあり、有向辺 とその容量は次のとおりである。
を始点、 を終点とする。ほかの辺の容量はそのままにして、ある 1 本の辺 の容量だけを 増やしたとき、 から への最大流の値が元の値より大きくなるような番号 をすべて求め、集合で答えよ。
この技能の次に学べること
- 最大流最小カット定理 (大学数学 グラフ理論)