牛ゲーが何故グラフの最短経路に帰着できるのか
前置き
夏休みだ〜!!ということで気合いを入れて蟻本を読み進めていたら、2章のグラフのところで牛ゲーと呼ばれる問題と出会いました。
牛ゲーとは数列について
\begin{align} d_j - d_i \leq c_{ij}(const) \tag{1} \end{align}
という形でのみ表される条件がたくさんあるとき、あるについて の最小値を求めようみたいな問題のようです。蟻本に載っているPOJ3169が牛の問題だからこの名前がついてるっぽいですね。例えばこういうやつです。
蟻本ではこの問題を、上のような条件を持つ各について辺 の重みをとした有向グラフを考えた時に、 頂点から頂点に向かう最短距離を求める、というものに帰着していました。 確かにそう最短路に帰着できそうとは思いつつも、なんとなく腑に落ちなかったので 少し自分なりに考えてみました。
証明(?)
数列が有向グラフ上での頂点から各頂点への最短距離を表しているという仮定の元で、 条件として新たに(1)式を追加することと、有向グラフにへと向かう重みがの辺を書き加えることとが等価であることを示せば良さそうですね。
まず(1) の条件を追加するような辺の書き加え方を考える。というのは最短距離を表すので、 満たすべき関係式は
\begin{align} d_i \leq (sからiに向かう任意の経路の長さ) \end{align}
であり、この他の制約はない。
したがって(1)式、つまり
\begin{align} d_j \leq d_i + c_{ij}(const) \tag{1} \end{align}
が成立するとすれば、それは へ向かう経路の中に経路長が であるものが存在する時である。 また辺の追加の過程で の値は変わりうるので、(1)の条件を追加する方法は と向かう長さ の経路を書き加える という他ない。
あとは と向かう長さ の経路の中から(1)と等価な経路、つまり書き加えることで条件(1)のみが追加され、 その他の余分な条件が加わらないものを見つければ良い。
と向かう長さ の経路は以下の2種類に分けられる。
長さの辺 を書き加えた場合、の経路として新たに追加されるのは、 から を経由してから 辺 を用いて に行くという経路だけなので、制約として加わるのは
\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)のような制約が加わってしまう。 例えばというように辺を書き加えた時、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)よりもさらに厳しい条件となってしまっていて、等価とは言えない。
以上より上で(a)のような辺を追加するという操作は、(1)式を制約として追加することと唯一等価な操作であることが示された。
これによって牛ゲーがグラフの最短経路問題へと帰着できる。
おわりに
正直穴のありそうな証明になってしまったが、直感的な理解にはつながったのでよしとしたいでござる。 いずれこの辺も解きたいですね。