メモ

yukicoderでゆるふわgolf

ゼータ変換とメビウス変換

高速ゼータ変換/高速メビウス変換 - naoya_t@hatenablogで誤りを指摘されたので、反省の意味を込めて自分でちゃんと考えた。
メビウスの反転公式 - Wikipediaを元にしているけど、よくわかってないので間違ってたら教えて





追記
全部隣接代数 (順序理論) - Wikipediaに書いてました。ちゃんちゃん
追記終わり





○ゼータ変換・メビウス変換とは
Gを可換順序群、R可換環とする。
このとき、{f:G+{0}R}への作用素ζを、(ζf)(x)=0yxf(y) により定める。
これをゼータ変換という。
もしζμ=ϵとなるμが存在すれば、ゼータ変換には逆変換が存在し
(ζ1f)(x)=0yxμ(y)f(xy) となる。これをメビウス変換という。
ただし ϵ(x)={1(x=0)0(otherwise)である。


式の形を見れば分かる通り、これらは畳み込み積の計算であり、ζf=1fである。
G=R=Rの場合などをイメージしてみよ)
ϵは畳み込みにおける単位元であり、1μ=ϵであるから、μは定数関数1の畳み込みにおける逆元である。
このことからμ(ζf)=μ(1f)=(μ1)f=fにより、逆変換ができることが確かめられる。



は?



○競プロでよく見るやつ
・高速ゼータ変換
集合Xがあり、べき集合上の関数f:P(X)→Rがある。
g(S)=TSf(T)を高速に求める
・高速メビウス変換
集合Xがあり、べき集合上の関数f:P(X)→Rがある。
g(S)=TS(1)|T|f(ST)を高速に求める

「普通にやるとO(3^N)だけどO(N*2^N)でできるよ~」というやつ。
これは、べき集合P(X)を自然にG=ZXへ持っていたと考えているようなもの(ほんとに?)
(もう少し仮定を弱めてGは群でなくてもよいのでは??)
※この例でいうとSTのように、ある種の"差"が計算できる必要があると思っていたので、fの定義域を群にしたのだけど、wikipediaを見ると、区間を引数にとる関数だと思えばよかったらしい。なるほど



メビウスの反転公式
正整数上の関数f,gが
g(n)=d|nf(d)
を満たすとする。このとき
f(n)=d|nμ(d)g(n/d)
が成り立つ。ただしμメビウス関数

これはG=Q/{±1}Zωに自然な順序xyy/xZを定めたものと言える



メビウス変換と包除原理
Uを集合とし、N個の集合AiUがある。
X={1,...,N}とし、f:P(X)Z
f(S)=|iSAi| により定める。
g(S)=|iSAi| とおくと、包除原理から
|iSAi|=TS(1)|T|+1|iTAi|=TS(1)|T|+1f(T)=TS(1)|T|+1f(T)f()=(1)|S|+1TS(1)|ST|f(T)f()=(1)|S|+1TS(1)|T|f(ST)f()=(1)|S|+1(ζ1f)(S)f()
となる。
よってあらかじめf()を|U|ではなく||=0と定めておけば、g(S)=(1)|S|+1(ζ1f)(S)となることが確かめられる。