ลด SAT โดยตรงไปที่ 3-SAT


18

นี่คือเป้าหมายคือการลดปัญหา SAT ตามอำเภอใจเป็น 3-SAT ในเวลาพหุนามโดยใช้คำสั่งและตัวแปรจำนวนน้อยที่สุด คำถามของฉันถูกกระตุ้นด้วยความอยากรู้ ฉันต้องการทราบอย่างเป็นทางการน้อยกว่า: "การลดทอน" ธรรมชาติที่สุด "จาก SAT เป็น 3-SAT คืออะไร"

ตอนนี้การลดลงที่ฉันเคยเห็นในหนังสือเรียนเป็นไปตามนี้

  1. ก่อนอื่นให้ยกตัวอย่าง SAT ของคุณและใช้ทฤษฎีบท Cook-Levin เพื่อลดให้เหลือวงจร SAT

  2. จากนั้นคุณจะทำงานให้เสร็จโดยลดมาตรฐานของวงจร SAT เป็น 3-SAT โดยแทนที่ประตูด้วยประโยค

ในขณะที่ใช้งานได้ผลประโยค 3-SAT จบลงดูเหมือนไม่มีอะไรเหมือนกับประโยค SAT ที่คุณเริ่มด้วยเนื่องจากการประยุกต์ใช้ครั้งแรกของทฤษฎีบท Cook-Levin

มีใครบ้างที่เห็นวิธีลดความเสี่ยงโดยตรงโดยข้ามขั้นตอนวงจรกลางและไปที่ 3-SAT โดยตรงหรือไม่ ฉันยังจะมีความสุขกับการลดลงโดยตรงในกรณีพิเศษของ n-SAT

(ฉันเดาว่าจะมีการแลกเปลี่ยนระหว่างเวลาการคำนวณและขนาดของเอาท์พุทเห็นได้ชัดว่าเสื่อมโทรม - แม้ว่าโชคดีที่ไม่สามารถยอมรับได้เว้นแต่ว่า P = NP จะแก้ปัญหา SAT เพียงจากนั้นปล่อย 3 เล็กน้อย -SAT อินสแตนซ์ ... )

แก้ไข: ตามคำตอบของวงล้อเป็นที่ชัดเจนในขณะนี้ว่าการลดลงของ n-SAT นั้นค่อนข้างเล็กน้อย (และฉันควรจะคิดอย่างรอบคอบก่อนที่จะโพสต์) ฉันเปิดคำถามนี้ทิ้งไว้สักครู่ในกรณีที่มีคนรู้คำตอบของสถานการณ์ทั่วไปมิฉะนั้นฉันก็จะยอมรับคำตอบของวงล้อ


7
ฉันไม่เข้าใจการใช้ Cook-Levin ใน (1) บูลีนสูตร-SAT ไม่ได้เป็นกรณีพิเศษของวงจร -ATT ซึ่งโครงสร้างกราฟของวงจรเป็นต้นไม้หรือไม่
Luca Trevisan

คำตอบ:


28

แต่ละส่วนคำสั่ง SAT มี 1, 2, 3 หรือมากกว่านั้น ประโยคที่ 3 ตัวแปรสามารถคัดลอกโดยไม่มีปัญหา

ส่วนคำสั่งตัวแปร 1 และ 2 {a1}และ{a1,a2}สามารถขยายเป็น{a1,a1,a1}และ{a1,a2,a1}ตามลำดับ

ส่วนคำสั่งที่มีตัวแปรมากกว่า 3 ตัว {a1,a2,a3,a4,a5}สามารถขยายเป็น{a1,a2,s1}{!s1,a3,s2}{!s2,a4,a5}พร้อมกับs1และs2ตัวแปรใหม่ซึ่งค่าจะขึ้นอยู่กับว่าตัวแปรใดในข้อต้นฉบับเป็นจริง


6
ระมัดระวัง ใครบอกว่าอินพุตกับ SAT จะต้องมี "คำสั่ง"
Jeff

6
คำถามที่ว่า "ฉันจะมีความสุขกับการลดโดยตรงในกรณีพิเศษของ n-SAT"
Ryan Williams

