牛ゲー
2022/01/15 修正 ・有向グラフの図追加
初めに
AtCoderの問題で牛ゲーが出たので、まとめておきます。数学的に厳密でない部分や、誤りを含む場合もありますのでご了承ください。
牛ゲーとは
以下の2つの問題があります。
という「2つの値の差分についての制約」のみからなる制約の元で、と各の差を最大化する線形計画問題
重みつき有向グラフについて、頂点から頂点にコストの有向辺があることをと表現する。 という辺がある重みつき有向グラフについて、始点から各頂点への最小コストを求める最短経路問題
この2つから得られるの最大値と、始点から頂点への最小コストが同じになります。
従って、
- 2つの値の差分についての制約のみからなる
- 値を最大化する
という条件を満たす問題は、最短経路問題に帰着して解くことができます。
計算量は、を含むならBellman-Ford法によって、、非負整数のみならDijkstra法によって、です。
最大値と最短経路
最短経路問題の最小コストが、線形計画問題の最大値を与えるというのがよくわかりませんでした。
この点について考察してみます。
例として、以下の有向辺を持つ有向グラフを考えます。
とし、までが求まっているとして、を求めます。
有向辺を差分の制約とみなします。具体的には、
2から3への重み1の有向辺は、
1から3への重み3の有向辺は、
となります。
よって、条件はかつとなり、最終的に右辺が小さい方の
という条件のみとなります。
この時の右辺は、最短経路問題における最小コストであると言えます。
という制約において、非負整数であれば、
のいずれでも良いわけです。しかし、有向グラフとして考えていることから、が採用されます。
これは、 という制約のなかでの最大値であると言えます。
もう少し一般化してみます。
頂点が終点となる有向辺について、その有向辺の始点となる頂点をとし、その有向辺のコストをそれぞれとします。
これを線形計画の制約とみなしたとき、 となります。右辺は最短経路問題における最小コストの計算と同じです。
また、最短経路問題と見做しているため、
となります。これは、制約式の最大値となります。
以上が、最短経路が最大値となる理由だろうと思います。