พยายามเข้าใจ P vs NP กับ NP Complete เทียบกับ NP Hard


38

ฉันพยายามที่จะเข้าใจการจำแนกประเภทเหล่านี้และสาเหตุที่มีอยู่ ความเข้าใจของฉันถูกต้องหรือไม่ ถ้าไม่อะไร

  1. P คือความซับซ้อนของพหุนามหรือสำหรับจำนวนจริงที่ไม่เป็นลบเช่นฯลฯ หากปัญหาเป็นของ P ดังนั้นจะมีอัลกอริทึมอย่างน้อยหนึ่งตัวที่สามารถแก้ไขได้ตั้งแต่เริ่มต้นในเวลาพหุนาม ตัวอย่างเช่นฉันมักจะสามารถคิดออกถ้าจำนวนเต็มบางส่วนเป็นสำคัญโดยการวนลูปและการตรวจสอบในแต่ละขั้นตอนถ้าแบ่งO(nk)kO(1), O(n1/2), O(n2), O(n3)n2 <= k <= sqrt(n)kn

  2. NP เป็นความซับซ้อนของพหุนามที่ไม่สามารถกำหนดได้ ฉันไม่รู้จริง ๆ ว่าการไม่เป็นตัวกำหนดความหมายคืออะไร ฉันคิดว่ามันง่ายต่อการตรวจสอบในเวลาพหุนาม แต่อาจหรืออาจไม่ใช่เวลาพหุนามที่จะแก้ไขตั้งแต่ต้นหากเราไม่ทราบคำตอบ เนื่องจากอาจแก้ไขได้ในเวลาพหุนามปัญหา P ทั้งหมดจึงเป็นปัญหา NP การแยกตัวประกอบจำนวนเต็มได้รับการยกมาเป็นตัวอย่างของ NP แต่ฉันไม่เข้าใจว่าทำไมมันไม่ใช่ P ส่วนตัวเนื่องจากการแยกตัวประกอบการทดลองใช้O(sqrt(n))เวลา

  3. NP-Complete ฉันไม่เข้าใจเลย แต่ปัญหาของพนักงานขายที่เดินทางถูกยกมาเป็นตัวอย่างของสิ่งนี้ แต่ในความเห็นของฉันปัญหาของ TSP อาจเป็น NP เพราะมันต้องมีการตรวจสอบว่าคุณได้รับเส้นทางล่วงหน้าหรือไม่O(2n n2) time to solve, but O(n)

  4. NP-Hard ฉันคิดว่าเต็มไปด้วยสิ่งแปลกปลอม ยากที่จะตรวจสอบและยากที่จะแก้ไข


4
คุณอ่านคำถามเกี่ยวกับ CS.SE คำจำกัดความของ P, NP, NP-complete และ NP-hard คืออะไร ?

ฉันยังไม่เห็นลิงก์นั้นเลย ฉันจะอ่านมันขอบคุณ
Nakano

1
คำตอบ CS.SE นั้นค่อนข้างน่าประทับใจ แต่ฉันคิดว่าเป็นไปได้ที่จะให้คำอธิบายที่กระชับและไม่ทำให้เข้าใจผิดว่าคำเหล่านี้มีความหมายอย่างไรโดยไม่ต้องลงรายละเอียดมากนัก @ นากาโนะจะสนใจคำตอบที่สั้นลงถึงจุดหรือ CS.SE ที่โพสต์แก้ปัญหาของคุณหรือไม่
Ixrec

@MichaelT ฉันอ่านลิงค์นั้นและพบว่ามันละเอียดมากและไม่ค่อยชัดเจนในหลาย ๆ จุด ฉันรู้สึกว่ามันให้คำถามมากกว่าคำตอบ
Nakano

1
"non-deterministic" สามารถตีความได้ว่า "ให้ตัวเลือกคอมพิวเตอร์เลือกตัวเลือกที่ถูกต้องทุกครั้ง"
Thorbjørn Ravn Andersen

คำตอบ:


39

โดยทั่วไปคุณถูกต้องเกี่ยวกับ P และ NP แต่ไม่เกี่ยวกับ NP-hard และ NP-complete

สำหรับผู้เริ่มต้นนี่เป็นคำจำกัดความที่สั้นกระชับของคลาสความซับซ้อนทั้งสี่ที่เป็นปัญหา:

  • P เป็นคลาสของปัญหาการตัดสินใจที่สามารถแก้ไขได้ในเวลาพหุนามโดยเครื่องทัวริงที่กำหนด

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

  • NP-hard คือคลาสของปัญหาการตัดสินใจที่ปัญหาทั้งหมดใน NP สามารถลดลงได้ในเวลาพหุนามโดยเครื่องทัวริงที่กำหนดไว้

  • NP-complete คือจุดตัดของ NP-hard และ NP เท่ากับ - สมบูรณ์คือปัญหาการตัดสินใจในระดับปัญหาที่สมบูรณ์ซึ่งปัญหาทั้งหมดใน NP สามารถลดลงในเวลาพหุนามโดยเครื่องทัวริงกำหนด

และนี่คือไดอะแกรมออยเลอร์จาก Wikipedia ที่แสดงความสัมพันธ์ระหว่างสี่คลาส (สมมติว่า P ไม่เท่ากับ NP):

