Seberapa banyak kita dapat mengurangi jumlah klausa dengan mengkonversi dari

8

Jika kita mengira bahwa kita mulai dengan turunan dari -SAT, dan mencoba mengonversi masalah menjadi turunan dari -SAT, di mana terdapat literal per klausa, dapatkah kami menjamin pengurangan dalam jumlah klausa total?k(k+m)(k+m)

Saya menyadari setelah memposting bahwa kami tidak dapat menjamin bahwa jumlah klausa dapat dikurangi. Namun, saya bertanya-tanya apakah kita memiliki klausa, dapatkah kita mendapatkan sesuatu seperti klausa dengan beberapa teknik "reduksi"?nn/k+O(1)

Jika demikian, seberapa banyak kita dapat menjamin jumlah klausa dapat dikurangi? Misalnya, jika kita mulai dengan -SAT dengan klausa , berapakah terkecil yang dijamin , jumlah klausa baru, yang akan dihasilkan jika kita mengonversi instance ini ke -SAT?knknk+m(k+m)

Lebih penting lagi, bagaimana kita melakukan konversi ini?

Matt Groff
sumber

Jawaban:

5

Salah satu jenis konversi hanyalah kebalikan dari konversi k-sat-to-3-sat:

Ingat, konversi k-sat ke "j" -sat, j<k:

(x1x2...xj...xk)(x1x2...xjd)(d¯xj+1xj+2...xk)

Sini, dadalah variabel dummy, yang artinya sekitar "Klausa ini tidak benar, tetapi klausa lain yang saya tahu adalah". Klausa lain menjadi klausa berikutnya yang terpisah dari aslinya. Di atas adalah contoh di mana2jk, jika tidak, simpul split 2 masih akan lebih besar dari j, dan kita harus membaginya lagi, dengan cara yang sama.

Membalikkan konversi

(x1x2...xj)(x¯jxj+1...xk) maka Anda dapat menggabungkan klausa menjadi:

(x1x2...xj1xj+1xj+2...xk)

Perhatikan yang hilang xj dalam formula baru ini.

Tentu saja, Anda tidak dijamin menemukan klausa seperti ini dalam formula sewenang-wenang sehingga dijamin terkecilnk+m adalah sama dengan nk.

Namun, pada rumus biasa, variabel dan negasinya akan muncul dalam rumus; jika tidak, Anda dapat melakukan eliminasi literal murni (dijelaskan di sini ). Untuk kesederhanaan, mari kita asumsikan jugak+m2k2. Lalu kita bisa menggabungkan dua klausa yang mengandung literal dalam satu dan negasi di yang lain. Karena setiap literal harus memiliki klausa lain dengan negasi, orang dapat secara empiris menebak bahwa Anda seharusnya dapat mengurangi kira-kira separuh jumlah klausa (Anda mungkin terjebak dengan beberapa literal dan negasinya dalam klausa yang sudah tergabung, dan dengan demikian Anda akan terjebak dengan klausa beberapa klausa yang tidak dapat disatukan pada akhirnya; bergabung secara optimal dengan klausa seperti ini mungkin merupakan masalah lain yang menarik).

EDIT:

Setelah refleksi, saya menyadari itu xjharus bebas dan tidak digunakan di tempat lain dalam rumus untuk menutup dua klausa yang menjadi miliknya. Oleh karena itu, klausa jenis ini (satu mengandung literal, dan yang lainnya negasi, dengan literal ini tidak digunakan di tempat lain dalam formula) jauh lebih jarang daripada yang saya pikir sebelumnya di atas. Jadi jawaban sebenarnya adalah, tidak ada jaminan berapa banyak kita bisa mengurangi jumlah klausa dalam formula.

Realz Slaw
sumber
Bagaimana Anda mendapatkan formula konversi itu? Sepertinya saya salah, dan Anda bisa memeriksanya di tabel kebenaran.
Matt Groff
Hai, saya sudah membacanya sejak lama, tetapi Anda bisa melihatnya di sini . Saya mungkin salah ketik, atau entah bagaimana membuat sesuatu yang tidak jelas dalam pertobatan; jika demikian, silakan tunjukkan.
Realz Slaw
@MattGroff Sepertinya saya tidak dapat menemukan kesalahan saya, dapatkah Anda memberikan contoh balasan?
Realz Slaw
Contoh penghitung yang saya periksa adalah memulai dengan satu klausa, (AB). Saya kemudian membaginya menjadi dua klausa,(Ad)(d¯B)dimana d¯ menunjukkan "tidak d". If you check this in a truth table, they shouldn't be equal. I'll be anxiously waiting to hear if you get the same results. Also, I believe I know how we can fix this answer so that it does work, if it turns out that the original k-SAT to "j"-SAT conversion is incorrect...
Matt Groff
SEBUAHBSEBUAHB(SEBUAHd)(d¯B)0000|d={0,1}0111|d={1}1011|d={0}1111|d={1,0}
Realz Slaw