Processing math: 1%

2017年6月19日月曜日

環と半環上の行列積やその検査について

行列積についてのメモついでに.

行列積アルゴリズムは応用上重要であり, これまで様々な研究がなされてきました.
現在のところ知られている最速なアルゴリズムは, n \times n行列A,Bに対してO(n^{2.38...})時間で積A\cdot Bを計算できます.

一方三つのn\times n行列A,B,Cが与えられたときにA\cdot B=Cであるか否かを判定するアルゴリズムは, O(n^2)時間で判定する乱択アルゴリズムが知られています(実際にはモンテカルロアルゴリズムで, 高々0.5の確率でA\cdot B\neq CなのにA=Bと出力してしまいます).

さて, 行列積について見るとき, ほとんどの方はそれが通常の実数\mathbb{R}または有理数\mathbb{Q}上の演算で解釈しているはずです. しかし組合せ最適化の文脈ではしばしば(\min,+)代数が出てきます. (\min,+)代数は\mathbb{R}\cup \{\infty\}上で定義される代数系で, 要するにa+b:=\min(a,b), a\cdot b:=a+b(通常の実数の和)として定められます. この算数は例えばグラフの最短経路を考える際に役に立ちます. そして(\min,+)代数の他にも数学・情報科学ではトロピカル代数(いわゆる(\max,+)代数のことで, Maslov 代数などとも呼ばれます), (\max,\min)代数, (AND, OR)代数などが知られています. ちなみにMaslov代数は本当に面白いので余裕があればこの論文この論文この記事などをさらっと眺めて見るのも良いかもしれません. そしてこれらの代数系は半環と呼ばれるものであり, "引き算"がありません. 例えば, (\min,+)代数においては加法の単位元が\inftyになるわけですが, 任意のa\in \mathbb{R}に対して\min(a,x)=\inftyとなるxは存在しません. 環では加法の逆元が存在し, 半環ではそれが存在しない. これが重要なポイントです.

さて, 先ほど紹介した環上のO(n^2)時間の行列積検査アルゴリズムは, n次元ベクトルrを, 各成分r_i \in \{0,1\}をランダムに決めて生成し, x=A(Br)y=Crをそれぞれ計算し, x=yならA=B, そうでないならばA\neq Bと出力するものです.
ここでは \mathrm{Pr}[ABr=Cr | AB\neq C] \leq 0.5を示せば良いのですが, D=AB-Cとすると(今は環で考えているので引き算が使えます), あるi,jが存在してD_{ij}\neq 0となるはずです. このi,jに対して

\mathrm{Pr}[Dr=0 | D\neq 0]\leq \mathrm{Pr}[(Dr)_i=0 | D_{ij}\neq 0] = \mathrm{Pr}[D_{ij}r_j = -\sum_{k\neq j}D_{ik}r_k | D_{ij}\neq 0]\leq 0.5

が成り立つので, 上の主張が示されたことになります. しかしここでの証明ではD=AB-Cを考えていたので, 代数系としては環であることを用いてます. では引き算が使えない半環だとどうなのでしょうか?

また, 行列積をO(n^{2.807...})時間で計算するかの Strassenのアルゴリズムでもやはり, 解をマージする部分で引き算を使っているので, 環のためのアルゴリズムになっています.

半環であっても実際にA\cdot Bは愚直にやればO(n^3)時間で計算できるので, O(n^3)時間で半環上の行列積や検査ができます. 一方で行列の入力に\Omega(n^2)時間は最低でもかかります. ではO(n^3)より高速に, 例えばO(n^{2.7})時間とかで計算できないのでしょうか?

実は, 半環はおろか(\min, +)代数に対しては積の計算・検査は出来ないだろうと考えられていて,  計算複雑性理論においては任意の\epsilon>0に対してO(n^{3-\epsilon})時間で(\min,+)代数上の行列積の計算・検査はどちらも計算出来ないと考えられています.
そして実は(\min,+)代数上の行列積とグラフの全点対最短経路問題は似ている構造を持った問題であり, 一方が\tilde{O}(n^{3-\epsilon})時間で解けたらもう一方も同様の計算時間で解けるという結果が2010年に示されました (\tilde{O}\mathrm{poly}(\log n)を無視したオーダーの意).




0 件のコメント:

コメントを投稿

講義資料をNotionで書いてみた

 プログラミング応用という名前の講義を受け持っており, そこで組合せ最適化のベーシックな話題とそのPythonでの実装を教えているのですが, 資料をNotionで書いてみました. 講義資料をNotionで公開しているのでアルゴリズムの基礎とかNP困難性とかを勉強したい人はどう...