เกมตัวต่อปริศนาคลาสสิกเล่มนี้สมบูรณ์หรือไม่


10

มีเกมหนังสือไขปริศนาคลาสสิกคล้ายกับตัวต่อปริศนาคำไขว้ยกเว้นรายการคำที่ให้ไว้และจากนั้นจะมีกระดานสี่เหลี่ยมสร้างขึ้นจากหน่วยสี่เหลี่ยมจัตุรัสโดยมีสี่เหลี่ยมบางส่วนมีลักษณะคล้ายกับคำไขว้ และสี่เหลี่ยมบางอันมีจดหมายที่เขียนไว้ล่วงหน้าแล้ว เป้าหมายคือการเขียนแต่ละคำจากรายการเพียงครั้งเดียวและครั้งเดียวในปริศนาที่แต่ละคำจะถูกเขียนในแนวนอน (ซ้ายไปขวา) หรือแนวตั้ง (บนลงล่าง) ลงในช่องสี่เหลี่ยมต่อเนื่องที่ไม่ใช่ blacked และเมื่อคุณเขียนคำ สองช่องสี่เหลี่ยมขนาบข้างปลายของคำจะต้อง blacked out หรือนอกกระดาน นอกจากนี้สำหรับตัวอักษรที่เขียนไว้ล่วงหน้าในสี่เหลี่ยมบางคำที่เขียนที่ทับซ้อนกันสี่เหลี่ยมเหล่านี้จะต้องเคารพตัวอักษรที่เขียนล่วงหน้าN×N

ตอนนี้ถ้าเราคิดว่าตัวอักษรขนาดคงที่สำหรับคำว่ากำลังตัดสินใจว่าเราสามารถเติมคำตอบที่ถูกต้องโดยใช้คำแต่ละคำในรายการเพียงครั้งเดียวและครั้งเดียวเมื่อเกิดปัญหา NP-Complete ถ้าความยาวด้านของกระดานเป็น ไม่ได้แก้ไข?

คำตอบ:


6

ขออภัยที่ตอบโพสต์เก่า

ฉันเคยคิดเกี่ยวกับมันและฉันคิดว่าปัญหาเกี่ยวกับตัวอักษรคงที่เป็นปัญหาที่สมบูรณ์เช่นกัน

ฉันจะลด 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 อินสแตนซ์ที่ลดลงคือ(x2x3x4)(x1x2x3)(x2x3x4)

อย่างที่เราเห็นมีสี่เหลี่ยมเขียน คอลัมน์แนวตั้งมีสัญลักษณ์ที่เป็นลายลักษณ์อักษรเพื่อระบุตัวอักษรที่อยู่ภายในส่วนคำสั่ง จุดสิ้นสุดและจุดเริ่มต้นของคอลัมน์เป็นช่องว่าง สิ่งนี้ช่วยให้ผู้เล่นเลือกค่าของตัวแปร สัญลักษณ์ที่ทำเครื่องหมายไว้ในแถวแนวนอนบังคับให้ผู้เล่นวางคำในแถวนั้น เนื่องจากคำประโยคทั้งหมดมีเพียงสัญลักษณ์เดียวซึ่งหมายความว่ามีเพียงหนึ่งตัวอักษรที่อยู่ในแกดเจ็ตประโยคสามารถตั้งค่าเป็น "จริง"4

หากเราไม่อนุญาตให้มีคำซ้ำภายในรายการคำเราจะต้องแก้ไขภาพ

แถวประโยคในรูปภาพจะกลายเป็น:และคอลัมน์ตัวอักษรจะเป็นจากซ้ายไปขวา:5b5b5b10

b201010b ,และb201110bb21001b

ที่สัญลักษณ์หมายถึงช่องว่างb

ดูตัวอย่าง:

ประโยคไม่ซ้ำ

แกดเจ็ตความสอดคล้องแปรผัน

นี่คือแกดเจ็ตที่ทำให้แน่ใจว่าผู้เล่นสามารถกำหนดค่าเดียวกันให้กับคอลัมน์ตัวอักษรทั้งหมดของตัวแปร

เราจะมีแกดเจ็ตใหม่สำหรับแต่ละตัวแปร

เราจะสร้างคำศัพท์ใหม่สองคำสำหรับแต่ละแกดเจ็ต