ใช่นั่นใช้งานได้! ฉันเดาว่าฉันควรจะคิดให้รอบคอบมากกว่านี้ก่อนที่จะเพิ่มบรรทัดสุดท้าย แต่ถ้าฉันไม่ได้รับคำตอบสำหรับคำถามทั่วไปฉันจะยอมรับสิ่งนี้
Mikola

1
@ Mikola บางทีการแปลง Tseitin หรือ Plaisted-Greenbaum จะให้ 3CNF เหรอ? (ฉันไม่แน่ใจว่าฉันเข้าใจคำถามอย่างเต็มที่ :))
มิ

ฉันสงสัยว่าทำไมส่วนขยายเฉพาะสำหรับ k = 1 ที่กล่าวถึงโดยวงล้อไม่ปรากฏในหนังสือใด ๆ (อย่างน้อยสิ่งที่ฉันได้พบมา) เหตุผลของฉันคือโดยนิยามตัวอักษรอาจเป็น 'ไม่ใช่ a1' ซึ่งไม่สามารถขยายได้เช่น {a1, a1, a1} ในทางกลับกันคุณไม่สามารถทำ {'ไม่ a1', 'ไม่ใช่ a1', 'ไม่ใช่ a1]} เนื่องจากมันต้องการตรรกะอื่นเพื่อระบุว่า sat ต้นฉบับมีตัวอักษรที่ถูกทำให้ไร้ผลหรือไม่ นี่คือเหตุผล (สมมุติ) ผู้เขียนทั้งหมดรวมถึง Michael R. Garey และ David S. Johnson ใช้ส่วนขยายอื่นที่แสดงโดย 'Carlos Linares López' ในโพสต์ของเขา / เธอที่นี่
KGhatak


19

หากคุณต้องการลดจาก k-SAT เป็น 3-SAT คำตอบของวงล้อก็ใช้ได้ดี

หากคุณต้องการลดโดยตรงจากสูตรเชิงประพจน์ทั่วไปเป็น CNF (และ 3-SAT)จากนั้น - อย่างน้อยจาก "มุมมองนักแก้ปัญหา SAT" - ฉันคิดว่าคำตอบสำหรับคำถามของคุณการลด 'ธรรมชาติที่สุด' คืออะไร ... ? คือ: ไม่มีการลด 'ธรรมชาติ' !

จากบทสรุปของบทที่ 2 - "การเข้ารหัส CNF"ของหนังสือ (ดีมาก): คู่มือความพึงพอใจ :

...
มักจะมีหลายวิธีในการสร้างแบบจำลองปัญหาที่กำหนดใน CNF และแนวทางบางประการที่เป็นที่รู้จักสำหรับการเลือกในหมู่พวกเขา บ่อยครั้งที่มีตัวเลือกของคุณสมบัติของปัญหาในการสร้างแบบจำลองเป็นตัวแปรและบางคนอาจใช้ความคิดที่จะค้นพบ การเข้ารหัส Tseitin นั้นกะทัดรัดและสามารถใช้งานได้ แต่ในทางปฏิบัติไม่ได้นำไปสู่รูปแบบที่ดีที่สุดเสมอไปและ subformulae บางอันอาจขยายได้ดีกว่า คำสั่งบางอย่างอาจถูกละเว้นโดยการพิจารณาเรื่องขั้วและอาจมีการเพิ่มคำสั่งแบบแบ่งย่อยหรือบล็อกที่ถูกต้องแบบสมมาตร การเข้ารหัสที่แตกต่างกันอาจมีข้อดีและข้อเสียต่างกันเช่นขนาดหรือความหนาแน่นของการแก้ปัญหาและสิ่งที่เป็นข้อได้เปรียบสำหรับการแก้ปัญหา SAT หนึ่งอาจเป็นข้อเสียสำหรับอีก ในระยะสั้นการสร้างแบบจำลอง CNF เป็นศิลปะและเรามักจะต้องดำเนินการโดยสัญชาตญาณและการทดลอง
...

อัลกอริทึมที่รู้จักกันมากที่สุดคืออัลกอริทึมTseitin (G. Tseitin ในความซับซ้อนของการสืบทอดในแคลคูลัสเชิงประพจน์ระบบอัตโนมัติของการใช้เหตุผล: เอกสารคลาสสิกในการคำนวณตรรกะ 2: 466–483, 1983. Springer-Verlag.)

สำหรับการแนะนำที่ดีในการเข้ารหัส CNF อ่านหนังสือแนะนำคู่มือ o Satisfiability นอกจากนี้คุณยังสามารถอ่านงานล่าสุดและดูการอ้างอิง; ตัวอย่างเช่น:

  • P. Jackson และ D. Sheridan ข้อแบบฟอร์มการแปลงสำหรับวงจรบูลีน ใน HH Hoos และ DG Mitchell บรรณาธิการทฏีและการประยุกต์ใช้การทดสอบความพึงพอใจการประชุมนานาชาติครั้งที่ 7, SAT 2004 , ปริมาณ 3542 ของ LNCS, หน้า 183–198 Springer, 2004. (ซึ่งมีวัตถุประสงค์เพื่อลดจำนวนข้อ)
  • P. Manolios, D. Vroon, วงจรที่มีประสิทธิภาพเพื่อการแปลง CNF ในทฤษฎีและการประยุกต์ใช้การทดสอบความพึงพอใจ - SAT 2007 (2007), หน้า 4-9

15

ให้ฉันได้โปรดโพสต์วิธีแก้ปัญหาอื่นที่คล้ายกับ Ratchel แต่แตกต่างกันบ้าง สิ่งนี้นำมาโดยตรงจากบทที่ 9 ของรุ่นที่ 2 ของ"คู่มือการออกแบบอัลกอริทึม"โดย Steven Skiena

  • หากประโยคมีตัวอักษรเพียงตัวเดียว C = {z1} ให้สร้างตัวแปรใหม่สองตัวคือ v1 และ v2 และสี่ส่วนของ 3 ตัวอักษรใหม่: {v1, v2, z1}, {! v1, v2, z1}, {v1,! v2, z1} และ {! v1,! v2, z1} โปรดทราบว่าวิธีการเดียวที่อนุประโยคทั้งสี่ข้อนี้จะพึงพอใจในเวลาเดียวกันคือถ้า z1 = T ซึ่งหมายความว่า C ต้นฉบับจะพอใจ
  • หากประโยคมีสองตัวอักษร C = {z1, z2} ให้สร้างตัวแปรใหม่หนึ่ง v1 และสองประโยคใหม่: {v1, z1, z2} และ {! v1, z1, z2} อีกครั้งวิธีเดียวที่จะทำให้ข้อเหล่านี้เป็นไปตามข้อสองข้อคือมีอย่างน้อยหนึ่งใน z1 และ z2 เป็นจริงดังนั้นทำให้พอใจ C
  • หากประโยคมีสามตัวอักษร C = {z1, z2, z3} เพียงแค่คัดลอก C ไปยังอินสแตนซ์ 3-SAT ที่ไม่เปลี่ยนแปลง
  • หากข้อมีมากกว่า 3 ตัวอักษร C = {z1, z2, ... , zn} ให้สร้างตัวแปรใหม่ n-3 และส่วนคำสั่งใหม่ n-2 ในห่วงโซ่โดยที่ 2 <= j <= n-2 , Cij = {v1, j-1, zj + 1,! vi, j}, Ci1 = {z1, z2,! vi, 1} และ Ci, n-2 = {vi, n-3, zn-1, Zn}

1
@TayfunPay คุณช่วยอธิบายได้ไหมว่าทำไมคุณถึงคิดว่าโซลูชันนี้มีความถูกต้องมากขึ้น? ตัวแปรที่ซ้ำกันดูเหมือนเป็นธรรมชาติมากสำหรับฉันและไม่ละเมิดคำจำกัดความของ 3SAT ใด ๆ ที่ฉันได้เห็น มีเทคนิคบางอย่างที่ทำให้โซลูชันนี้ดีขึ้นหรือไม่
crockeea
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.