ฉันคิดว่าบทความ Wikipedia
,และ vs.ค่อนข้างดี ยังอยู่ที่นี่คือสิ่งที่ผมจะบอกว่า: Part I , Part IIPN PPN P
[ฉันจะใช้คำพูดในวงเล็บเพื่อพูดคุยรายละเอียดทางเทคนิคบางอย่างที่คุณสามารถข้ามได้หากคุณต้องการ]
ส่วนที่ 1
ปัญหาการตัดสินใจ
ปัญหาการคำนวณมีหลายประเภท อย่างไรก็ตามในเบื้องต้นเกี่ยวกับหลักสูตรทฤษฎีความซับซ้อนในการคำนวณมันง่ายกว่าที่จะมุ่งเน้นไปที่ปัญหาการตัดสินใจเช่นปัญหาที่คำตอบคือใช่หรือไม่ มีปัญหาการคำนวณประเภทอื่น ๆ แต่คำถามเวลาส่วนใหญ่สามารถลดลงเป็นคำถามที่คล้ายกันเกี่ยวกับปัญหาการตัดสินใจ นอกจากนี้ปัญหาการตัดสินใจง่ายมาก ดังนั้นในเบื้องต้นเกี่ยวกับหลักสูตรทฤษฎีความซับซ้อนในการคำนวณเราจึงมุ่งเน้นความสนใจไปที่การศึกษาปัญหาการตัดสินใจ
เราสามารถระบุปัญหาการตัดสินใจกับชุดย่อยของอินพุตที่มีคำตอบใช่ นี้ง่ายสัญกรณ์และช่วยให้เราสามารถเขียน
ในสถานที่ของและ
ในสถานที่ของQx ∈ QQ ( x ) = YESx ∉ QQ ( x ) = NO
อีกมุมมองหนึ่งคือเรากำลังพูดถึงการสืบค้นความเป็นสมาชิกในชุด นี่คือตัวอย่าง:
ปัญหาการตัดสินใจ:
อินพุต: ตัวเลขธรรมชาติ ,
คำถาม:เป็นเลขคู่หรือไม่xx
x
ปัญหาการเป็นสมาชิก:
อินพุต: ตัวเลขธรรมชาติ ,
คำถาม:ในหรือไม่xx E v e n = { 0 , 2 , 4 , 6 , ⋯ }
xEv e n = { 0 , 2 , 4 , 6 , ⋯ }
เราอ้างถึงคำตอบที่ YES เกี่ยวกับอินพุตเป็นการยอมรับอินพุตและคำตอบที่ไม่เกี่ยวกับอินพุตเป็นการปฏิเสธอินพุต
เราจะดูอัลกอริทึมสำหรับปัญหาการตัดสินใจและอภิปรายว่าอัลกอริทึมเหล่านั้นมีประสิทธิภาพอย่างไรในการใช้งานทรัพยากรที่คำนวณได้ ฉันจะพึ่งพาสัญชาตญาณของคุณจากการเขียนโปรแกรมในภาษาอย่าง C แทนการกำหนดสิ่งที่เราหมายถึงโดยอัลกอริทึมและทรัพยากรการคำนวณ
[หมายเหตุ: 1. ถ้าเราต้องการทำทุกอย่างเป็นทางการและแม่นยำเราจะต้องแก้ไขรูปแบบการคำนวณเช่นโมเดลทัวริงของเครื่องมาตรฐานเพื่อกำหนดสิ่งที่เราหมายถึงอย่างแม่นยำโดยอัลกอริทึมและการใช้ทรัพยากรการคำนวณ 2. หากเราต้องการพูดคุยเกี่ยวกับการคำนวณเหนือวัตถุที่โมเดลไม่สามารถจัดการได้โดยตรงเราจะต้องเข้ารหัสเป็นวัตถุที่โมเดลเครื่องจักรสามารถจัดการได้เช่นถ้าเราใช้เครื่องทัวริงที่เราต้องการเข้ารหัสวัตถุเช่นตัวเลขธรรมชาติและกราฟ เป็นสตริงไบนารี]
P = ปัญหาเกี่ยวกับอัลกอริทึมที่มีประสิทธิภาพสำหรับการค้นหาวิธีแก้ไข
สมมติว่าอัลกอริธึมที่มีประสิทธิภาพหมายถึงอัลกอริธึมที่ใช้ทรัพยากรการคำนวณจำนวนมากในพหุนาม ทรัพยากรหลักที่เราดูแลเกี่ยวกับการเป็นกรณีเลวร้ายที่สุดเวลาการทำงานของอัลกอริทึมที่เกี่ยวกับขนาดการป้อนข้อมูลเช่นจำนวนของขั้นตอนพื้นฐานขั้นตอนจะใช้เวลาในการป้อนข้อมูลของขนาดnขนาดของอินพุตคือหากใช้หน่วยความจำคอมพิวเตอร์ -bits เพื่อเก็บซึ่งในกรณีนี้เราเขียนnดังนั้นโดยกลไกที่มีประสิทธิภาพที่เราหมายถึงขั้นตอนวิธีการที่มีพหุนามเลวร้ายที่สุดกรณีเวลาทำงานnxnnx| x | =n
สมมติฐานว่าอัลกอริทึมพหุนามเวลาจับความคิดที่ใช้งานง่ายของกลไกที่มีประสิทธิภาพเป็นที่รู้จักกันเป็นวิทยานิพนธ์ของคอบ ฉันจะไม่พูดคุย ณ จุดนี้ว่าเป็นแบบจำลองที่ถูกต้องสำหรับปัญหาที่แก้ไขได้อย่างมีประสิทธิภาพหรือไม่และทำหรือไม่จับภาพสิ่งที่สามารถคำนวณได้อย่างมีประสิทธิภาพในทางปฏิบัติและประเด็นที่เกี่ยวข้อง สำหรับตอนนี้มีเหตุผลที่ดีที่จะตั้งสมมติฐานนี้ดังนั้นเพื่อจุดประสงค์ของเราเราถือว่าเป็นกรณีนี้ หากคุณไม่ยอมรับวิทยานิพนธ์ของ Cobham มันไม่ได้ทำให้สิ่งที่ฉันเขียนด้านล่างไม่ถูกต้องสิ่งเดียวที่เราจะแพ้ก็คือสัญชาตญาณPPเกี่ยวกับการคำนวณที่มีประสิทธิภาพในทางปฏิบัติ ฉันคิดว่ามันเป็นข้อสันนิษฐานที่เป็นประโยชน์สำหรับคนที่เริ่มเรียนรู้เกี่ยวกับทฤษฎีความซับซ้อน
Pเป็นชั้นของการตัดสินใจแก้ปัญหาที่สามารถแก้ไขได้อย่างมีประสิทธิภาพ ,
เช่นปัญหาการตัดสินใจที่มีขั้นตอนวิธีการพหุนามเวลา
อย่างเป็นทางการมากขึ้นเราพูดว่าปัญหาการตัดสินใจอยู่ใน iffQP
มีขั้นตอนวิธีที่มีประสิทธิภาพดังกล่าวว่า
สำหรับทุกปัจจัย ,Ax
x
- ถ้าแล้ว , Q ( x ) = YESA ( x ) = YES
- ถ้าแล้วAQ(x)=NOA(x)=NO
ฉันก็สามารถเขียนแต่ที่ผมเขียนมันด้วยวิธีนี้เพื่อให้เราสามารถเปรียบเทียบกับความหมายของ{}A(x)=Q(x)NP
NP = ปัญหาเกี่ยวกับอัลกอริธึมที่มีประสิทธิภาพสำหรับการตรวจสอบหลักฐาน / ใบรับรอง / พยาน
บางครั้งเราไม่ทราบวิธีที่มีประสิทธิภาพในการค้นหาคำตอบของปัญหาการตัดสินใจอย่างไรก็ตามถ้ามีคนบอกเราคำตอบและให้หลักฐาน
เราเราสามารถตรวจสอบได้อย่างมีประสิทธิภาพว่าคำตอบนั้นถูกต้องโดยการตรวจสอบหลักฐานเพื่อดูว่ามันเป็นหลักฐานที่ถูกต้อง . นี่คือแนวคิดเบื้องหลังคลาสซับซ้อนNP
หากการพิสูจน์นั้นยาวเกินไปมันไม่มีประโยชน์จริง ๆ มันอาจใช้เวลานานเกินไปที่จะอ่านการพิสูจน์ให้ตรวจสอบเพียงอย่างเดียวหากมันถูกต้อง เราต้องการเวลาที่จะให้การตรวจสอบมีความเหมาะสมในขนาดของอินพุตต้นฉบับไม่ใช่ขนาดของการพิสูจน์ที่ให้! นี่หมายถึงสิ่งที่เราต้องการไม่ใช่การพิสูจน์ความยาวโดยพลการ แต่การพิสูจน์สั้น ๆ โปรดทราบว่าหากเวลาการทำงานของ verifier เป็นพหุนามในขนาดของอินพุตดั้งเดิมจากนั้นมันสามารถอ่านได้เพียงส่วนพหุนามของการพิสูจน์ ดังนั้นโดยในระยะสั้นเราหมายถึงขนาดของพหุนาม
แบบฟอร์มจุดนี้เมื่อใดก็ตามที่ฉันใช้คำว่า "พิสูจน์" ฉันหมายถึง "พิสูจน์สั้น"
นี่คือตัวอย่างของปัญหาที่เราไม่ทราบวิธีแก้ปัญหาอย่างมีประสิทธิภาพ แต่เราสามารถตรวจสอบหลักฐานได้อย่างมีประสิทธิภาพ:
Partition
Input:ชุดที่ จำกัด ของตัวเลขธรรมชาติS ,
คำถาม:เป็นไปได้หรือไม่ที่จะแบ่งพาร์ติชันSออกเป็นสองชุดAและB
( A∪B=SและA∩B=∅ )
ซึ่งผลรวมของตัวเลขในAเท่ากับ ผลรวมของตัวเลขในB ( ∑x∈Ax=∑x∈Bx )?
ถ้าฉันให้Sและถามคุณว่าเราสามารถแบ่งมันออกเป็นสองชุดเพื่อให้ผลรวมของพวกเขาเท่ากันคุณไม่ทราบว่าอัลกอริทึมที่มีประสิทธิภาพในการแก้ปัญหานั้นหรือไม่ คุณอาจจะลองวิธีที่เป็นไปได้ทั้งหมดของการแบ่งตัวเลขออกเป็นสองชุดจนกว่าคุณจะพบพาร์ติชันที่ผลรวมเท่ากันหรือจนกว่าคุณจะลองพาร์ติชันที่เป็นไปได้ทั้งหมดและไม่มีใครทำงานได้ หากหนึ่งในนั้นทำงานได้คุณจะบอกว่าใช่มิฉะนั้นคุณจะตอบว่าไม่
แต่มีหลายพาร์ติชั่นที่เป็นไปได้ชี้แจงแทนมันจะใช้เวลามาก แต่ถ้าฉันให้คุณสองชุดและBคุณสามารถตรวจสอบว่าจำนวนเงินที่เท่ากันและถ้าและBเป็นพาร์ทิชันของS โปรดทราบว่าเราสามารถคำนวณผลรวมได้อย่างมีประสิทธิภาพABABS
ที่นี่คู่ของAและBที่ฉันให้คุณเป็นหลักฐานสำหรับคำตอบที่ใช่ คุณมีประสิทธิภาพสามารถตรวจสอบการเรียกร้องของฉันโดยดูที่หลักฐานของฉันและการตรวจสอบถ้ามันเป็นหลักฐานที่ถูกต้อง หากคำตอบคือใช่ก็มีหลักฐานที่ถูกต้องและฉันสามารถมอบให้คุณและคุณสามารถตรวจสอบได้อย่างมีประสิทธิภาพ หากคำตอบคือไม่แสดงว่าไม่มีหลักฐานที่ถูกต้อง ดังนั้นสิ่งที่ฉันให้คุณสามารถตรวจสอบและดูว่ามันไม่ได้เป็นหลักฐานที่ถูกต้อง ฉันไม่สามารถหลอกลวงคุณด้วยหลักฐานที่ไม่ถูกต้องว่าคำตอบคือใช่ โปรดจำไว้ว่าถ้าการพิสูจน์มีขนาดใหญ่เกินไปจะใช้เวลาในการตรวจสอบเราไม่ต้องการให้เกิดขึ้นดังนั้นเราจึงสนใจเฉพาะการพิสูจน์ที่มีประสิทธิภาพเช่นการพิสูจน์ที่มีขนาดพหุนาม
บางครั้งผู้คนใช้ " ใบรับรอง " หรือ " พยาน " แทน "หลักฐาน"
หมายเหตุฉันให้ข้อมูลที่เพียงพอเกี่ยวกับคำตอบสำหรับอินพุตxกำหนด
เพื่อให้คุณสามารถค้นหาและตรวจสอบคำตอบได้อย่างมีประสิทธิภาพ ตัวอย่างเช่นในตัวอย่างพาร์ทิชันของเราฉันไม่ได้บอกคุณคำตอบฉันเพียงแค่ให้พาร์ทิชันและคุณสามารถตรวจสอบว่ามันถูกต้องหรือไม่ โปรดทราบว่าคุณต้องยืนยันคำตอบด้วยตัวคุณเองคุณไม่สามารถเชื่อใจฉันเกี่ยวกับสิ่งที่ฉันพูดได้ ยิ่งกว่านั้นคุณสามารถตรวจสอบความถูกต้องของหลักฐานของฉันเท่านั้น หากหลักฐานของฉันถูกต้องก็หมายความว่าคำตอบคือใช่ แต่ถ้าหลักฐานของฉันไม่ถูกต้องก็ไม่ได้หมายความว่าคำตอบคือไม่ คุณได้เห็นว่าการพิสูจน์ข้อหนึ่งนั้นไม่ถูกต้องไม่ใช่การพิสูจน์ที่ไม่ถูกต้อง เรากำลังพูดถึงบทพิสูจน์สำหรับ YES เราไม่ได้พูดถึงบทพิสูจน์สำหรับหมายเลข
ให้เราดูตัวอย่าง:
A={2,4}และB={1,5}เป็นข้อพิสูจน์ว่า
S={1,2,4,5}สามารถแบ่งพาร์ติชันเป็นสองชุดด้วยผลรวมเท่ากัน เราแค่ต้องสรุปตัวเลขในAและตัวเลขในBและดูว่าผลลัพธ์เท่ากันและตรวจสอบว่าA , Bเป็นพาร์ติชันของSหรือไม่
หากฉันให้A={2,5}และB={1,4}คุณจะตรวจสอบและดูว่าหลักฐานของฉันไม่ถูกต้อง มันไม่ได้หมายความว่าคำตอบคือไม่มันก็หมายความว่าการพิสูจน์เฉพาะนี้ไม่ถูกต้อง งานของคุณที่นี่ไม่ใช่เพื่อค้นหาคำตอบ แต่เพื่อตรวจสอบว่าหลักฐานที่คุณได้รับนั้นถูกต้องหรือไม่
มันเป็นเหมือนนักเรียนที่กำลังแก้ปัญหาในการสอบและอาจารย์ตรวจสอบว่าคำตอบนั้นถูกต้องหรือไม่ :) (น่าเสียดายที่นักเรียนมักไม่ได้ให้ข้อมูลมากพอที่จะยืนยันความถูกต้องของคำตอบและอาจารย์ต้องเดาคำตอบบางส่วนที่เหลือและตัดสินใจว่าควรให้คะแนนเท่าไรกับคำตอบของนักเรียน งาน).
สิ่งที่น่าทึ่งก็คือว่าสถานการณ์เดียวกันนำไปใช้กับปัญหาหลายธรรมชาติอื่น ๆ ที่เราต้องการที่จะแก้ปัญหา:
เรามีประสิทธิภาพสามารถตรวจสอบหากได้รับหลักฐานสั้นถูกต้อง แต่เราไม่ทราบวิธีที่มีประสิทธิภาพใด ๆ ของการหาคำตอบ นี่คือแรงจูงใจที่ทำให้คลาสความซับซ้อนNPนั้นน่าสนใจมาก
(แม้ว่านี่จะไม่ใช่แรงจูงใจดั้งเดิมสำหรับการนิยาม) ไม่ว่าคุณจะทำอะไร (ไม่ใช่แค่ใน CS แต่รวมถึงในวิชาคณิตศาสตร์ชีววิทยาฟิสิกส์เคมีเศรษฐศาสตร์การจัดการสังคมวิทยาธุรกิจ ... ) คุณจะเผชิญกับปัญหาการคำนวณที่อยู่ในชั้นเรียนนี้ หากต้องการทราบว่ามีปัญหามากมายที่จะเกิดขึ้นในNPลองดู
บทสรุปของปัญหาการเพิ่มประสิทธิภาพ NP อันที่จริงคุณจะมีเวลาที่ยากหาปัญหาธรรมชาติที่ไม่ได้อยู่ในNP P มันวิเศษมาก
NPคือคลาสของปัญหาที่มีตัวตรวจสอบที่มีประสิทธิภาพกล่าวคือ
มีอัลกอริธึมเวลาพหุนามที่สามารถตรวจสอบว่าคำตอบที่ให้นั้นถูกต้องหรือไม่
อย่างเป็นทางการมากขึ้นเราบอกว่าปัญหาการตัดสินใจQอยู่ในNP iff
มีขั้นตอนวิธีที่มีประสิทธิภาพVเรียกตรวจสอบดังกล่าวว่า
สำหรับทุกปัจจัยx ,
- ถ้าQ(x)=YESดังนั้นจึงมีหลักฐานyเช่นนั้นV(x,y)=YES ,
- ถ้าQ(x)=NOแล้วสำหรับการพิสูจน์ทุกy , V(x,y)=NO O
เราบอกว่าตัวตรวจสอบเสียง
นั้นหากไม่ยอมรับหลักฐานใด ๆ เมื่อคำตอบคือไม่ กล่าวอีกนัยหนึ่งไม่สามารถหลอกผู้ตรวจสอบเสียงให้ยอมรับหลักฐานได้หากคำตอบนั้นไม่ใช่ ไม่มีผลบวกปลอม
ในทำนองเดียวกันเราพูดว่าผู้ตรวจสอบเสร็จสมบูรณ์
หากยอมรับหลักฐานอย่างน้อยหนึ่งข้อเมื่อคำตอบคือใช่ กล่าวอีกนัยหนึ่งผู้ตรวจสอบที่สมบูรณ์สามารถมั่นใจได้ว่าคำตอบคือใช่
คำศัพท์ที่มาจากเหตุผลและหลักฐานระบบ เราไม่สามารถใช้ระบบกันเสียงเพื่อพิสูจน์ข้อความเท็จใด ๆ เราสามารถใช้ระบบพิสูจน์สมบูรณ์เพื่อพิสูจน์งบจริงทั้งหมด
ตัวตรวจสอบVได้รับสองอินพุต
- x : อินพุตต้นฉบับสำหรับQและ
- y : หลักฐานที่แนะนำสำหรับการQ(x)=YES S
โปรดทราบว่าเราต้องการVจะมีประสิทธิภาพในขนาดของxxถ้าyเป็นหลักฐานตรวจสอบขนาดใหญ่จะสามารถที่จะอ่านเพียงส่วนพหุนามของปีyนั่นคือเหตุผลที่เราจำเป็นต้องพิสูจน์ให้สั้น ถ้าyพูดสั้น ๆ ว่าVมีประสิทธิภาพในx
ก็เท่ากับว่าVนั้นมีประสิทธิภาพในxและy
(เพราะขนาดของyถูกล้อมด้วยพหุนามคงที่ในขนาดของx )
ในการสรุปที่จะแสดงให้เห็นว่าปัญหาการตัดสินใจQอยู่ในNP
เราจะต้องให้มีประสิทธิภาพขั้นตอนวิธีการตรวจสอบซึ่งเป็นเสียงและสมบูรณ์
ประวัติศาสตร์หมายเหตุ: ในอดีตนี้ไม่ได้เป็นความหมายเดิมของNP P คำจำกัดความดั้งเดิมใช้สิ่งที่เรียกว่าเครื่องทัวริงที่ไม่ได้กำหนดค่า เครื่องเหล่านี้ไม่ตรงกับโมเดลเครื่องจริงและยากที่จะคุ้นเคย (อย่างน้อยเมื่อคุณเริ่มเรียนรู้เกี่ยวกับทฤษฎีความซับซ้อน) ฉันได้อ่านว่าผู้เชี่ยวชาญหลายคนคิดว่าพวกเขาจะใช้คำจำกัดความของตัวตรวจสอบความหมายเป็นคำจำกัดความหลักและแม้กระทั่งจะตั้งชื่อ class VP
(สำหรับตรวจสอบได้ในพหุนามเวลา) แทนNP
ถ้าพวกเขากลับไปยังจุดเริ่มต้นของทฤษฎีความซับซ้อนในการคำนวณ คำนิยามที่ตรวจสอบเป็นธรรมชาติมากขึ้น, ง่ายต่อการเข้าใจแนวคิดและง่ายต่อการใช้ในการแสดงปัญหาอยู่ในNP P
P⊆NP
ดังนั้นเราจึงมี
P = มีประสิทธิภาพแก้ปัญหาได้และNP = มีประสิทธิภาพตรวจสอบได้ ดังนั้นP=NPปัญหาที่สามารถตรวจสอบได้อย่างมีประสิทธิภาพจะเหมือนกับปัญหาที่สามารถแก้ไขได้อย่างมีประสิทธิภาพ
โปรดทราบว่าปัญหาใด ๆ ในPยังอยู่ในNPเช่นถ้าคุณสามารถแก้ปัญหาได้คุณสามารถตรวจสอบได้ว่าหลักฐานที่ให้นั้นถูกต้องหรือไม่: ผู้ตรวจสอบจะเพิกเฉยต่อข้อพิสูจน์!
นั่นเป็นเพราะเราไม่ต้องการมันผู้ตรวจสอบสามารถคำนวณคำตอบได้ด้วยตัวเองมันสามารถตัดสินใจได้ว่าคำตอบคือใช่หรือไม่โดยปราศจากความช่วยเหลือใด ๆ หากคำตอบคือไม่เรารู้ว่าไม่ควรมีหลักฐานและผู้ตรวจสอบของเราจะปฏิเสธทุกหลักฐานที่แนะนำ หากคำตอบคือใช่ควรมีหลักฐานและในความเป็นจริงเราจะยอมรับทุกอย่างเป็นหลักฐาน
[เราอาจทำให้ผู้ตรวจสอบของเรายอมรับได้เพียงบางคนเท่านั้นนั่นก็ใช้ได้ตราบใดที่ผู้ตรวจสอบของเรายอมรับอย่างน้อยหนึ่งข้อพิสูจน์ว่าผู้ตรวจสอบใช้งานได้อย่างถูกต้องสำหรับปัญหา]
นี่คือตัวอย่าง:
ผลรวม
การป้อนข้อมูล:รายการn+1หมายเลขธรรมชาติ1 , ⋯ , nและs , คำถาม:คือΣ n ฉัน= 1ฉัน = s ?a1,⋯,ans
Σni=1ai=s
ปัญหาอยู่ที่Pเพราะเราสามารถหาผลรวมของตัวเลขแล้วเปรียบเทียบกับsเราจะคืนค่า YES ถ้าพวกเขาเท่ากันและไม่ใช่ถ้าพวกเขาไม่
ปัญหาคือยังอยู่ในNP P พิจารณา verifier Vที่ได้รับการพิสูจน์พร้อมอินพุตสำหรับ Sum มันทำหน้าที่เช่นเดียวกับอัลกอริทึมในPที่เราอธิบายไว้ข้างต้น นี่คือเครื่องมือตรวจสอบที่มีประสิทธิภาพสำหรับ Sum
โปรดทราบว่ามีตัวตรวจสอบประสิทธิภาพอื่น ๆ สำหรับ Sum และบางส่วนอาจใช้หลักฐานที่ให้ไว้ อย่างไรก็ตามสิ่งที่เราออกแบบไม่ได้เป็นสิ่งที่ดี เนื่องจากเราให้ตรวจสอบที่มีประสิทธิภาพสำหรับซำปัญหาอยู่ในNP P เคล็ดลับการทำงานเดียวกันสำหรับปัญหาอื่น ๆ ทั้งหมดในPดังนั้น
P⊆NP P
อัลกอริทึม Brute-Force / ครบถ้วนสมบูรณ์ค้นหาสำหรับNPและNP⊆ExpTime
ขั้นตอนวิธีการที่ดีที่สุดที่เรารู้ในการแก้ปัญหาที่เกิดขึ้นโดยพลการในNPมี
แรงเดรัจฉาน / หมดจดค้นหาอัลกอริทึม เลือกตัวตรวจสอบที่มีประสิทธิภาพสำหรับปัญหา (มีตัวตรวจสอบที่มีประสิทธิภาพตามการสันนิษฐานของเราว่าเป็นNP ) และตรวจสอบหลักฐานที่เป็นไปได้ทั้งหมดทีละรายการ หากผู้ตรวจสอบยอมรับหนึ่งในนั้นคำตอบคือใช่ มิฉะนั้นคำตอบคือไม่
ในตัวอย่างพาร์ติชั่นของเราเราลองพาร์ติชั่นที่เป็นไปได้ทั้งหมดและตรวจสอบว่าผลรวมนั้นเท่ากัน
โปรดทราบว่าอัลกอริทึมกำลังทำงานในเวลาเอ็กซ์โพเนนเชียลกรณีเลวร้ายที่สุด ขนาดของการพิสูจน์คือพหุนามในขนาดของอินพุต หากขนาดของการพิสูจน์เป็นmดังนั้นจะมีการพิสูจน์ที่เป็นไปได้2mการตรวจสอบแต่ละรายการจะต้องใช้เวลาพหุนามโดยตัวตรวจสอบ ดังนั้นโดยรวมขั้นตอนวิธีกำลังดุร้ายใช้เวลาอธิบาย
นี้แสดงให้เห็นว่าNPปัญหาจะสามารถแก้ไขได้ในเวลาที่ชี้แจงคือ
NP⊆ExpTime E (ยิ่งไปกว่านั้นอัลกอริธึมกำลังเดรัจฉานจะใช้พื้นที่จำนวนพหุนามนั่นคือ
NP⊆PSpace
แต่นั่นเป็นเรื่องราวของอีกวัน)
ปัญหาในNPสามารถมีอัลกอริธึมที่เร็วกว่ามากตัวอย่างเช่นปัญหาใด ๆ ในPมีอัลกอริทึมแบบพหุนามเวลา อย่างไรก็ตามสำหรับปัญหาโดยพลการในNP
เราไม่ทราบว่าอัลกอริทึมที่สามารถทำได้ดีกว่านี้มาก พูดอีกอย่างคือถ้าคุณบอกฉันว่าปัญหาของคุณอยู่ที่NP
(และไม่มีอะไรเกี่ยวข้องกับปัญหา) ดังนั้นอัลกอริทึมที่เร็วที่สุดที่เรารู้จักในการแก้ไขมันต้องใช้เวลามาก
แต่ก็ไม่ได้หมายความว่าไม่มีขั้นตอนวิธีการที่ดีกว่า
เราไม่ทราบว่า เท่าที่เรารู้ว่ามันเป็นไปได้ยัง ( แต่คิดว่าจะไม่น่ามากโดยเกือบทั้งหมดทฤษฎีความซับซ้อน) ที่
NP=PและNPปัญหาจะสามารถแก้ไขได้ในเวลาพหุนาม
NPNP
NPNPNPP⊆NP
NPNP
ขอบเขตที่ต่ำกว่าดูเหมือนจะพิสูจน์ได้ยาก
NP
โชคไม่ดีที่งานพิสูจน์ขอบเขตล่างนั้นยากมาก เราไม่สามารถพิสูจน์ได้ว่าปัญหาเหล่านี้ต้องการเวลาเชิงเส้นมากกว่า! ปล่อยให้อยู่คนเดียวที่ต้องใช้เวลาชี้แจง
การพิสูจน์ขอบเขตล่างของเวลาเชิงเส้นค่อนข้างง่าย: อัลกอริทึมจำเป็นต้องอ่านอินพุตหลังจากทั้งหมด การพิสูจน์ขอบเขตที่ต่ำกว่าเส้นตรงเป็นเรื่องที่แตกต่างอย่างสิ้นเชิง เราสามารถพิสูจน์ขอบเขตล่างต่ำสุดแบบ จำกัด พร้อมข้อ จำกัด เพิ่มเติมเกี่ยวกับชนิดของอัลกอริทึมที่เรากำลังพิจารณาเช่นการเรียงลำดับอัลกอริทึมโดยใช้การเปรียบเทียบ แต่เราไม่ทราบขอบเขตล่างโดยไม่มีข้อ จำกัด เหล่านั้น
เพื่อพิสูจน์ขอบเขตบนของปัญหาเราแค่ต้องออกแบบอัลกอริทึมที่ดีพอ บ่อยครั้งที่ต้องการความรู้ความคิดสร้างสรรค์และแม้แต่ความเฉลียวฉลาดในการคิดอัลกอริธึมดังกล่าว
อย่างไรก็ตามงานนั้นง่ายกว่ามากเมื่อเทียบกับการพิสูจน์ขอบเขตล่าง เราต้องแสดงให้เห็นว่าไม่มีขั้นตอนวิธีการที่ดี ไม่ใช่ว่าเราไม่ทราบว่าของอัลกอริทึมพอที่ดีใด ๆ ในขณะนี้ แต่ที่มีไม่ได้อยู่ขั้นตอนวิธีการที่ดีใด ๆที่ไม่มีใครจะเคยเกิดขึ้นกับขั้นตอนวิธีการที่ดี ลองคิดดูสักนาทีถ้าคุณไม่เคยทำมาก่อนเราจะแสดงผลลัพธ์ที่เป็นไปไม่ได้อย่างไร
1=0
เพื่อพิสูจน์ขอบเขตที่ต่ำกว่านั่นคือการแสดงให้เห็นว่าปัญหาต้องใช้เวลาพอสมควรในการแก้ปัญหาหมายความว่าเราต้องพิสูจน์สิ่งใด ๆอัลกอริทึมแม้กระทั่งสิ่งที่แยบยลมากที่ยังไม่รู้ก็ไม่สามารถแก้ปัญหาได้เร็วขึ้น มีความคิดที่ชาญฉลาดมากมายที่เรารู้ (โลภจับคู่การเขียนโปรแกรมแบบไดนามิกการเขียนโปรแกรมเชิงเส้นการเขียนโปรแกรมแบบกึ่งไม่มีที่สิ้นสุดการเขียนโปรแกรมผลรวมกำลังสองและความคิดสร้างสรรค์อัจฉริยะอื่น ๆ ) และยังมีอีกมากมายที่เรายังไม่รู้ การพิจารณาอัลกอริทึมเดียวหรือแนวคิดเฉพาะอย่างหนึ่งของการออกแบบอัลกอริทึมนั้นไม่เพียงพอเราจำเป็นต้องแยกแยะอัลกอริทึมทั้งหมดออกแม้กระทั่งที่เรายังไม่รู้เกี่ยวกับแม้กระทั่งสิ่งที่อาจไม่เคยรู้มาก่อน! และเราสามารถรวมทั้งหมดเหล่านี้ในอัลกอริทึมดังนั้นเราจึงจำเป็นต้องตัดการรวมกันของพวกเขาด้วย มีความคืบหน้าในการแสดงให้เห็นว่าความคิดบางอย่างไม่สามารถแก้ปัญหายากได้NPปัญหาเช่นความโลภและส่วนขยายของมันไม่สามารถทำงานได้และมีงานบางอย่างที่เกี่ยวข้องกับอัลกอริธึมการเขียนโปรแกรมแบบไดนามิกและมีงานบางอย่างในวิธีการเฉพาะของการใช้โปรแกรมเชิงเส้น แต่สิ่งเหล่านี้ไม่ได้ใกล้เคียงกับการพิจารณาแนวคิดที่ชาญฉลาดที่เรารู้จัก (ค้นหาขอบเขตที่ต่ำกว่าในการคำนวณแบบ จำกัด หากคุณสนใจ)
ปัญหาและอุปสรรคที่: ขอบเขตที่ต่ำกว่าเป็นเรื่องยากที่จะพิสูจน์
ในทางตรงกันข้ามเรามีผลการคำนวณทางคณิตศาสตร์ที่เรียกว่า
อุปสรรค
ที่กล่าวว่าการพิสูจน์ขอบเขตล่างไม่สามารถเป็นเช่นนั้นและเช่นนั้นและเช่นนั้นเกือบครอบคลุมเทคนิคทั้งหมดที่เราเคยพิสูจน์ขอบเขตที่ต่ำกว่า! ในความเป็นจริงนักวิจัยหลายคนยอมแพ้ในการพิสูจน์ขอบเขตที่ต่ำกว่าหลังจากที่ Alexander Razbarov และผลการพิสูจน์โดยธรรมชาติของ Steven Rudich
ปรากฎว่าการมีอยู่ของชนิดของการพิสูจน์ขอบเขตล่างที่เฉพาะเจาะจงจะบ่งบอกถึงความไม่มั่นคงของเครื่องกำเนิดไฟฟ้าจำนวนเทียมเข้ารหัสและเครื่องมือเข้ารหัสอื่น ๆ อีกมากมาย
ฉันบอกว่าเกือบจะเป็นเพราะในช่วงไม่กี่ปีที่ผ่านมามีความคืบหน้าบางอย่างโดยRyan Williams
ที่สามารถหลีกเลี่ยงผลลัพธ์ของสิ่งกีดขวางได้อย่างชาญฉลาด แต่ผลลัพธ์ก็ยังเป็นแบบจำลองการคำนวณที่อ่อนแอมากและค่อนข้างห่างไกลจากการพิจารณา .
NP
[ในอีกทางหนึ่งงานของ Ryan Williams แสดงให้เห็นว่ามีการเชื่อมต่ออย่างใกล้ชิดระหว่างการพิสูจน์ขอบเขตที่ต่ำกว่าและการพิสูจน์ขอบเขตบน ดูคำพูดของเขาที่งาน ICM 2014หากคุณสนใจ]
การลดลง: การแก้ปัญหาโดยใช้ปัญหาอื่นเป็นรูทีนย่อย / Oracle / Black Box
แนวคิดของการลดนั้นง่ายมาก: ในการแก้ปัญหาใช้อัลกอริทึมสำหรับปัญหาอื่น
nSumSum
ปัญหา:
nx1,…,xn
∑ni=1xi
อัลกอริทึมลด:
- s=0
- i1n
s=Sum(s,xi)
- s
SumSumSumSum
นี่คือสิ่งที่การลดคือสมมติว่าเรามีอัลกอริธึมสำหรับปัญหาและใช้มันเป็นพยากรณ์เพื่อแก้ปัญหาอื่น ที่นี่มีประสิทธิภาพหมายถึงมีประสิทธิภาพโดยสมมติว่า oracle ตอบในหน่วยเวลานั่นคือเรานับการดำเนินการของ oracle ในแต่ละขั้นตอน
หาก Oracle ส่งคืนคำตอบจำนวนมากเราจำเป็นต้องอ่านและอาจใช้เวลาพอสมควรดังนั้นเราควรนับเวลาที่เราต้องอ่านคำตอบที่ Oracle มอบให้เรา ในทำนองเดียวกันสำหรับการเขียน / ถามคำถามจาก Oracle แต่ oracle ทำงานได้ทันทีเช่นทันทีที่เราถามคำถามจาก oracle oracle จะเขียนคำตอบให้เราในเวลาเดียว งานทั้งหมดที่ oracle ทำนั้นนับเป็นขั้นตอนเดียว แต่ไม่รวมเวลาที่เราต้องเขียนคำถามและอ่านคำตอบ
เพราะเราไม่สนใจว่า oracle ทำงานอย่างไร แต่เพียงเกี่ยวกับคำตอบที่ส่งคืนเราสามารถทำให้การทำให้เป็นจริงง่ายขึ้นและพิจารณาว่า oracle เป็นปัญหาของตัวเองแทนที่อัลกอริธึมสำหรับมัน กล่าวอีกนัยหนึ่งเราไม่สนใจว่า oracle ไม่ใช่อัลกอริธึมเราไม่สนใจว่า oracle เกิดขึ้นได้อย่างไรกับคำตอบของมัน
Sum
เราสามารถถามคำถามหลายข้อจาก oracle และคำถามไม่จำเป็นต้องกำหนดไว้ล่วงหน้า: เราสามารถถามคำถามและตามคำตอบที่ oracle ส่งคืนเราทำการคำนวณด้วยตนเองแล้วถามคำถามอื่นตามคำตอบที่เราได้รับ คำถามก่อนหน้า
วิธีการมองนี้ก็มีความคิดเกี่ยวกับเรื่องนี้ในฐานะที่เป็นการคำนวณแบบโต้ตอบ การคำนวณแบบโต้ตอบในตัวเองเป็นหัวข้อใหญ่ดังนั้นฉันจะไม่เข้าไปที่นี่ แต่ฉันคิดว่าการกล่าวถึงมุมมองของการลดลงนี้จะมีประโยชน์
AOAO
การลดลงเรากล่าวข้างต้นเป็นรูปแบบทั่วไปมากที่สุดของการลดลงและเป็นที่รู้จักกันลดกล่องดำ
(aka ลด oracle , ลดทัวริง )
เป็นทางการมากขึ้น:
QOQ≤TO
Ax
Q(x)=AO(x)
AOQ
AQ≤PTOT
อย่างไรก็ตามเราอาจต้องการ จำกัด ข้อ จำกัด บางประการเกี่ยวกับวิธีที่อัลกอริธึมการลดโต้ตอบกับ oracle มีข้อ จำกัด หลายอย่างที่มีการศึกษา แต่ข้อ จำกัด ที่มีประโยชน์มากที่สุดคือข้อ จำกัด ที่เรียกว่าการลดหลายรายการ
(aka การลดการทำแผนที่ )
xy
เป็นทางการมากขึ้น
QOQ≤mO
Ax
Q(x)=O(A(x))
Q≤PmO
NPANPBANP
PNPNP
โพสต์ยาวเกินไปและเกินขีด จำกัด คำตอบ (30,000 อักขระ) ฉันจะยังคงคำตอบในส่วนที่สอง