群ラベル制約付き最短路問題
この記事は「データ構造とアルゴリズム Advent Calendar 2019」 日目の記事です.*1
日目は @921603 さんによる「Proximity search:列挙アルゴリズムの新たな構築手法」です.
日目は @TsuMakoto さんによる「IDA* with Pattern Databaseでパズルを解く」です.
グラフにおける最短路問題は組合せ最適化の古典的な問題ですよね.今回は,その制約付きの変種に対する効率的なアルゴリズムを紹介したいと思います.元ネタは,来年 月に開催される SODA という離散アルゴリズムの国際会議に採択されている以下の論文です.
Yutaro Yamaguchi: A Strongly Polynomial Algorithm for Finding a Shortest Non-zero Path in Group-Labeled Graphs. In Proceedings of the 31st Annual ACM-SIAM Symposium on Discrete Algorithms (SODA 2020), pp. 1923‒1932. (Link) *2
奇しくも著者の方とイニシャルが同じ (Y.Y.) でした.運命的ですね.
昨日は STOC だったし,最新の SODA と言うと「難しいんじゃ…?」と思う方も居るかもしれませんが,
- It gives a very simple algorithm for an important problem, ...
- The algorithm is simple enough to teach to undergraduates (without the proof of correctness, at least).
- The idea of the algorithm is simple to explain, ...
などと評価されていたため,きっと大丈夫かと思います.*3 これなら競技プログラミングの問題としても出題できそうですね!
では早速中身に入っていきましょう.以下では,入力グラフの頂点数を ,枝数を で表すことにします.また,パスと言ったときには,単純経路を指すものとし,同じ頂点を複数回通るようなものは許さないことに注意してください.
無向グラフにおける最短路問題(制約無し)
古典的な問題とはいえ,導入として普通の最短路問題から始めましょう.
入力 : 無向グラフ,: 枝長,: 端点対
目標 に関して最短である 中の – パス の発見
この問題は,Dijkstra 法*4などを用いれば,効率的に*5解くことができます.
定理 (Dijkstra 1959) 最短路問題に対する決定性 時間アルゴリズムが存在する.*6
このアルゴリズムは,始点 から到達可能な任意の点への に関する最短路を含むような, 中の木を計算できます.この木を, を根とする の最短路木と呼ぶことにします.
無向グラフにおける最短奇パス問題
効率的に解ける制約付き最短路問題として,以下の問題が知られています.
入力 : 無向グラフ,: 枝長,: 端点対
目標 に関して最短である 中の奇数枝数 – パス の発見
先ほどとの違いは,見つけたい対象に「奇数本の枝を使っている」という制約条件が加わったことだけです.*7 この問題は,最小重み完全マッチング問題に帰着でき,効率的に解けることが知られています.さらに,直接的で高速なアルゴリズムが設計できることも知られています.
定理 (Derigs 1985)*8 最短奇パス問題に対する決定性 時間アルゴリズムが存在する.
今回紹介するアルゴリズムは,この Derigs のアルゴリズムに触発され,それを拡張したような形になっています.
群ラベル付きグラフにおける最短非零パス問題
さて,では今回扱う問題を導入しましょう.群ラベル付きグラフとは,無向グラフの各枝に,固定された群の要素がラベルとして付いているようなものです.ラベル付けには向きの情報が付随していて,逆向きに通ると逆元がラベルとして読まれるものとします.
抽象的な定義より,例を見た方が早いので,さっさと進みましょう.定義では を任意の群としますが,馴染みが無ければ整数の加法群 などを考えてもらえばよいです.実際,以下では の場合を例に進めます.
入力 : ラベル付きグラフ,: 枝長,: 端点対
目標 に関して最短である 中の非零ラベル – パス の発見
例を見てもらえればイメージは掴めると思いますが,この問題での目標は,パスに沿って自然に定まるラベル が非零である(群 の単位元でない)ような – パス の中で, に関して最短のものを求めることです.
この問題は,ラベル付けに用いる群 に依って様子が変わってきます.たとえば,位数 の群 を として選ぶと,先ほどの最短奇パス問題と本質的に等価な問題になります.また,曲面 に埋め込まれたグラフに対し, の基本群を として選び,適切に枝のラベルを設定することで,埋め込まれた曲面上で非可縮な閉路*9を求める問題などを定式化することもできます.
今回紹介するのは,群 に依らず*10,最短非零パス問題を効率的に解くアルゴリズムです.
定理 (Yamaguchi 2020) 最短非零パス問題に対する決定性 時間アルゴリズムが存在する.
アルゴリズム
いよいよ本題のアルゴリズムの紹介です.方針は十分にシンプルで,以下の通りです.ここでも,簡単のため, として話を進めますが,任意の群に取り替えても(非可換だろうが無限だろうが)正しく動くというのが紹介論文の強みです.
- まず,制約を無視して Dijkstra 法で を根とする の最短路木 を求める.
- に含まれる唯一の – パス のラベルが非零 であれば, を出力して終了する.
- であれば, とラベルが違う – パスの中で に関して最短のもの を求めて出力する.
1, 2 は Dijkstra 法を実行して,その出力をチェックするだけなので,簡単にできますね.問題は 3 で,この部分を正しく実行するアルゴリズムが以下の主題となります.ここで,以下の補題が重要となります.直観的には,良い非零ラベル閉路 が存在して, が欲しい解を即座に誘導するか,そうでなければ をある程度潰しても大丈夫である,ということを主張しています.
補題 任意の最短路木 に対して,ある枝 が存在して, 中の唯一の閉路 が以下の性質をすべて満たす.ここで, 上で に最も近い点を とする.
- は非零ラベルである.
- の任意の点 に関して, に関して を迂回して得られる – パス は, を満たす中で に関して最短の – パスである.
- 以外の任意の点に関して, を に適切に縮約すれば,問題(ステップ 3 での目標)を本質的に保ったままインスタンスのサイズを小さくできる.
この補題により,現状のインスタンス(+最短路木)に関して条件を満たす枝 を効率的に発見できさえすれば,
- 中に が居れば, に関する迂回路(を元のグラフに展開したもの)を出力,
- 外に が居れば, を に適切に縮約して再帰,
という単純な構造のアルゴリズムを作ることができます.各再帰では頂点数が必ず減るので,再帰の深さは高々 で,一度でも前者の状況になれば終わりなので,繰り返し回数自体が で押さえられますね.
「適切に縮約する」とは何なのか,ということを厳密に定義するのは,概念の簡単さに比べて不必要に面倒なので,直観的な説明と図だけに留めます.直観的には, から の周辺の各頂点への に沿った部分パスの情報(ラベルと長さ)だけを, 本の多重枝として残し,その他はすべて忘れてしまう,ということです.言い換えると, と変な交わり方をするような – パスは,今回の問題を解く上では考える必要が無いということです.図は気持ちで読み取ってください.
さて,最後に,補題の条件を満たす枝 を効率的に見つけられるかという問題を解決しましょう.これには簡単な判定方法があり,毎回 時間で見つけられる,ということが以下の主張から従います.再帰の回数が高々 であったので,これにより,全体として 時間のアルゴリズムが完成します.
主張 任意の最短路木 に対して,非零ラベル閉路 を形成するような枝 のうち, を最小にするようなものを選べば,補題の条件を満たす.
論文中では, に含まれるような非零ラベル閉路 を blossom と呼び,主張中で定義されている値をその高さと定義し,最も低い blossom を探せば良い,と書かれています.
まとめ
群ラベル付きグラフにおける最短非零パス問題に対して,ラベル付けに用いる群に依らない多項式時間アルゴリズムを紹介しました.アイデアとしては,
- まず Dijkstra 法で最短路木 を求めて,
- 中の – パス が非零ラベルならそれを出力して終わりで,
- そうでなければ,
という非常にシンプルな構造でした.計算時間も となっていて,とても綺麗な結果でしたね.
*1:ブログとしてはちょうど一年ぶりの更新,わかりやすいですね.
*2:その後,改良版がリリースされているようです.すごいですね!
Yoichi Iwata, Yutaro Yamaguchi: Finding a Shortest Non-zero Path in Group-Labeled Graphs. arXiv:1906.04062. (Link)
*3:前提知識として,最短路問題に対する Dijkstra 法と,最大マッチング問題に対する Edmonds の花縮約アルゴリズムをなんとなく聞いたことがある,という程度を仮定します.
*4:E. W. Dijkstra: A note on two problems in connexion with graphs. Numerische Mathematik, 1 (1959), pp. 269–271. (DOI: 10.1007/BF01386390)
*5:枝長に関する計算(実数の四則演算や大小比較)は,基本演算として定数時間で実行できることを仮定します.
*6:このアルゴリズムは,優先度付きキューなどのデータ構造を用いて実装することで,より高速化できることも知られています.
*7:この問題は最短路問題(制約無し)を含んでいます.入力グラフで, 周りの枝以外全てをそれぞれ長さ半分の直列枝 本で置き換えれば,任意の – パスの に関する長さを保ったまま,それら全てを実行可能解にできます.
*8:U. Derigs: An efficient Dijkstra-like labeling method for computing shortest odd/even paths. Information Processing Letters, 21 (1985), pp. 253–258. (DOI: 10.1016/0020-0190(85)90094-8)
*9:曲面として,トーラスやクラインの壺のようなものを想像してください.すると,その上の閉曲線で,どんな連続変形でも 点に潰せないようなものが取れるのがわかるかと思います.
*10:枝長に関する計算と同じく,ラベルに関する初等的な操作(群演算や要素の同一性判定,逆元の取得)は,基本演算として定数時間で実行できることを仮定します.