差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
次のリビジョン両方とも次のリビジョン
programming_algorithm:dynamic_programming:subset_convolution [2020/02/13] – [定義] ikatakosprogramming_algorithm:dynamic_programming:subset_convolution [2020/02/14] – [定義] ikatakos
行 11: 行 11:
 ===== 定義 ===== ===== 定義 =====
  
-集合についての数え上げを行う動的計画法の一種。+集合についての畳み込みを行う動的計画法の一種。
  
   * ある $N$ 個のものがある   * ある $N$ 個のものがある
行 19: 行 19:
   部分集合  {}, {0}, {1}, {2}, {0, 1}, {0, 2}, {1, 2}, {0, 1, 2}   部分集合  {}, {0}, {1}, {2}, {0, 1}, {0, 2}, {1, 2}, {0, 1, 2}
  
-  * それぞれの部分集合につき、何らかのスコアが決まっている +  * それぞれの部分集合 $S$ につき、何らかのスコア $f(S)$ が決まっている 
-  * ある部分集合 $S$ について、$\subseteq T$ となるような全ての $T$ のスコアの総和を求めたい+  * ある部分集合 $S_i$ について、$S_i \subseteq T$ となるような全ての $f(T)$ の総和を求めたい
  
   部分集合  {}, {0}, {1}, {2}, {0, 1}, {0, 2}, {1, 2}, {0, 1, 2}   部分集合  {}, {0}, {1}, {2}, {0, 1}, {0, 2}, {1, 2}, {0, 1, 2}
-  スコア     3      4    1      5                    6+  f(S)       3      4    1      5                    6
      
-  S = {1}  →  T = {1}, {0, 1}, {1, 2}, {0, 1, 2} +        Si = {1} 
-      スコアの総和  4  +            6    17+     →  T = {1}, {0, 1}, {1, 2}, {0, 1, 2} 
 +  f(T)の総和  4  +            6    17
  
   * これを全ての部分集合について行うのが「ゼータ変換」であり、高速に行うアルゴリズムを「高速ゼータ変換」という。   * これを全ての部分集合について行うのが「ゼータ変換」であり、高速に行うアルゴリズムを「高速ゼータ変換」という。
  
   部分集合  {}, {0}, {1}, {2}, {0, 1}, {0, 2}, {1, 2}, {0, 1, 2}   部分集合  {}, {0}, {1}, {2}, {0, 1}, {0, 2}, {1, 2}, {0, 1, 2}
-  スコア     3      4    1      5                    6+  f(S)       3      4    1      5                    6
   Z変換     31  21   17   18     11      15              6   Z変換     31  21   17   18     11      15              6
  
-  * また、Z変換後から元のスコアを逆算する処理を「メビウス変換」という。+  * また、Z変換後から元の $f(S)$ を逆算する処理を「メビウス変換」という。
  
-  スコア     3      4    1      5                    6+  f(S)       3      4    1      5                    6
                  ゼータ変換↓   ↑メビウス変換                  ゼータ変換↓   ↑メビウス変換
   Z変換     31  21   17   18     11      15              6   Z変換     31  21   17   18     11      15              6
  
 +ただし、競プロ界隈ではよく使われるこの定義は限定的なものであり、本来のゼータ変換はもう少し広い範囲を指す。
 +
 +  * [[wpjp>隣接代数 (順序理論)]]
 +  * [[https://maspypy.com/%E6%95%B0%E5%AD%A6-%E7%95%B3%E3%81%BF%E8%BE%BC%E3%81%BF%E5%85%A5%E9%96%80%EF%BC%9Adirichlet%E7%A9%8D%E3%81%A8%E3%82%BC%E3%83%BC%E3%82%BF%E5%A4%89%E6%8F%9B%E3%83%BB%E3%83%A1%E3%83%93%E3%82%A6|[数学] 畳み込み入門:Dirichlet積とゼータ変換・メビウス変換 | maspyのHP]]
 ==== 定義揺れ ==== ==== 定義揺れ ====
  
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