Site cover image

Site icon imageSen(Qian)’s Memo

This website is Donglin Qian (Torin Sen)’s memo, especially about machine learning papers and competitive programming.

(講義ノート)乱択アルゴリズム第5回

前回📄Arrow icon of a page link(講義ノート)乱択アルゴリズム第4回 もDNFについてアルゴリズムを考えたが、今回もDNFについて別のアルゴリズムを考えて、解析をする。

DNF=選言標準形の定義

まず、変数がx=(x1,,xn)\mathbf{x} = (x_1, \cdots, x_n)である。

そして、関数全体を

  1. 節はx1xix_1 \land \cdots \land x_iのようにする。このようにANDでつなげる。
  2. 節全体をORつまり\lorでつなげる。

充足可能性の判定自体は線形時間でできるが、解が何個存在するのか?

#P困難である。

なお、節の中身がORで、節全体をつなげるのがANDの場合はCNF=連言標準形であり、それの充足可能性はSATである。

FPRAS(Fully Polynomial-time Randomized Approximation Scheme)

解の個数をS(ϕ)S(\phi)とする。このとき、多項式関数ffが存在し、

ϵ>0,f(n,m,1/ϵ)\forall \epsilon > 0, f(n, m, 1 / \epsilon)

の時間で動作し、その出力は高確率(1/2より高ければよい)でS(ϕ)S(\phi)1±ϵ1 \pm \epsilon近似である。

ここでn,mn, mを出したのはDNFの解の個数の推定をやりたいから。

前回紹介したKL.KLMのアルゴリズム

O(nm2/ϵ2)O(n m^2/\epsilon ^ 2)のアルゴリズムである。

  • SiS_iii番目の節を充足する解の集合
  • 推定したいのはA=i=1mSiA = |\bigcup_{i=1}^m S_i |である。ORなのでいずれかのSiS_iに入れば解である。
  • Si=2nli|S_i| = 2^{n - l_i}lil_iSiS_iのリテラルの個数。
    • 全体でnn個の変数がある中で、ii番目の節を充足するのは、節の中のlil_iの変数からなる1通りの配置だけ。その節の外はどうなろうが問題ないので、任意に配置していい。
  • B=i=1mSiB = \sum_{i=1}^m |S_i|は単純に加算すればいいので簡単である。

ここで、A/B[0,1]A / B \in[0, 1]を推定することを考える。

https://users.soe.ucsc.edu/~sesh/Teaching/2020/CSE290A/Slides/Lecture4.pdf

for j in [1, t]: 
		節iを確率|Si|/Bで選ぶ。(ここで重点サンプリング)
		節iを充足する解xを選ぶ。(節に含まれない変数は一様にランダムに決める)
		あるkがあって、k < iでxが節kをみたすのならばX_j=0
		それ以外ならばX_j=1

(sum(X, [1, t]))/tがA/Bの推定値

そして、前回ではこれはO(nm/ϵ2)O(nm / \epsilon^2)に計算量を落とせるという改良もあるというわけだった。

今回は、別のアルゴリズムを考える。

DXXX

C(x)C(x)