前回📄(講義ノート)乱択アルゴリズム第4回 もDNFについてアルゴリズムを考えたが、今回もDNFについて別のアルゴリズムを考えて、解析をする。
DNF=選言標準形の定義
まず、変数がである。
そして、関数全体を
- 節はのようにする。このようにANDでつなげる。
- 節全体をORつまりでつなげる。
充足可能性の判定自体は線形時間でできるが、解が何個存在するのか?
#P困難である。
なお、節の中身がORで、節全体をつなげるのがANDの場合はCNF=連言標準形であり、それの充足可能性はSATである。
FPRAS(Fully Polynomial-time Randomized Approximation Scheme)
解の個数をとする。このとき、多項式関数が存在し、
の時間で動作し、その出力は高確率(1/2より高ければよい)での近似である。
ここでを出したのはDNFの解の個数の推定をやりたいから。
前回紹介したKL.KLMのアルゴリズム
のアルゴリズムである。
- は番目の節を充足する解の集合
- 推定したいのはである。ORなのでいずれかのに入れば解である。
- 。はのリテラルの個数。
- 全体で個の変数がある中で、番目の節を充足するのは、節の中のの変数からなる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の推定値そして、前回ではこれはに計算量を落とせるという改良もあるというわけだった。
今回は、別のアルゴリズムを考える。
DXXX
を