ป้อนคำอธิบายรูปภาพที่นี่

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

สิ่งหนึ่งที่ง่ายต่อการพลาดเกี่ยวกับคำนิยาม NP-ที่ยากคือที่ลดลงไปจากปัญหา NP กับปัญหา NP-ยากแต่ไม่จำเป็นต้องในทางกลับกัน ซึ่งหมายความว่าปัญหา NP-hard อาจอยู่ใน NP หรือในระดับความซับซ้อนที่สูงขึ้นมาก (ดังที่คุณเห็นได้จากแผนภาพ Euler) หรือปัญหาเหล่านั้นอาจไม่สามารถตัดสินใจได้ นั่นเป็นสาเหตุที่ผู้คนมักพูดว่า "NP-hard แปลว่าอย่างน้อยยากเท่ากับ NP" เมื่อพยายามอธิบายสิ่งนี้อย่างไม่เป็นทางการ

ปัญหาการหยุดชะงักเป็นตัวอย่างที่ดีของปัญหา NP-hard ที่ไม่ชัดเจนใน NP ดังที่Wikipedia อธิบาย :

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


3
@ นากาโน่อย่างสังหรณ์ใจมันเป็น "การลดลง" ในแง่ที่ว่าปัญหาหนึ่งกำลังทำให้เกิดปัญหาย่อยของปัญหาอื่น ๆ ความจริงที่ว่าการลดลงเหล่านี้บางอย่างเพิ่มความซับซ้อนแทนการลดลงผ่านทางเลือกที่ไม่ดีของ "ปัญหาย่อย" เพียงหมายความว่าคุณจะไม่ใช้การลดลงเหล่านี้ในรหัสโลกแห่งความจริงใด ๆ แม้ว่าจะเป็นคนซื่อสัตย์ NP-hard ไม่ได้ทำให้ฉันเป็นชั้นเรียนที่แปลกและไม่น่าสนใจอย่างยิ่ง มันอาจมีผลมากกว่าที่จะเพิกเฉยและคิดถึง NP-complete เพราะชุดของปัญหา NP ที่ปัญหา NP อื่น ๆ ลดลง
Ixrec

1
@Nakano stackoverflow.com/questions/12637582/…ฉันเชื่อว่าคำตอบสั้น ๆ คือเมื่อผู้คนพูดถึงการแยกตัวประกอบจำนวนเต็มเป็น NP พวกเขามักจะพูดถึงจำนวนเต็มขนาดใหญ่มากซึ่งโดยทั่วไปคุณเริ่มทำข้อพิสูจน์ O ใหญ่กับ n เป็น "จำนวนบิตที่จำนวนเต็มใช้ในหน่วยความจำ" แทนที่จะเป็น "จำนวนบิตที่คุณส่งเข้าไปในฟังก์ชัน"
Ixrec

1
@ นากาโนะมันคงคุ้มค่าที่จะถามคำถามใหม่เกี่ยวกับการแยกตัวประกอบจำนวนเต็มนี้หากคำถาม SO ที่ฉันเชื่อมโยงและความคิดเห็นของฉันไม่เพียงพอที่จะแก้ไขปัญหานี้ให้คุณ
Ixrec

2
@ นากาโนะ: ในสัญกรณ์ใหญ่ -O nเป็นตัวชี้วัดสำหรับขนาดของอินพุต (จำนวนขององค์ประกอบ, ไบต์, ตัวเลข, ฯลฯ ) ไม่ใช่ค่าของอินพุต
Bart van Ingen Schenau

2
@Nakano คำตอบสั้น ๆ คือการที่คุณพูดถูกทั้งหมดและนี่คือเหตุผลที่เมื่อทำเวลาซับซ้อน analaysis คุณมักจะต้องระบุสิ่งที่ n หมายถึง การอ้างว่า n คือ "ขนาดของอินพุต" เป็นเพียงบทสรุปโดยสังเขปของวิธีการที่เราเลือกกำหนด n มันไม่ได้เป็นส่วนหนึ่งของคำจำกัดความที่เข้มงวดของสัญกรณ์ขนาดใหญ่หรือความซับซ้อนของเวลา ฉันเชื่อว่าคุณถูกต้องที่จะบอกว่าการแยกตัวประกอบจำนวนเต็มคือ O (sqrt (n)) เมื่อ n คือค่าของอินพุต มันเกิดขึ้นเมื่อความซับซ้อนเกิดขึ้นโดยที่ n หมายถึงขนาดมักมีประโยชน์มากกว่าในทางปฏิบัติมากกว่าสิ่งที่ n หมายถึงคุณค่า
Ixrec

7

การแยกตัวประกอบจำนวนเต็มได้รับการยกมาเป็นตัวอย่างของ NP แต่ฉันไม่เข้าใจว่าทำไมมันถึงไม่ใช่ P โดยส่วนตัวเนื่องจากการแยกตัวประกอบการทดลองใช้เวลา O (sqrt (n))

