しょぼんブログ

数学の色々とか様々とか

02/27 日記

ABC241ばちゃ, 6完(調子いい), もし出ていたら286位(Perf 2014). どれも全体的に実装が重いなぁと思った. 比較的簡単に解けたF問題が上位青Diffなのに驚いた. しかし今見返すとそれほど簡単なわけではない.
ARC136, 2完 607位, Perf 1737 (-4). B問題がすぐに解けたのは良かったが, D問題が解けなかったのは実力不足だった.
D問題は, 累積和が高速ゼータ変換的な操作で動かせることに気付かなかった. 余計にO(2^d)かかる解法を書こうとしていた.

Dの解説で高速ゼータ変換と言っていたので, 少し読んでみた. ゼータ変換累積和に対応する操作で, メビウス変換階差に対応する操作らしい. ゼータ変換, メビウス変換は任意の半順序関係(xがyの倍数を示すy|xも!)に適応できて, だから実は約数系包除と呼ばれるテクニックは本質的にメビウス変換をしていたことになる.(本当か?)
累積和は2次元だと \displaystyle S(x_2)(y_2) = \sum_{0 \leq x_1 \leq x_2, 0 \leq y_1 \leq y_2} a(x_1)(y_1)だったが, これでは時間がかかってしまう(全てのサイズをNとして, O(N^2) ?). そこで次元ごとに分けて動的計画法で累積和を取ることで, より高次元でも簡単に計算できる. たとえば, 2次元だと縦に累積和を取ったあと, 今度は横に累積和を取ることで次元をdとしてO(dN)で計算できる.
明日からもこの話題について勉強する. 典型030は昔悩んだ末に何も分からなかったが, 今日問題を見て数分で解けてしまった. その問題もこれに関連する.

さて, 典型015に知らないアルゴリズムがでた. 強連結成分分解といい, 一番いい感じの強連結(任意の2頂点が行き来可能)を頂点V, 辺EとしてO(|V|+|E|)で求めてくれるらしい. これはトポロジカルソートのいいところを使っていて, 素晴らしいと思った. そういえば, トポロジカルソートも半順序関係だよね.