差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
programming_algorithm:dynamic_programming:subset_convolution [2020/02/14] – [定義] ikatakosprogramming_algorithm:dynamic_programming:subset_convolution [2020/02/14] (現在) – [高速ゼータ変換 高速メビウス変換] ikatakos
行 6: 行 6:
   * [[https://www.hamayanhamayan.com/entry/2017/05/20/125607|競技プログラミングにおける畳み込み問題まとめ(FFT,アダマール変換,メビウス変換,ゼータ変換) - はまやんはまやんはまやん]]   * [[https://www.hamayanhamayan.com/entry/2017/05/20/125607|競技プログラミングにおける畳み込み問題まとめ(FFT,アダマール変換,メビウス変換,ゼータ変換) - はまやんはまやんはまやん]]
  
-競プロでたまに出てくるアルゴリズムで、ちょっと直感的な理解が難しい故か、解説記事がいろいろ書かれている。 +競プロでたまに出てくるアルゴリズムで、ちょっと直感的な理解が難しい故か、解説記事がいろいろ書かれている。 \\ 
-更にそれを整理したキュレーション記事も既にあるため、今更独自に書く意味がある不明だが、まぁそこは気にせず自分用メモとして書いておく。+更にそれを整理したキュレーション記事も既にあるため、今更独自に書く意味があるか微妙だが、まぁそこは気にせず自分用メモとして書いておく。
  
 ===== 定義 ===== ===== 定義 =====
行 183: 行 183:
 それを考えると、メビウス変換は逆演算が可能でなければならない? maxは逆演算できないので、メビウス変換は適用できないと思われる。 それを考えると、メビウス変換は逆演算が可能でなければならない? maxは逆演算できないので、メビウス変換は適用できないと思われる。
  
-==== 最大公約数によるまとめ上げ ====+==== 包含以外の畳み込み ====
  
-  * [[http://noshi91.hatenablog.com/entry/2018/12/27/121649|高速ゼータ変換の約数版 - noshi91のメモ]]+ゼータ変換後の $f$ を $\zeta(f)$ とする。ゼータ変換①を式で表すと 
 + 
 +  * $\zeta(f)(S) = \sum_{S \subseteq T} f(T)$ 
 + 
 +ここで $S$ はbitフラグを示す一般の数字と解釈すると、BitAND演算で示すことも出来る。 
 + 
 +  * $\zeta(f)(i) = \sum_{i \ AND \ j=i} f(j)$ 
 + 
 +このBitAND演算を変えて畳み込みを行うバリエーションも存在する。特にゼータ変換②は、BitORにしたものである。 
 + 
 +  * ゼータ変換② 
 +    * $\zeta(f)(i) = \sum_{i \ OR \ j=i} f(j)$ 
 +  * maxによる畳み込み 
 +    * $\zeta(f)(i) = \sum_{\max(i,j)=i} f(j)$ 
 +      * 単なる累積和っぽい? 
 +  * 最大公約数、最小公倍数による畳み込み 
 +    * $\zeta(f)(i) = \sum_{\gcd(i,j)=i} f(j)$ 
 +      * $i$ の倍数であるような $j$ 
 +    * $\zeta(f)(i) = \sum_{{\rm lcm}(i,j)=i} f(j)$ 
 +      * $i$ の約数であるような $j$ 
 +    * [[http://noshi91.hatenablog.com/entry/2018/12/27/121649|高速ゼータ変換の約数版 - noshi91のメモ]]
  
programming_algorithm/dynamic_programming/subset_convolution.txt · 最終更新: 2020/02/14 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0