สำหรับวัตถุประสงค์ของคลาสที่ซับซ้อนนั้นnคือความยาวของอินพุต ดังนั้นหากคุณต้องการปัจจัยจำนวนเต็มk, nไม่ได้kแต่log kจำนวนของบิต (หรืออะไรก็ตาม) ก็จะใช้เวลาที่จะเขียนลงจำนวน ดังนั้นจำนวนเต็มตีนเป็ดเป็นO(sqrt(k))ตามที่คุณพูด แต่นี้เป็นซึ่งเป็นO(sqrt(2n))O(2(n/2))

NP-Hard ฉันคิดว่าเต็มไปด้วยสิ่งแปลกปลอม ยากที่จะตรวจสอบและยากที่จะแก้ไข

ไม่ปัญหา NP-Hard นั้นเกี่ยวกับปัญหาที่ยากเพียงใดในการแก้ไข

ปัญหา NP-Hard นั้นยากอย่างน้อยเช่นเดียวกับปัญหาที่ยากที่สุดใน NP เรารู้ว่ามันยากอย่างนั้นเพราะถ้าเรามีอัลกอริธึมเวลาพหุนามสำหรับปัญหา NP-Hard เราสามารถปรับอัลกอริทึมนั้นกับปัญหาใด ๆ ใน NP

NP-Complete ฉันไม่เข้าใจเลย

NP-Complete หมายความว่าปัญหาคือทั้ง NP และ NP-Hard หมายความว่าเราสามารถตรวจสอบวิธีแก้ปัญหาได้อย่างรวดเร็ว (NP) แต่อย่างน้อยก็ยากพอ ๆ กับปัญหาที่ยากที่สุดใน NP (NP-Hard)

ฉันไม่รู้จริง ๆ ว่าการไม่เป็นตัวกำหนดความหมายคืออะไร

Non-Decismism เป็นนิยามทางเลือกของ NP เครื่องทัวริงที่ไม่สามารถกำหนดค่าได้อย่างมีประสิทธิภาพสามารถทำสำเนาตัวเองได้ทุกเวลาและให้แต่ละสำเนาใช้เส้นทางการดำเนินการที่แตกต่างกัน ภายใต้คำจำกัดความนี้ NP เป็นชุดของปัญหาที่สามารถแก้ไขได้ในเวลาพหุนามโดยคอมพิวเตอร์มากกว่าที่จะสามารถทำซ้ำตัวเองได้อย่างอิสระ ปรากฎว่านี่เป็นปัญหาชุดเดียวกันที่สามารถตรวจสอบได้ในเวลาพหุนาม


ดังนั้นจึงเป็นไปได้สำหรับอัลกอริทึม $ $ (n ^ k) $ time ที่จะเป็นปัญหา NP?
Nakano

kจำนวนจริงคงที่คืออะไร? ใช่. ปัญหา P ทั้งหมดก็เป็นปัญหา NP เห็นได้ชัดว่าทุกสิ่งที่คุณสามารถแก้ไขได้ในเวลาพหุนามสามารถตรวจสอบได้ในเวลาพหุนาม
Winston Ewert

ความยาว / ขนาดถูกกำหนดที่นี่จริงอย่างไร ตัวอย่างเช่นฉันสามารถเขียน $ n $ ในฐานขนาดใหญ่และลดความยาวเมื่อเขียน สิ่งที่เกี่ยวกับปัญหาที่ไม่ชัดเจนจัดการกับจำนวนเต็ม แต่บอกว่ากราฟด้วย $ V $ จุดและ $ E $ ขอบ ฯลฯ
Nakano

@ นากาโนะจริง ๆ แล้วฐานขนาดใหญ่จะไม่เปลี่ยนแปลงเพราะมันจะเป็นเพียงปัจจัยที่แตกต่างคงที่ ดังนั้นมันจะไม่ส่งผลกระทบกับพหุนามและไม่ใช่พหุนาม อย่างไรก็ตามหากคุณเขียนหมายเลขเป็นเอกภาพก็จะเปลี่ยน
Winston Ewert

2
@Nakano อืม ... ฉันไม่กล้าอธิบายคลาสที่ซับซ้อนให้แก่เด็กห้าขวบเลย : P
Winston Ewert

5

สิ่งแรกที่ต้องเข้าใจคือPและNPจำแนกภาษาไม่ใช่ปัญหา เพื่อให้เข้าใจถึงความหมายนี้เราต้องมีคำจำกัดความอื่นก่อน

อักษรเป็นไม่ว่างเปล่าขอบเขตของสัญลักษณ์

{ 0, 1} เป็นตัวอักษรที่เป็นชุดอักขระ ASCII {} ไม่ใช่ตัวอักษรเพราะว่างเปล่า N (จำนวนเต็ม) ไม่ใช่ตัวอักษรเพราะไม่ จำกัด

ให้Σเป็นตัวอักษร concatenation สั่งจำนวน จำกัด ของสัญลักษณ์จากΣเรียกว่าคำมากกว่าΣ

สตริง101เป็นคำที่อยู่เหนือตัวอักษร { 0, 1} คำที่ว่างเปล่า (เขียนบ่อยเท่าที่ε ) เป็นคำมากกว่าตัวอักษรใด ๆ สตริงpenguinเป็นคำที่อยู่เหนือตัวอักษรที่มีอักขระ ASCII สัญกรณ์ทศนิยมของจำนวนπไม่ได้เป็นคำมากกว่าอักษร { ., 0, 1, 2, 3, 4, 5, 6, 7, 8, 9} เพราะมันไม่ได้ จำกัด