ความยาวของคำจะขึ้นอยู่กับจำนวนของการปรากฎของตัวแปร ความยาวของคำจะเป็นโดยที่คือจำนวนของการหารของตัวแปร ดังนั้นหากตัวแปรปรากฏสองครั้งในอินสแตนซ์ sat คำจะมีความยาวสี่ หนึ่งในสองคำนั้นเกิดขึ้นจากการทำซ้ำลูกโซ่คูณโดยที่ k คือจำนวนการเกิดขึ้นของตัวแปร คำอื่น ๆ ที่เกิดขึ้นจากการทำซ้ำลูกโซ่ครั้งโดยที่ k คือจำนวนการเกิดขึ้นของตัวแปรในอินสแตนซ์ SAT ที่ลดลง2kkx263 k64 k

ตัวอย่างเช่นหากตัวแปรมีสองรอบคำที่เป็นของแกดเจ็ตการกำหนดตัวแปรที่เกี่ยวข้องจะเป็น:x2

6363และ6464

หากเราต้องการหลีกเลี่ยงคำซ้ำ ๆ ให้สังเกตว่าแกดเจ็ตความสอดคล้องแต่ละรายการอยู่ในตัวแปรที่แตกต่างกัน ดังนั้นเราจึงสามารถผนวกไบนารี่เชนที่ระบุแต่ละตัวแปรให้กับคำสองคำที่เราสร้างขึ้นสำหรับแกดเจ็ตนี้

ทีนี้มาดูตัวอย่างรูปภาพของ gadget นี้:

แกดเจ็ตความสอดคล้องแปรผัน

แกดเจ็ตนี้สำหรับตัวแปรและอินสแตนซ์ 1 ใน 3 ของถูกลดลงเป็นx_4)x2(x1x2x3)(x2x3x4)

อย่างที่เราเห็นมีแถวแนวนอนสองแถวสัญลักษณ์ที่เขียนภายในแถวตรวจสอบให้แน่ใจว่าเราสามารถวางคำที่มีสัญลักษณ์เหล่านั้นเท่านั้นคำเหล่านั้นเป็นคำที่เราสร้างขึ้นสำหรับอุปกรณ์นี้ ในหนึ่งในแถวเราจะเห็นว่ามีสองคอลัมน์เข้ามาเพราะสัญลักษณ์ที่วางอยู่ในคอลัมน์ที่เราทำให้แน่ใจว่าเราสามารถวางคำตัวแปรเท่านั้น เนื่องจากคำเดียวที่เราสามารถวางบนแถวความสอดคล้องของตัวแปรมีเพียงสัญลักษณ์หรือเฉพาะสัญลักษณ์ในคำนั้นเท่านั้นเราจึงบังคับให้ผู้เล่นวางคำตัวแปรทั้งหมดที่มีสัญลักษณ์นั้นไว้ในแกดเจ็ต ซึ่งหมายความว่าเฉพาะตัวแปรคำที่มีอยู่ภายในโปรแกรมเบ็ดเตล็ดส่วนคำสั่งมีเพียงสัญลักษณ์หรือสัญลักษณ์เท่านั้น3434. เราสามารถวางคำที่เหลืออยู่ของ gagdet นี้ในแถวอื่น

หากเราไม่อนุญาตให้มีคำซ้ำในรายการคำคำในรูปภาพตัวอย่างจะเป็น:

สำหรับแถว:

6b6b010และ6b6b010

สำหรับคอลัมน์:

b201001bและb201010b

ที่สัญลักษณ์หมายถึงช่องว่างb

ดูตัวอย่าง:

แกดเจ็ตความสอดคล้องไม่ซ้ำกัน

Clause dump gadget

นี่คืออุปกรณ์ที่สร้างขึ้นเพื่อวางคำประโยคที่ไม่ได้ใช้ ในการทำเช่นนั้นเราต้องวางสองแถวสำหรับแต่ละคำในส่วนที่ว่างของกระดาน แถวเหล่านี้ไม่ได้เชื่อมต่อกับแถวหรือคอลัมน์อื่น

ด้วยวิธีนี้เราจะทำการลดระดับเสร็จตามที่เราอ้างว่าเราต้องการเพียง 6 สัญลักษณ์สำหรับการลดลง

ตัวอย่าง

หากคำอธิบายก่อนหน้านี้เกิดความสับสนนี่คือภาพตัวอย่างของตัวอย่างของค่าบวก 1 ใน 3 SAT ที่ลดลงสำหรับปัญหาคำนี้:

