ขออภัยที่ตอบโพสต์เก่า
ฉันเคยคิดเกี่ยวกับมันและฉันคิดว่าปัญหาเกี่ยวกับตัวอักษรคงที่เป็นปัญหาที่สมบูรณ์เช่นกัน
ฉันจะลด SAT 1-in-3 บวกกับปัญหาคำนี้
เมื่อวานฉันมีปัญหากับแนวคิดในการแก้ปัญหา ฉันมีปัญหาในการทำให้แต่ละตัวแปรแตกต่างกันจนกระทั่งฉันดูคำถามอีกครั้งและฉันรู้ว่าคุณอนุญาตให้มีสี่เหลี่ยมที่มีสัญลักษณ์ปลูก ทำให้การลดลงนี้ง่ายขึ้นมาก ความคิดอื่นของฉันคือการมีคำที่มีความยาวต่างกันสำหรับตัวแปรที่แตกต่างกัน
การลดลง
ตอนนี้ฉันจะอธิบายแกดเจ็ตที่เราจะใช้:
Gadget ที่เปลี่ยนแปลงได้
เราติดป้ายแต่ละตัวแปรด้วยดัชนีตัวเลขที่แตกต่างกันและเราจะมีหมายเลขแตกต่างกันสำหรับแต่ละตัวแปร เราเลือกดัชนีที่ใหญ่ที่สุดและเราแทนจำนวนในไบนารีที่เราจะเรียกห่วงโซ่นี้ไบนารีnn
จากนั้นเราสร้างคำในแนวตั้งที่แตกต่างกันสองคำสำหรับแต่ละตัวแปร คำทั้งหมดจะมีความยาว(เฉพาะในกรณีที่เราอนุญาตให้ใช้คำที่ซ้ำกันในรายการคำ) โดยที่คือความยาวของห่วงโซ่ไบนารีn| n | n3+|n||n|n
ตัวอย่างเช่นสมมติดัชนีที่ใหญ่ที่สุดเป็นหมายเลข4เมื่อเราแปลงตัวเลขนี้เป็นเลขฐานสองเราจะได้ลูกโซ่เลขฐานสองโซ่นี้มีความยาวสาม ดังนั้นตัวแปรแต่ละคำจะมีความยาวในตัวอย่างนี้100 641006
ตอนนี้เราสร้างคำที่แตกต่างกันสองคำสำหรับแต่ละตัวแปร หนึ่งคำจะมีสัญลักษณ์อยู่ที่จุดเริ่มต้นจากนั้นสัญลักษณ์ด้านล่างจากนั้นเชนไบนารี่ที่แทนดัชนีของตัวแปรและเรารวมกับศูนย์โซ่เพื่อให้มันมีความยาวเท่ากันที่เชนและสุดท้ายเป็นสัญลักษณ์ในตอนท้าย แน่นอนสัญลักษณ์สามารถเปลี่ยนแปลงได้2 n 332n3
คำอื่น ๆ ที่เกือบจะเหมือนกัน แต่มันจะมีสัญลักษณ์ที่แทนสัญลักษณ์3343
ตัวอย่างเช่นสมมติดัชนีที่ใหญ่ที่สุดเป็นหมายเลข4เราจะมีสองคำต่อไปนี้สำหรับตัวแปรที่มีดัชนี :141
420014320013และ420014
ดังที่เราเห็นเราได้เสริมการแสดงค่าฐานสองของจำนวนด้วยศูนย์เพื่อให้มีความยาว| n |1|n|
เราต้องคัดลอกคำเหล่านี้หลายครั้งเราจะต้องคัดลอกแต่ละคำสำหรับแต่ละการเกิดขึ้นของตัวแปรในแต่ละตัวอย่าง สิ่งนี้จะสร้างรายการซ้ำในรายการคำ เราสามารถกำจัดข้อมูลที่ซ้ำกันได้โดยการเพิ่มไบนารี่เชนอื่นเข้าไปในเชนไบนารี่ที่ระบุตัวแปรเฉพาะ สายโซ่ใหม่นี้จะระบุแต่ละรอบของตัวแปร
ในการทำเช่นนั้นเราเพียงกำหนดแต่ละรอบของตัวแปรอีกเชนคู่และเราทำโซ่นั้นในตอนท้ายของการแทนค่าไบนารี่ของตัวแปร
ในการสร้างไบนารีเชนใหม่นี้ก่อนอื่นเราต้องสร้างดัชนีที่แตกต่างกันสำหรับแต่ละตัวแปรเราเรียกหมายเลขที่มากที่สุดในแต่ละดัชนีโดยที่เป็นตัวระบุสำหรับแต่ละตัวแปร หลังจากนั้นเราแปลงหมายเลขเป็นเชนไบนารี่จากนั้นเรานับความยาวของเชนเราเรียกหมายเลขนี้. จากนั้นสำหรับแต่ละดัชนีเราจะสร้างเลขฐานสองที่แตกต่างกันสำหรับแต่ละค่าของตัวแปร เราใส่ตัวเลขด้วยศูนย์จนความยาวของเชนไบนารี่กลายเป็นเพื่อให้คำทั้งหมดที่อยู่ในแต่ละรอบของตัวแปรมีความยาวเท่ากันฉันn ฉัน| n ฉัน| | n ฉัน|niini|ni||ni|
สิ่งนี้จะกำจัดคำที่ซ้ำกันภายในคำตัวแปร
ตัวอย่างเช่นสมมติว่าตัวแปรปรากฏขึ้นสามครั้งในอินสแตนซ์ SAT เราสร้างคำต่อไปนี้:x2
42010014 32010103 42010104 32010113 4201011432010013 42010014 ,และ32010103 4201010432010113 42010114
ส่วนคำสั่ง
สำหรับแต่ละส่วนอุปกรณ์เราจะสร้างคำในแนวนอนใหม่สามคำแต่ละส่วนของคำจะมีความยาวช่อง (เฉพาะในกรณีที่เราอนุญาตให้ใช้คำที่ซ้ำกันในรายการคำ) นี่คือคำที่เราจะสร้างสำหรับแต่ละประโยค:6
535453 545353535354 ,และ535453545353
เรามีคำประโยคที่แตกต่างกันสำหรับวิธีที่เป็นไปได้ในการตอบสนองข้อที่เป็นสัญลักษณ์หมายถึงชุดตัวอักษรที่แท้จริงและสัญลักษณ์หมายถึงชุดที่แท้จริงเป็นเท็จ หมายเลขใช้เพื่อระบุว่าเป็นคำศัพท์3 5435
จะมีคำซ้ำในรายการคำเราสามารถกำจัดการทำซ้ำโดยใช้ขั้นตอนที่เราใช้เพื่อระบุคำที่ไม่ซ้ำกัน นั่นคือเราสร้างเชนไบนารี่ที่แตกต่างกันสำหรับแต่ละประโยคและเราผนวกแต่ละเชนเข้ากับคำในประโยคที่สัมพันธ์กับแต่ละประโยค จะทำอย่างไรที่เราจะสร้างดัชนีใหม่สำหรับข้อและเรารับจำนวนที่ใหญ่ที่สุดของดัชนีเราจะโทรไปยังหมายเลขนี้ม.เราแสดงเป็นห่วงโซ่ไบนารีและเราเรียกความยาวของห่วงโซ่ไบนารีนี้เป็น. ตอนนี้เราสร้างเลขฐานสองที่แตกต่างกันสำหรับแต่ละส่วนคำสั่งเริ่มต้นด้วยหมายเลข 1 และเราใส่ตัวเลขด้วย zeroes เพื่อสร้างห่วงโซ่ไบนารีที่มีความยาวm | m | | m |mm|m||m|. เราผนวกแต่ละสายโซ่ไบนารีกับคำประโยคที่อยู่ในส่วนคำสั่ง
ทีนี้มาดูรูปภาพของโปรแกรมเบ็ดเตล็ดประโยคในบอร์ด:
ตัวอย่างนี้แสดงถึงข้อและ 1 ใน 3 อินสแตนซ์ที่ลดลงคือ(x2∨x3∨x4)(x1∨x2∨x3)∧(x2∨x3∨x4)
อย่างที่เราเห็นมีสี่เหลี่ยมเขียน คอลัมน์แนวตั้งมีสัญลักษณ์ที่เป็นลายลักษณ์อักษรเพื่อระบุตัวอักษรที่อยู่ภายในส่วนคำสั่ง จุดสิ้นสุดและจุดเริ่มต้นของคอลัมน์เป็นช่องว่าง สิ่งนี้ช่วยให้ผู้เล่นเลือกค่าของตัวแปร สัญลักษณ์ที่ทำเครื่องหมายไว้ในแถวแนวนอนบังคับให้ผู้เล่นวางคำในแถวนั้น เนื่องจากคำประโยคทั้งหมดมีเพียงสัญลักษณ์เดียวซึ่งหมายความว่ามีเพียงหนึ่งตัวอักษรที่อยู่ในแกดเจ็ตประโยคสามารถตั้งค่าเป็น "จริง"4
หากเราไม่อนุญาตให้มีคำซ้ำภายในรายการคำเราจะต้องแก้ไขภาพ
แถวประโยคในรูปภาพจะกลายเป็น:และคอลัมน์ตัวอักษรจะเป็นจากซ้ายไปขวา:5b5b5b10
b201010b ,และb201110bb21001b
ที่สัญลักษณ์หมายถึงช่องว่างb
ดูตัวอย่าง:
แกดเจ็ตความสอดคล้องแปรผัน
นี่คือแกดเจ็ตที่ทำให้แน่ใจว่าผู้เล่นสามารถกำหนดค่าเดียวกันให้กับคอลัมน์ตัวอักษรทั้งหมดของตัวแปร
เราจะมีแกดเจ็ตใหม่สำหรับแต่ละตัวแปร
เราจะสร้างคำศัพท์ใหม่สองคำสำหรับแต่ละแกดเจ็ต
ความยาวของคำจะขึ้นอยู่กับจำนวนของการปรากฎของตัวแปร ความยาวของคำจะเป็นโดยที่คือจำนวนของการหารของตัวแปร ดังนั้นหากตัวแปรปรากฏสองครั้งในอินสแตนซ์ sat คำจะมีความยาวสี่ หนึ่งในสองคำนั้นเกิดขึ้นจากการทำซ้ำลูกโซ่คูณโดยที่ k คือจำนวนการเกิดขึ้นของตัวแปร คำอื่น ๆ ที่เกิดขึ้นจากการทำซ้ำลูกโซ่ครั้งโดยที่ k คือจำนวนการเกิดขึ้นของตัวแปรในอินสแตนซ์ SAT ที่ลดลง2∗kkx263 k64 k
ตัวอย่างเช่นหากตัวแปรมีสองรอบคำที่เป็นของแกดเจ็ตการกำหนดตัวแปรที่เกี่ยวข้องจะเป็น:x2
6363และ6464
หากเราต้องการหลีกเลี่ยงคำซ้ำ ๆ ให้สังเกตว่าแกดเจ็ตความสอดคล้องแต่ละรายการอยู่ในตัวแปรที่แตกต่างกัน ดังนั้นเราจึงสามารถผนวกไบนารี่เชนที่ระบุแต่ละตัวแปรให้กับคำสองคำที่เราสร้างขึ้นสำหรับแกดเจ็ตนี้
ทีนี้มาดูตัวอย่างรูปภาพของ gadget นี้:
แกดเจ็ตนี้สำหรับตัวแปรและอินสแตนซ์ 1 ใน 3 ของถูกลดลงเป็นx_4)x2(x1∨x2∨x3)∧(x2∨x3∨x4)
อย่างที่เราเห็นมีแถวแนวนอนสองแถวสัญลักษณ์ที่เขียนภายในแถวตรวจสอบให้แน่ใจว่าเราสามารถวางคำที่มีสัญลักษณ์เหล่านั้นเท่านั้นคำเหล่านั้นเป็นคำที่เราสร้างขึ้นสำหรับอุปกรณ์นี้ ในหนึ่งในแถวเราจะเห็นว่ามีสองคอลัมน์เข้ามาเพราะสัญลักษณ์ที่วางอยู่ในคอลัมน์ที่เราทำให้แน่ใจว่าเราสามารถวางคำตัวแปรเท่านั้น เนื่องจากคำเดียวที่เราสามารถวางบนแถวความสอดคล้องของตัวแปรมีเพียงสัญลักษณ์หรือเฉพาะสัญลักษณ์ในคำนั้นเท่านั้นเราจึงบังคับให้ผู้เล่นวางคำตัวแปรทั้งหมดที่มีสัญลักษณ์นั้นไว้ในแกดเจ็ต ซึ่งหมายความว่าเฉพาะตัวแปรคำที่มีอยู่ภายในโปรแกรมเบ็ดเตล็ดส่วนคำสั่งมีเพียงสัญลักษณ์หรือสัญลักษณ์เท่านั้น3434. เราสามารถวางคำที่เหลืออยู่ของ gagdet นี้ในแถวอื่น
หากเราไม่อนุญาตให้มีคำซ้ำในรายการคำคำในรูปภาพตัวอย่างจะเป็น:
สำหรับแถว:
6b6b010และ6b6b010
สำหรับคอลัมน์:
b201001bและb201010b
ที่สัญลักษณ์หมายถึงช่องว่างb
ดูตัวอย่าง:
Clause dump gadget
นี่คืออุปกรณ์ที่สร้างขึ้นเพื่อวางคำประโยคที่ไม่ได้ใช้ ในการทำเช่นนั้นเราต้องวางสองแถวสำหรับแต่ละคำในส่วนที่ว่างของกระดาน แถวเหล่านี้ไม่ได้เชื่อมต่อกับแถวหรือคอลัมน์อื่น
ด้วยวิธีนี้เราจะทำการลดระดับเสร็จตามที่เราอ้างว่าเราต้องการเพียง 6 สัญลักษณ์สำหรับการลดลง
ตัวอย่าง
หากคำอธิบายก่อนหน้านี้เกิดความสับสนนี่คือภาพตัวอย่างของตัวอย่างของค่าบวก 1 ใน 3 SAT ที่ลดลงสำหรับปัญหาคำนี้:
หากเราไม่อนุญาตให้พูดคำซ้ำ:
ตัวอย่างที่ได้รับการลดลงคือ:
(x1∨x2∨x3)∧(x2∨x3∨x4)