ความยาวของคำWเขียนเป็น | w | คือจำนวนสัญลักษณ์ในนั้น

ตัวอย่างเช่น | hello| = 5 และ | ε | = 0 สำหรับคำใด ๆw , | w | ∈ Nและดังนั้นจึง จำกัด

ให้Σเป็นตัวอักษร ชุดΣ *มีคำทั่วΣรวมทั้งε ชุดΣ +มีคำทั่วΣไม่รวมε สำหรับnN , Σ nคือชุดของคำพูดของความยาวn

ทุกตัวอักษรΣ , Σ *และΣ +ไม่มีที่สิ้นสุดเซตนับได้ สำหรับชุดอักขระ ASCII Σ ASCIIนิพจน์ทั่วไป.*และ.+แสดงว่าΣ ASCII และΣ ASCII +ตามลำดับ

{ 0, 1} 7เป็นชุดของรหัส ASCII 7 บิต { 0000000, 0000001, ... , 1111111} { 0, 1} 32คือชุดของค่าจำนวนเต็ม 32 บิต

ให้Σเป็นตัวอักษรและLΣ * Lเรียกว่าภาษาเหนือΣ

สำหรับตัวอักษรΣชุดที่ว่างเปล่าและΣ *ภาษาที่น่ารำคาญมากกว่าΣ อดีตมักจะถูกเรียกว่าเป็นภาษาที่ว่างเปล่า ภาษาที่ว่างเปล่า {} และภาษาที่มีเฉพาะคำที่ว่าง { ε } นั้นแตกต่างกัน

เซ็ตย่อยของ { 0, 1} 32ที่สอดคล้องกับค่าจุดลอยตัวที่ไม่ใช่ NaN IEEE 754 เป็นภาษาที่แน่นอน

