shugo's kitchen

コンピュータサイエンスを美味しく調理していきたい

牛ゲーが何故グラフの最短経路に帰着できるのか

[tex: ]

前置き

夏休みだ〜!!ということで気合いを入れて蟻本を読み進めていたら、2章のグラフのところで牛ゲーと呼ばれる問題と出会いました。

牛ゲーとは数列d_iについて

\begin{align} d_j - d_i \leq c_{ij}(const) \tag{1} \end{align}

という形でのみ表される条件がたくさんあるとき、あるg, sについて d_g - d_s の最小値を求めようみたいな問題のようです。蟻本に載っているPOJ3169が牛の問題だからこの名前がついてるっぽいですね。例えばこういうやつです。

蟻本ではこの問題を、上のような条件を持つ各i, jについて辺 i \to j の重みをc_{ij}とした有向グラフを考えた時に、 頂点sから頂点gに向かう最短距離を求める、というものに帰着していました。 確かにそう最短路に帰着できそうとは思いつつも、なんとなく腑に落ちなかったので 少し自分なりに考えてみました。

証明(?)

数列d_iが有向グラフG上での頂点sから各頂点iへの最短距離を表しているという仮定の元で、 条件として新たに(1)式を追加することと、有向グラフGi \to jへと向かう重みがc_{ij}の辺を書き加えることとが等価であることを示せば良さそうですね。

まず(1) の条件を追加するような辺の書き加え方を考える。d_iというのは最短距離を表すので、 満たすべき関係式は

\begin{align} d_i \leq (sからiに向かう任意の経路の長さ) \end{align}

であり、この他の制約はない。

したがって(1)式、つまり

\begin{align} d_j \leq d_i + c_{ij}(const) \tag{1} \end{align}

が成立するとすれば、それは s \to j へ向かう経路の中に経路長が d_i + c_{ij} であるものが存在する時である。 また辺の追加の過程で d_i の値は変わりうるので、(1)の条件を追加する方法は i \to j と向かう長さ c_{ij} の経路を書き加える という他ない。

あとは i \to j と向かう長さ c_{ij} の経路の中から(1)と等価な経路、つまり書き加えることで条件(1)のみが追加され、 その他の余分な条件が加わらないものを見つければ良い。

i \to j と向かう長さ c_{ij} の経路は以下の2種類に分けられる。

(a) : i \to j を長さ c_{ij} の辺で直接つないだもの  
(b) : 長さの和が c_{ij} となる複数の辺でつないだもの

長さwの辺 u \to vを書き加えた場合、s \to vの経路として新たに追加されるのは、s から u を経由してから 辺 u \to v を用いて v に行くという経路だけなので、制約として加わるのは

\begin{align} d_v \leq (sからuに向かう任意の経路の長さ) + w \end{align}

\begin{align} \therefore d_v \leq d_u + w \tag{2} \end{align}

という不等式のみである。

したがって(a)のように追加すれば確かに条件(1)のみが追加されると言える。

一方で(b)を追加する場合は各辺ごとに(2)のような制約が加わってしまう。 例えばi \to m \to jというように辺を書き加えた時、2本の辺それぞれに対して(2)が成り立つので、

\begin{align} d_m \leq d_i + c_{im} \quad かつ \quad d_j \leq d_m + c_{mj} \quad ( c_{im} + c_{mj} = c_{ij} ) \end{align}

となり、(1)よりもさらに厳しい条件となってしまっていて、等価とは言えない。

以上よりG上で(a)のような辺を追加するという操作は、(1)式を制約として追加することと唯一等価な操作であることが示された。

これによって牛ゲーがグラフの最短経路問題へと帰着できる。

おわりに

正直穴のありそうな証明になってしまったが、直感的な理解にはつながったのでよしとしたいでござる。 いずれこの辺も解きたいですね。

参考

牛ゲー(最短経路問題の双対問題が線形計画問題) - 数学/競プロメモ

ダイクストラとポテンシャルのはなし - niuez’s diary