บอร์ดตัวอย่าง

หากเราไม่อนุญาตให้พูดคำซ้ำ:

บอร์ดตัวอย่างไม่มีการทำซ้ำ

ตัวอย่างที่ได้รับการลดลงคือ:

(x1x2x3)(x2x3x4)


ขอขอบคุณสำหรับการโพสต์นี้! คุณลักษณะที่โชคร้ายของการแลกเปลี่ยนแบบสแต็คคือการที่ใครก็ตามที่อ่านคำตอบยาว ๆ ไม่น่าจะเป็นไปได้ดังนั้นคุณจึงไม่น่าจะได้รับคะแนนโหวตมากมายจากงานที่คุณทำที่นี่ ฉันจะพยายามอ่านสิ่งนี้ แต่ถ้าฉันซื่อสัตย์มีโอกาสดีที่ฉันจะไม่ไปไหน
David Richerby

2
@DavidRicherby jaja ใช่ ฉันกำลังคิดคำถามนี้อยู่พักหนึ่ง ฉันคิดว่าเมื่อฉันโพสต์คำตอบนี้ทุกคนจะไปและโหวตขึ้น ไม่เกิดขึ้น ดีไม่เป็นไร. หากคุณมีคำถามเกี่ยวกับการลดลงคุณสามารถถามฉันได้
rotia

4

ฉันคิดว่าการลดลงจากเส้นทางเส้นทางมิลโตเนียนกำกับ:

รับกราฟและสองจุดยอดเราส่งออกปริศนาต่อไปนี้:s , t VG=(V,E)s,tV

ตัวอักษรเป็นกับเป็นสัญลักษณ์บางอย่างไม่ได้อยู่ในVVV{}V

คำที่มีทุกและทุกขอบEv V v u ( u , v ) EvvvVvu(u,v)E

กระดานประกอบด้วยสองส่วน ลักษณะแรกแนวนอน "บันได" ความยาว 3 ซ้อนกันอยู่ด้านบนดังที่ปรากฎที่นี่:|V|

บันได

ส่วนที่สองประกอบด้วย disjoint ช่องว่างความยาว 2|E|(|V|1)

นอกจากนี้เราตั้งในครั้งแรก (ล่าง) ขั้นตอนของบันไดคำว่า (และลบออกจากรายการคำ) และในขั้นตอนสุดท้ายที่เราใส่ tT * Tsstt

ตอนนี้เพื่อเติมบันไดมีเพียงจุดสุดยอดคำเท่านั้นที่สามารถใส่ในขั้นตอนและเพื่อเชื่อมต่อสองจุดยอดคำขอบจะต้องอยู่ระหว่างพวกเขาซึ่งสอดคล้องกับขอบที่มีอยู่ในกราฟ ขอบที่ไม่ได้ใช้สามารถใส่ในส่วนที่สองของบอร์ด ทิศทางที่สองเป็นเรื่องเล็กน้อย

ฉันคิดว่างานนี้ (หลักฐานความถูกต้องที่ฉันร่างเป็นมือโบกมือที่ดีที่สุด แต่ก็ยัง)


1
ดี โปรดทราบว่ามันเพียงพอที่จะเขียนและล่วงหน้าในช่องว่างด้านนอกสุดของบันได (ไม่จำเป็นต้องลบออกจากรายการคำ) และเพื่อความสมบูรณ์มันอาจจะคุ้มค่าที่จะกล่าวถึงว่ากริดสามารถสร้างโดยเลือกมีขนาดใหญ่เพียงพอและเติมด้วยสี่เหลี่ยมที่มีสีดำ t N × N NstN×NN
FrankW

นี่เป็นสิ่งที่ดีและดูเหมือนว่าจะใช้งานได้ แต่ขนาดตัวอักษรไม่คงที่เหมือนที่ฉันต้องการโพสต์ดั้งเดิม มีการดัดแปลงที่สามารถใช้ตัวอักษรขนาดคงที่และยังคงลดขนาดนี้ได้หรือไม่?
user2566092

@ user2566092 - จุดดี ฉันจะพยายามคิด บางทีแกดเจ็ตที่สามารถเติมเต็มด้วยการเป็นตัวแทนของขอบสามารถใช้แทนคำพูดแล้วทุกอย่างสามารถเข้ารหัสในรูปแบบไบนารี uv
Shaull
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.