ภาษาสามารถมีจำนวนคำไม่ จำกัด แต่ทุกภาษาสามารถนับได้ ชุดของสตริง { 1, 2... } denoting จำนวนเต็มในสัญกรณ์ทศนิยมเป็นภาษาอนันต์มากกว่าตัวอักษร { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ชุดที่ไม่มีที่สิ้นสุดของสตริง { 2, 3, 5, 7, 11, 13, ... } แสดงถึงตัวเลขที่สำคัญในสัญกรณ์ทศนิยมเป็นชุดย่อยที่เหมาะสมดังกล่าว ภาษาที่มีคำทั้งหมดที่ตรงกับการแสดงออกปกติ[+-]?\d+\.\d*([eE][+-]?\d+)?เป็นภาษาเหนือชุดอักขระ ASCII (แสดงถึงชุดย่อยของการแสดงออกทศนิยมที่ถูกต้องตามที่กำหนดโดยภาษาการเขียนโปรแกรม C)

ไม่มีภาษาที่มีตัวเลขจริงทั้งหมด (ในสัญลักษณ์ใด ๆ ) เนื่องจากชุดของตัวเลขจริงไม่สามารถนับได้

ให้Σเป็นตัวอักษรและLΣ * เครื่องD ตัดสินใจ Lถ้าสำหรับการป้อนข้อมูลทุกWΣ *มันคำนวณลักษณะการทำงาน χ L ( W ) ในเวลาที่ จำกัด ฟังก์ชั่นลักษณะถูกกำหนดให้เป็น

χ L : Σ  → {0, 1}
     w   ↦ 1,   wL 
         0 มิฉะนั้น

เครื่องดังกล่าวจะเรียกว่าdeciderสำหรับL เราเขียน“ D ( w ) = x ” สำหรับ“ กำหนดw , Dเอาต์พุตx

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

เครื่องเข้าถึงแบบสุ่มพร้อมชุดคำสั่งที่ จำกัด และพื้นที่เก็บข้อมูลไม่ จำกัด เป็นเครื่องรุ่นอื่นที่มีประสิทธิภาพเท่ากับรุ่นเครื่องจักรทัวริง

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

เมื่อคุณใช้มันในคำถามของคุณฉันคิดว่าคุณคุ้นเคยกับสัญกรณ์“ big-O” อยู่แล้วดังนั้นนี่เป็นเพียงการทบทวนอย่างรวดเร็ว

ให้f : N →เป็นฟังก์ชั่น ชุดO ( f ) มีฟังก์ชั่นทั้งหมดg : NNซึ่งมีค่าคงที่n 0NและcNเช่นนั้นสำหรับทุกnNกับn > n 0มันเป็นความจริงที่g ( n ) f c f ( n )

ตอนนี้เราพร้อมที่จะเข้าใกล้คำถามจริง

คลาสPมีภาษาทั้งหมดLซึ่งมีเครื่องทัวริงDที่ตัดสินใจLและค่าคงที่kNเช่นนั้นสำหรับทุกอินพุตw , Dหยุดหลังจากขั้นตอนT (| w |) ส่วนใหญ่สำหรับฟังก์ชันTO ( nn k )

เนื่องจากO ( nn k ) ในขณะที่ถูกต้องทางคณิตศาสตร์ไม่สะดวกในการเขียนและอ่านคนส่วนใหญ่ - จะซื่อสัตย์ทุกคนยกเว้นตัวเอง - มักจะเขียนเพียงO ( n k )

โปรดทราบว่าถูกผูกไว้ขึ้นอยู่กับความยาวของW ดังนั้นอาร์กิวเมนต์ที่คุณสร้างขึ้นสำหรับภาษาของจำนวนเฉพาะนั้นถูกต้องสำหรับตัวเลขในการเข้ารหัสแบบ unarayโดยที่การเข้ารหัสwของตัวเลขnความยาวของการเข้ารหัส | w | เป็นสัดส่วนกับn ไม่มีใครเคยใช้การเข้ารหัสเช่นนี้ในทางปฏิบัติ การใช้อัลกอริธึมขั้นสูงมากกว่าเพียงแค่พยายามใช้ปัจจัยที่เป็นไปได้ทั้งหมดก็สามารถแสดงให้เห็นได้ว่าภาษาของจำนวนเฉพาะยังคงอยู่ในPหากอินพุตถูกเข้ารหัสในรูปแบบไบนารี่ (หรือฐานอื่น ๆ ) (แม้จะมีความสนใจอย่างมากสิ่งนี้สามารถพิสูจน์ได้โดยManindra Agrawal, Neeraj Kayal และ Nitin Saxena ในกระดาษที่ได้รับรางวัลในปี 2004 ดังนั้นคุณสามารถเดาได้ว่าอัลกอริทึมนั้นไม่ง่ายมาก)

ภาษาเล็กน้อย {} และΣ *และภาษาที่ไม่น่ารำคาญ { ε } จะเห็นได้ชัดในP (สำหรับตัวอักษรใด ๆΣ ) คุณสามารถเขียนฟังก์ชั่นในภาษาการเขียนโปรแกรมที่คุณชื่นชอบซึ่งใช้สตริงเป็นอินพุตและส่งกลับบูลีนเพื่อบอกว่าสตริงนั้นเป็นคำที่มาจากภาษาสำหรับแต่ละภาษาเหล่านี้หรือไม่และพิสูจน์ว่าฟังก์ชันของคุณมีความซับซ้อน

ทุกปกติภาษา (ภาษาอธิบายโดยการแสดงออกปกติ) อยู่ในP

ให้Σเป็นตัวอักษรและLΣ * เครื่องVที่ใช้ tuple ที่เข้ารหัสของคำสองคำW , Σ *และผล 0 หรือ 1 หลังจำนวน จำกัด ของขั้นตอนคือการตรวจสอบสำหรับLถ้ามันมีคุณสมบัติดังต่อไปนี้

  • ที่กำหนด ( W , C ), Vเอาท์พุท 1 เท่านั้นหากW ∈ L
  • ทุกWLมีอยู่Σ *เช่นว่าV ( W , C ) = 1

ในความหมายดังกล่าวข้างต้นจะเรียกว่าเป็นพยาน (หรือใบรับรอง )

ตรวจสอบที่ได้รับอนุญาตเพื่อให้เชิงลบเท็จพยานผิดแม้ว่าWเป็นจริงในL อย่างไรก็ตามมันไม่ได้รับอนุญาตให้ทำการบวกปลอม มันเป็นสิ่งจำเป็นสำหรับแต่ละคำในภาษานั้นมีพยานอย่างน้อยหนึ่งคน

สำหรับภาษา COMPOSITE ที่มีการเข้ารหัสทศนิยมของจำนวนเต็มทั้งหมดที่ไม่ได้เป็นเอกสิทธิ์พยานอาจเป็นตัวประกอบ ตัวอย่างเช่น(659, 709)เป็นพยานสำหรับ467231∈ COMPOSITE คุณสามารถตรวจสอบได้อย่างง่ายดายว่าบนกระดาษหนึ่งแผ่นโดยที่ไม่มีพยานให้การพิสูจน์ว่า 467231 นั้นไม่ยากเลยถ้าไม่ใช้คอมพิวเตอร์

เราไม่ได้พูดอะไรเกี่ยวกับวิธีการพบพยานที่เหมาะสม นี่คือส่วนที่ไม่ได้กำหนด

คลาสNPประกอบด้วยภาษาทั้งหมดLซึ่งมีเครื่องทัวริงVที่ตรวจสอบLและค่าคงที่kNเช่นนั้นสำหรับทุกอินพุต ( w , c ), Vหยุดทำงานหลังจากขั้นตอนT (| w |) ส่วนใหญ่สำหรับฟังก์ชั่นTO ( nn k )

โปรดทราบว่านิยามข้างต้นแสดงให้เห็นว่าแต่ละWLมีอยู่เป็นพยานกับ | c | ≤ T (| w |) (เครื่องทัวริงไม่สามารถมองสัญลักษณ์ของพยานได้มากกว่านี้)

NPเป็นชุดของP (ทำไม?) มันไม่ได้เป็นที่รู้จักกันว่ามีอยู่ภาษาที่อยู่ในNPแต่ไม่ได้อยู่ในP

การแยกตัวประกอบจำนวนเต็มไม่ใช่ภาษาต่อ se อย่างไรก็ตามเราสามารถสร้างภาษาที่แสดงถึงปัญหาการตัดสินใจที่เกี่ยวข้อง นั่นคือภาษาที่มีอันดับทั้งหมด ( n , ม. ) เช่นที่nมีปัจจัยdกับd ≤ เมตร ให้เราเรียกแฟคเตอร์ภาษานี้ หากคุณมีอัลกอริทึมในการตัดสินใจ FACTOR คุณสามารถใช้เพื่อคำนวณการแยกตัวประกอบแบบเต็มด้วยค่าใช้จ่ายแบบพหุนามเท่านั้นโดยทำการค้นหาไบนารีแบบเรียกซ้ำสำหรับแต่ละตัวประกอบ

มันเป็นเรื่องง่ายที่จะแสดงให้เห็นว่าปัจจัยที่อยู่ในNP พยานที่เหมาะสมจะเป็นเพียงปัจจัยdเท่านั้นและผู้ตรวจสอบทั้งหมดจะต้องทำคือตรวจสอบว่าdmและn mod d = 0 ทั้งหมดนี้สามารถทำได้ในเวลาพหุนาม (โปรดจำไว้ว่ามันคือความยาวของการเข้ารหัสที่นับและนั่นคือลอการิทึมในn )

หากคุณสามารถแสดงให้เห็นว่าปัจจัยยังอยู่ในPคุณสามารถมั่นใจได้ว่าจะได้รับรางวัลยอดเยี่ยมมากมาย (และคุณได้ทำลายส่วนสำคัญของการเข้ารหัสของวันนี้)

สำหรับภาษาในทุกNPมีอัลกอริทึมแรงเดรัจฉานที่ตัดสินใจมัน deterministically เพียงทำการค้นหาพยานอย่างละเอียดถี่ถ้วน (โปรดทราบว่าความยาวสูงสุดของพยานถูก จำกัด โดยพหุนาม) ดังนั้นอัลกอริทึมของคุณในการตัดสินใจ PRIMES จึงเป็นอัลกอริทึมที่ดุร้ายกำลังตัดสินใจคอมโพสิต

เพื่อรับมือกับคำถามสุดท้ายของคุณเราต้องแนะนำลดลง การลดลงเป็นแนวคิดที่มีประสิทธิภาพมากของวิทยาศาสตร์คอมพิวเตอร์เชิงทฤษฎี การลดปัญหาหนึ่งไปยังอีกปัญหาหนึ่งโดยทั่วไปหมายถึงการแก้ปัญหาหนึ่งโดยวิธีการแก้ปัญหาอื่น

ให้Σเป็นตัวอักษรและและBเป็นภาษาเหนือΣ เป็นพหุนามเวลาหลายหนึ่งซึ้งปรับปรุงเพื่อBถ้ามีฟังก์ชั่นF : Σ * →การΣ *มีคุณสมบัติดังต่อไปนี้

  • W ∈   ⇔   ( W ) ∈ B   สำหรับทุกWΣ *
  • ฟังก์ชันfสามารถคำนวณได้โดยเครื่องทัวริงสำหรับทุกอินพุตwในจำนวนขั้นตอนที่ล้อมรอบด้วยพหุนามใน w |

ในกรณีนี้เราเขียน≤ P B

ตัวอย่างเช่นให้Aเป็นภาษาที่มีกราฟทั้งหมด (เข้ารหัสเป็นเมทริกซ์ adjacency) ที่มีรูปสามเหลี่ยม (สามเหลี่ยมเป็นวัฏจักรของความยาว 3) ปล่อยให้Bเป็นภาษาที่มีเมทริกซ์ทั้งหมดที่มีการติดตามที่ไม่เป็นศูนย์ (ร่องรอยของเมทริกซ์คือผลรวมขององค์ประกอบแนวทแยงหลัก.) จากนั้นเป็นพหุนามเวลาหลายหนึ่งออกซิเจนB เพื่อพิสูจน์นี้เราต้องไปหาที่เหมาะสมฟังก์ชั่นการเปลี่ยนแปลงฉ ในกรณีนี้เราสามารถตั้งค่าFเพื่อคำนวณ 3 อำนาจของเมทริกซ์ถ้อยคำ สิ่งนี้ต้องการผลิตภัณฑ์เมทริกซ์สองตัวซึ่งแต่ละตัวมีความซับซ้อนพหุนาม

มันเป็นความจริงนิดว่าLP L (คุณสามารถพิสูจน์ได้อย่างเป็นทางการหรือไม่)

เราจะนำสิ่งนี้ไปใช้กับNPทันที

ภาษาLคือNP -hardถ้าหากว่าL '≤ P LสำหรับทุกภาษาL ' ∈ NP

NPภาษา -hard อาจจะหรืออาจจะไม่อยู่ในNPตัวเอง

ภาษาLคือNP-สมบูรณ์ถ้าหากว่าเท่านั้น

  • LNPและ
  • LคือNP -hard

ที่มีชื่อเสียงที่สุดNPภาษาที่สมบูรณ์คือ SAT มันมีสูตรบูลีนทั้งหมดที่สามารถทำให้พอใจ ตัวอย่างเช่น ( ab ) ∧ (¬ a ∨¬ b ) ∈ SAT พยานที่ถูกต้องคือ { a = 1, b = 0} สูตร ( ab ) ∧ (¬ ab ) ∧¬ b ∉ SAT (คุณจะพิสูจน์ได้อย่างไร)

มันไม่ได้เป็นเรื่องยากที่จะแสดงให้เห็นว่า SAT ∈ NP เพื่อแสดงNP -hardness ของ SAT คือการทำงานบางอย่าง แต่มันก็ทำในปี 1971 โดยสตีเฟ่นคุก

เมื่อที่หนึ่งNPภาษาที่สมบูรณ์เป็นที่รู้จักกันมันก็ค่อนข้างง่ายที่จะแสดงNP -completeness ภาษาอื่น ๆ ผ่านทางลดลง หากภาษาAเป็นNP -hard แสดงว่าAp Bแสดงว่าBคือNP -hard เช่นกัน (ผ่านการส่งผ่านของ "≤ p ") ในปี 1972 Richard Karpตีพิมพ์รายชื่อ 21 ภาษาที่เขาสามารถแสดงได้คือNP- ลดขนาดผ่าน (transitive) ของ SAT (นี่เป็นบทความเดียวในคำตอบนี้ที่ฉันแนะนำให้คุณอ่านจริง ๆ แล้วมันไม่ยากที่จะเข้าใจและให้แนวคิดที่ดีว่าการพิสูจน์ความสมบูรณ์ของNPผ่านการลดขนาดไหน)

สุดท้ายสรุปสั้น ๆ เราจะใช้สัญลักษณ์NPHและNPCเพื่อแสดงคลาสของNP -hard และNP -complete language ตามลำดับ

  • PNP
  • NPCNPและNPCNPHจริงๆแล้วNPC = NPNPHตามคำจำกัดความ
  • ( ANP ) ∧ ( BNPH ) ⇒   Ap B

โปรดทราบว่าการรวมNPCNPเหมาะสมแม้ในกรณีที่P = NP หากต้องการดูนี้ทำให้ตัวเองชัดเจนว่าไม่มีภาษาที่ไม่น่ารำคาญสามารถลดลงไปเล็กน้อยหนึ่งและมีภาษาที่น่ารำคาญในPเช่นเดียวกับภาษาที่ไม่น่ารำคาญในNP นี่เป็นมุมตัวพิมพ์เล็ก (ไม่น่าสนใจมาก)

ภาคผนวก

แหล่งที่มาหลักของความสับสนดูเหมือนว่าคุณกำลังคิดถึง“ n ” ใน“ O ( nf ( n ))” เป็นการตีความการป้อนข้อมูลของอัลกอริทึมเมื่อมันหมายถึงความยาวของอินพุต นี่คือความแตกต่างที่สำคัญเพราะมันหมายถึงความซับซ้อนของซีมโทติคขึ้นอยู่กับการเข้ารหัสที่ใช้สำหรับอินพุต

สัปดาห์นี้สถิติใหม่สำหรับMersenne prime ที่รู้จักกันดีที่สุดนั้นประสบความสำเร็จ จำนวนเฉพาะที่รู้จักมากที่สุดในปัจจุบันคือ 2 74 207 281 - 1 หมายเลขนี้ใหญ่มากจนทำให้ฉันปวดหัวดังนั้นฉันจะใช้เลขที่เล็กกว่าในตัวอย่างต่อไปนี้: 2 31 - 1 = 2 147 483 647 มันสามารถ ถูกเข้ารหัสในรูปแบบที่แตกต่างกัน

  • โดยเลขชี้กำลัง Mersenne เป็นเลขทศนิยม: 31(2 ไบต์)
  • เป็นเลขทศนิยม: 2147483647(10 ไบต์)
  • หมายเลข unary: 11111…11โดยที่จะถูกแทนที่ด้วย 2 147 483 640 1s เพิ่มเติม(เกือบ 2 GiB)

สตริงทั้งหมดเหล่านี้เข้ารหัสหมายเลขเดียวกันและเมื่อได้รับสิ่งเหล่านี้เราสามารถสร้างการเข้ารหัสอื่น ๆ ที่มีหมายเลขเดียวกันได้อย่างง่ายดาย (คุณสามารถแทนที่การเข้ารหัสทศนิยมด้วยเลขฐานสองฐานแปดหรือฐานสิบหกหากคุณต้องการมันจะเปลี่ยนความยาวโดยปัจจัยคงที่เท่านั้น)

อัลกอริทึมไร้เดียงสาสำหรับการทดสอบแบบดั้งเดิมนั้นเป็นพหุนามสำหรับการเข้ารหัสแบบเอกนารีเท่านั้น การทดสอบแบบดั้งเดิมของ AKSนั้นเป็นพหุนามสำหรับทศนิยม (หรือเบสอื่น ๆb ≥ 2) การทดสอบแบบดั้งเดิมของ Lucas-Lehmerเป็นอัลกอริธึมที่รู้จักกันดีที่สุดสำหรับ Mersenne primes M pด้วยpไพรม์คี่ แต่มันยังคงเป็นเลขชี้กำลังในความยาวของการเข้ารหัสเลขฐานสองของ Mersenne exponent p (พหุนามในp )

หากเราต้องการพูดคุยเกี่ยวกับความซับซ้อนของอัลกอริธึมมันสำคัญมากที่เราจะต้องชัดเจนว่าเราใช้ตัวแทนอะไร โดยทั่วไปเราสามารถสันนิษฐานได้ว่าใช้การเข้ารหัสที่มีประสิทธิภาพที่สุด นั่นคือไบนารีสำหรับจำนวนเต็ม (โปรดทราบว่าไม่ใช่ทุกหมายเลขเฉพาะเป็น Mersenne prime ดังนั้นการใช้เลขชี้กำลัง Mersenne ไม่ใช่รูปแบบการเข้ารหัสทั่วไป)

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

สำหรับปัญหาบางอย่างที่ภาษาการตัดสินใจในการเข้ารหัสไบนารีNPสมบูรณ์ภาษาการตัดสินใจที่จะไม่NPสมบูรณ์ถ้าการเข้ารหัสของตัวเลขที่ฝังตัวจะเปลี่ยนเป็นเอก ภาษาการตัดสินใจสำหรับปัญหาอื่น ๆ ยังคงเป็นปัญหาที่สมบูรณ์ หลังถูกเรียกว่าขอNPสมบูรณ์ ตัวอย่างที่รู้จักกันดีที่สุดคือการบรรจุถัง

นอกจากนี้ยังเป็น (และอาจจะมากกว่า) ที่น่าสนใจเพื่อดูวิธีการซับซ้อนของการเปลี่ยนแปลงขั้นตอนวิธีถ้าใส่ถูกบีบอัด สำหรับตัวอย่างของ Mersenne primes เราได้เห็นการเข้ารหัสสามตัวซึ่งแต่ละตัวถูกบีบอัดแบบลอการิทึมมากกว่ารุ่นก่อน

ในปี 1983, Hana Galperin และ Avi Wigdersonได้เขียนบทความที่น่าสนใจเกี่ยวกับความซับซ้อนของอัลกอริธึมกราฟทั่วไปเมื่อการเข้ารหัสอินพุตของกราฟถูกบีบอัดแบบลอการิทึม สำหรับปัจจัยการผลิตเหล่านี้ภาษาของกราฟที่มีรูปสามเหลี่ยมจากข้างต้น (ที่มันเห็นได้ชัดว่าในส่วนP ) ก็จะกลายเป็นปัญหาที่สมบูรณ์

และนั่นเป็นเพราะการเรียนภาษาเช่นPและNPมีการกำหนดไว้สำหรับภาษาไม่ได้สำหรับปัญหาที่เกิดขึ้น


คำตอบนี้อาจไม่เป็นประโยชน์สำหรับระดับความเข้าใจของผู้ถาม อ่านคำตอบอื่น ๆ และดูว่า Nanako กำลังดิ้นรนกับอะไร คุณคิดว่าคำตอบนี้จะช่วยเขา / เธอ?
Andres F.

คำตอบนี้อาจไม่ช่วย OP แต่แน่นอนช่วยให้ผู้อ่านอื่น ๆ (รวมอยู่ในตัวเอง)
Gabriel

4

ฉันจะพยายามให้คำจำกัดความที่ไม่เป็นทางการแก่คุณเช่นเดียวกัน

ปัญหา P: ปัญหาที่สามารถแก้ไขได้ในเวลาพหุนาม มีปัญหาที่สามารถแก้ไขได้อย่างมีประสิทธิภาพ

ปัญหา NP: ปัญหาที่สามารถตรวจสอบได้ในเวลาพหุนาม ตัวอย่างเช่น: พนักงานขายเดินทางการออกแบบวงจร ปัญหาเกี่ยวกับ NP เป็นเหมือนปริศนา (เช่นซูโดกุ) เมื่อได้รับการแก้ไขปัญหาที่ถูกต้องเราสามารถตรวจสอบวิธีแก้ไขปัญหาของเราได้อย่างรวดเร็ว แต่หากเราพยายามแก้ปัญหาจริงๆอาจต้องใช้เวลาตลอดไป

ตอนนี้ P vs NP ถามจริง ๆ ว่ามีปัญหาที่แก้ปัญหาสามารถตรวจสอบได้อย่างรวดเร็วว่าถูกต้องแล้วมีวิธีที่รวดเร็วในการแก้ปัญหาหรือไม่ ดังนั้นการเขียนในแง่คณิตศาสตร์: NP เป็นเซตย่อยของ P หรือไม่?

ตอนนี้กลับมาที่ NP ปัญหาเหล่านี้เป็นปัญหาที่ยากมากของปัญหา NP ดังนั้นหากมีวิธีที่เร็วกว่าในการแก้ปัญหา NP ให้สมบูรณ์ NP ที่สมบูรณ์จะกลายเป็นปัญหา P และ NP ที่พังทลายลงใน P

NP hard: ปัญหาที่ไม่สามารถตรวจสอบได้แม้ในเวลาพหุนามเป็น np hard ตัวอย่างเช่นการเลือกหมากรุกที่ดีที่สุดเป็นหนึ่งในนั้น

หากสิ่งที่ไม่ชัดเจนลองดูวิดีโอนี้: https://www.youtube.com/watch?v=YX40hbAHx3s

ฉันหวังว่าสิ่งนี้จะช่วยให้รูปร่างที่พร่ามัว

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