หมายเหตุ: ฉันยังไม่ได้ตรวจสอบคำตอบอย่างรอบคอบและยังมีบางส่วนที่ขาดหายไปที่จะเขียนพิจารณาเป็นร่างแรก
คำตอบนี้มีไว้สำหรับคนที่ไม่ได้เป็นนักวิจัยในทฤษฎีความซับซ้อนหรือสาขาที่เกี่ยวข้อง หากคุณเป็นนักทฤษฎีที่ซับซ้อนและได้อ่านคำตอบโปรดแจ้งให้เราทราบหากคุณสังเกตเห็นปัญหาใด ๆ หรือมีความคิดที่จะปรับปรุงคำตอบ
คุณจะหาโซลูชันที่อ้างสิทธิ์ได้ของ P vs. NP
- มีหน้า P-versus-NPซึ่งมีรายการการเรียกร้องดังกล่าว
- บทความที่อ้างว่าเพื่อแก้ไขคำถามที่จะโพสต์ประจำในarXiv
รายการอื่น ๆ ของวิธีที่จะไม่แก้ P กับ NP
แลนซ์ฟอ์ตนว์, คุณคิดว่าคุณตกลง P Verus NP 2009
สกอตต์ Aaronson, แปดสัญญาณ A อ้าง P ≠ NP พิสูจน์ผิด , 2010
หน้า Polymath สำหรับบทความของ Deolalikarซึ่งส่วนการอ่านเพิ่มเติมมีรายการอ้างอิงที่ดีเกี่ยวกับปัญหา
วิธีที่จะไม่เข้าหา P กับ NP
ให้ฉันพูดถึง "วิธีการไม่เข้าหา P กับ NP" ไม่ใช่ในแง่ของความคิดที่จะไม่ทำงาน แต่ในแง่ทั่วไป P vs. NP เป็นปัญหาง่าย ๆ ที่รัฐ (ดูคำตอบของฉันที่นี่ ):
NP = P:สำหรับทุกปัญหาการตัดสินใจด้วยอัลกอริธึมตรวจสอบเวลาพหุนามมีอัลกอริทึมเวลาพหุนาม
หรือเทียบเท่า
มีอัลกอริทึมเวลาพหุนามสำหรับ SAT
SAT สามารถเปลี่ยนอื่น ๆปัญหา NP-สมบูรณ์
.
บ่อยครั้งที่ผู้คนให้ความสำคัญและ overphilosophize ปัญหาและพูดเกินจริงถึงความสำคัญของปัญหา (ตามที่ระบุไว้ข้างต้น) ข้อความดังกล่าวมักจะหมายถึงการให้สัญชาตญาณ แต่พวกเขาไม่ได้อยู่ในทางใดทางหนึ่งแทนคำสั่งทางคณิตศาสตร์ที่แท้จริงของปัญหา
ประสิทธิภาพเชิงทฤษฎีไม่เหมือนกับความเป็นไปได้ในการปฏิบัติ
ให้ฉันก่อนด้วยผลจริงที่เกินจริง
I.เป็นไปได้ที่ P = NP แต่มันไม่ได้ช่วยปัญหาใด ๆ ในทางปฏิบัติ!
ว่าตัวอย่างที่ SAT อยู่ใน P แต่ขั้นตอนวิธีที่เร็วที่สุดสำหรับเวลาทำงานของมันคือ
{128}} อัลกอริทึมนี้ไม่ได้ใช้งานจริง2264n65536+22128
ครั้งที่สอง เป็นไปได้ว่า P NP และเราสามารถแก้ปัญหา NP-สมบูรณ์ได้อย่างมีประสิทธิภาพ≠
ว่าตัวอย่างที่ SAT ไม่ได้อยู่ใน P แต่มีขั้นตอนวิธีการกับการทำงานครั้งที่n}nlg∗lg∗n
ในการป้อนข้อมูลที่จะทำให้คุณต้องใช้อิเล็กตรอนที่คิดว่ามีอยู่ในจักรวาล ดังนั้นตัวแทนเป็นหลัก22lg∗n>62
ประเด็นหลักที่นี่คือ P คือแบบจำลองนามธรรมอย่างง่าย ๆ ของการคำนวณที่มีประสิทธิภาพความซับซ้อนของกรณีที่แย่ที่สุดคือแบบจำลองนามธรรมง่าย ๆ ของการประมาณราคาของการคำนวณเป็นต้นสิ่งเหล่านี้คือ abstractions แต่ไม่มีใครในทางปฏิบัติ เช่นเดียวกับใน (I) ด้านบนว่าเป็นอัลกอริทึมที่มีประสิทธิภาพจริงๆ P เป็นรูปแบบนามธรรมที่ดีมีคุณสมบัติที่ดีทำให้ปัญหาทางเทคนิคง่ายและเป็นประโยชน์อย่างหนึ่ง อย่างไรก็ตามเช่นเดียวกับสิ่งที่เป็นนามธรรมทางคณิตศาสตร์มันซ่อนรายละเอียดว่าในทางปฏิบัติเราอาจสนใจ มีหลายรุ่นที่ได้รับการปรับปรุงให้ดีขึ้น แต่รูปแบบที่ซับซ้อนมากขึ้นก็จะดูไม่ค่อยดีเท่าที่ควร
สิ่งที่ผู้คนเกี่ยวกับการดูแลในทางปฏิบัติคือการคำนวณคำตอบของปัญหาสำหรับกรณีที่พวกเขาดูแลเกี่ยวกับการใช้ที่เหมาะสมปริมาณของทรัพยากร มีงานที่ต้องทำและควรนำมาพิจารณาด้วย
การพยายามค้นหาอัลกอริธึมที่ดีกว่าสำหรับกรณีที่ใช้งานจริงของปัญหา NP-hard เป็นความพยายามที่น่าสนใจและคุ้มค่า มีอัลกอริทึมฮิวริสติกแบบแก้ตัวแก้ SAT ที่ใช้ในอุตสาหกรรมและสามารถแก้ปัญหากรณีการใช้งานจริงของ SAT ด้วยตัวแปรหลายล้านตัว มีแม้กระทั่งเป็นการแข่งขันระหว่างประเทศ SAT
(แต่ก็มีตัวอย่างที่เป็นรูปธรรมเล็ก ๆ ที่อัลกอริธึมทั้งหมดเหล่านี้ล้มเหลวและล้มเหลวค่อนข้างแย่จริง ๆ แล้วเราสามารถพิสูจน์ได้ว่านักแก้ปัญหา SAT ที่ทันสมัยทุกคนต้องใช้เวลาชี้แจงเพื่อแก้ปัญหาตัวอย่างง่าย ๆ เช่นหลักการ Pigeonhole )
โปรดทราบว่าไม่สามารถรับความถูกต้องและเวลาใช้งานของโปรแกรมได้จากการรันโปรแกรมในกรณีต่างๆ ไม่ว่าคุณจะลองกี่ครั้งก็ไม่เพียงพอ มีอินพุตที่เป็นไปได้มากมายและคุณต้องแสดงความถูกต้องและประสิทธิภาพ (เช่นเวลาทำงานคือพหุนาม) ของโปรแกรมสำหรับพวกเขาทั้งหมด ในระยะสั้นคุณต้องพิสูจน์ทางคณิตศาสตร์ของความถูกต้องและมีประสิทธิภาพ หากคุณไม่ทราบว่าอะไรคือข้อพิสูจน์ทางคณิตศาสตร์คุณควรเรียนรู้คณิตศาสตร์ขั้นพื้นฐานก่อน (อ่านตำราคณิตศาสตร์แบบไม่ต่อเนื่องคณิตศาสตร์ / combinatorics / กราฟทฤษฎีเหล่านี้เป็นหัวข้อที่ดีที่จะเรียนรู้เกี่ยวกับสิ่งที่ถือว่าเป็นหลักฐานทางคณิตศาสตร์)
ยังต้องระมัดระวังเกี่ยวกับการเรียกร้องอื่น ๆ เกี่ยวกับ P กับ NP และผลของคำตอบ การอ้างสิทธิ์ดังกล่าวมักขึ้นอยู่กับความเรียบง่ายที่คล้ายคลึงกัน
นักทฤษฎีที่ซับซ้อนไม่สนใจคำตอบของ P กับ NP!
ฉันพูดเกินจริงไปเล็กน้อย แน่นอนเราสนใจคำตอบของ P vs. NP แต่เราใส่ใจในบริบท P vs. NP เป็นปัญหาสำคัญของเรา แต่มันไม่ใช่เป้าหมายสูงสุด มันเป็นปัญหาที่ง่ายต่อการรัฐมันเกี่ยวข้องกับแนวคิดพื้นฐานมากมายมันมีประโยชน์สำหรับการอธิบายประเภทของคำถามที่เราสนใจในคนที่ไม่คุ้นเคยกับหัวข้อ แต่เราไม่หาคำตอบใช่ / ไม่ใช่หนึ่งบิต
เราแสวงหาความรู้ความเข้าใจในลักษณะของการคำนวณที่มีประสิทธิภาพ เราเชื่อว่าการแก้ไขคำถามจะมาพร้อมกับความเข้าใจเช่นนี้และนั่นคือเหตุผลที่แท้จริงที่เราใส่ใจ มันเป็นส่วนหนึ่งของการวิจัยขนาดใหญ่ หากคุณต้องการที่จะได้ลิ้มรสของสิ่งที่เราจะมีลักษณะที่ซับซ้อนที่ดีทฤษฎีตำราเรียนเช่นร่าและบาราคของ " ทฤษฎีความซับซ้อน: วิธีการที่ทันสมัย " ( ร่างฉบับ )
ให้เราสมมติว่ามีใครบางคนที่มาพร้อมกับการพิสูจน์อย่างเป็นทางการที่สมบูรณ์ของ P NP และเราสามารถตรวจสอบความถูกต้องได้อย่างมั่นใจโดยเลือกและถอดรหัสหลักฐานการพิสูจน์สองสามบิต (ดูZero-Knowledge ProofและPCP theorem ) . ดังนั้นเราสามารถตรวจสอบข้อเรียกร้องที่มีความน่าจะเป็นของข้อผิดพลาดน้อยกว่าที่ดาวตกชนบ้านเราเราค่อนข้างแน่ใจว่าหลักฐานนั้นถูกต้องและ P = NP แต่เราไม่ทราบหลักฐาน มันจะไม่สร้างความพึงพอใจหรือตื่นเต้นสำหรับเรามากนัก การพิสูจน์อย่างเป็นทางการจะไม่เป็นเช่นนั้นที่น่าพอใจ สิ่งที่เราแสวงหาไม่ใช่ข้อพิสูจน์อย่างเป็นทางการสิ่งที่เราแสวงหาคือความเข้าใจ≠
ในระยะสั้นจากมุมมองของนักทฤษฎีที่ซับซ้อน
P vs. NP ไม่ใช่ปริศนาที่มีคำตอบใช่ / ไม่ใช่ เราค้นหาคำตอบของ P กับ NP เพราะเราคิดว่ามันจะเข้าใจธรรมชาติของการคำนวณที่มีประสิทธิภาพมากขึ้น คำตอบที่ไม่มีความก้าวหน้าที่สำคัญในความเข้าใจของเรานั้นไม่น่าสนใจมาก
มีหลายครั้งเกินไปที่ผู้ที่ไม่ใช่ผู้เชี่ยวชาญได้อ้างวิธีแก้ปัญหาสำหรับ P กับ NP และการอ้างสิทธิ์เหล่านั้นมักประสบปัญหาที่พวกเขาจะไม่ทำถ้าพวกเขาอ่านตำรามาตรฐานเกี่ยวกับทฤษฎีความซับซ้อน
ปัญหาทั่วไป P = NP
การอ้างสิทธิ์ของ P = NP ดูเหมือนจะเป็นเรื่องธรรมดามากขึ้น ฉันคิดว่าต่อไปนี้เป็นประเภทที่พบบ่อยที่สุด บางคนมีความคิดและเขียนโปรแกรมและทดสอบในบางกรณีและคิดว่ามันเป็นเวลาพหุนามและแก้ปัญหา NP-complete ได้อย่างถูกต้อง ดังที่ฉันได้อธิบายไว้ข้างต้นจำนวนการทดสอบจะแสดง P = NP P = NP ต้องการการพิสูจน์ทางคณิตศาสตร์ไม่ใช่แค่โปรแกรมที่ดูเหมือนว่าจะแก้ปัญหา NP-complete ในเวลาพหุนาม
ความพยายามเหล่านี้มักประสบปัญหาหนึ่งในสองประเด็น:
I. อัลกอริทึมไม่ใช่เวลาพหุนามจริงๆ
ครั้งที่สอง อัลกอริทึมไม่สามารถแก้ไขอินสแตนซ์ทั้งหมดได้อย่างถูกต้อง
อาร์กิวเมนต์P NP ไม่ถูกต้อง≠
[จะเขียน]
วิธีตรวจสอบว่าอัลกอริทึมของคุณใช้งานไม่ได้จริง ๆ
คุณไม่สามารถแสดงให้เห็นว่าอัลกอริทึมของคุณทำงานอย่างถูกต้องโดยการทดสอบ แต่คุณสามารถแสดงว่ามันทำงานไม่ถูกต้องโดยการทดสอบ! ดังนั้นนี่คือวิธีที่คุณสามารถมั่นใจได้ว่าอัลกอริทึมของคุณไม่ถูกต้องหากคุณยินดีที่จะทำงาน
ก่อนอื่นให้เขียนโปรแกรมเพื่อแปลงอินสแตนซ์ของ SAT (ในรูปแบบ CNF มาตรฐาน) เป็นปัญหา NP-hard ที่คุณกำลังแก้ไข SAT เป็นหนึ่งในปัญหาที่ยากที่สุดของการศึกษา NP และการลดลงของปัญหาอื่น ๆ สู่ SAT นั้นเป็นเรื่องง่าย ประการที่สองนำตัวอย่างที่นักแก้ปัญหา SAT ต้องเผชิญกับ (เช่นนำตัวอย่างจากการแข่งขัน SAT) และป้อนเข้าสู่อัลกอริทึมของคุณและดูว่าอัลกอริทึมของคุณทำงานอย่างไร ลองใช้อินสแตนซ์ที่รู้จักกันดีอย่างหนักเช่นหลักการ Pigeonhole (และอย่าโกงโดยการเข้ารหัสอย่างหนักเป็นกรณีพิเศษ), อินสแตนซ์เข้ารหัส (เช่นRSA Factoring Challenges ), อินสแตนซ์ k-SAT แบบสุ่มใกล้ถึงขีด จำกัดฯลฯ
ในทำนองเดียวกันคุณสามารถตรวจสอบว่าอัลกอริทึมของคุณไม่มีประสิทธิภาพ เช่นถ้าคุณคิดว่าเวลาในการทำงานของอัลกอริธึมไม่ใช่แต่ต้องใช้เวลาหลายวันในการแก้ตัวอย่างของขนาดที่พูด 1,000 แก้ไขขอบเขตบนสุดของพหุนามกรณีเลวร้ายที่สุดที่คุณคิดว่าอัลกอริธึมมี ทำอินสแตนซ์และประมาณเวลาที่อัลกอริทึมของคุณจะใช้เพื่อแก้ปัญหาและตรวจสอบว่าตรงกับที่คุณประมาณ10n2
วิธีตรวจสอบความคิดอัลกอริทึม P = NP ของคุณไม่สามารถทำงานได้
หากคุณทำสิ่งเหล่านี้คุณจะมั่นใจได้ว่าอัลกอริทึมของคุณไม่ทำงาน (ถ้าใช้งานได้ดีกว่านักแก้ปัญหา SAT แล้วแข่งขันในการแข่งขันครั้งต่อไปและผู้คนจำนวนมากจะสนใจศึกษาอัลกอริทึมและแนวคิดของคุณ)
ตอนนี้คุณรู้ว่ามันใช้งานไม่ได้ แต่ก็ยังไม่เพียงพอ คุณต้องการที่จะรู้ว่าทำไม
เหตุผลที่อัลกอริทึมของฉันไม่ทำงานเป็นปัญหาเล็ก ๆ ที่สามารถแก้ไขได้หรือมีเหตุผลพื้นฐานว่าทำไมมันไม่สามารถทำงานได้
บางครั้งปัญหาของอัลกอริทึมนั้นง่ายและเราสามารถระบุได้ว่าอะไรผิดปกติทางแนวคิด ผลลัพธ์ที่ดีที่สุดคือคุณเข้าใจเหตุผลที่ความคิดของคุณไม่สามารถทำงานได้ บ่อยครั้งที่ความคิดของคุณไม่ได้ผล แต่คุณไม่สามารถหาสาเหตุได้ ในกรณีนั้นโปรดทราบ:
การเข้าใจว่าทำไมความคิดบางอย่างไม่สามารถทำงานได้ยากขึ้นที่การแก้ P กับ NP!
หากคุณสามารถทำให้ความคิดของคุณเป็นทางการมากพอคุณอาจจะสามารถพิสูจน์ข้อ จำกัด ของความคิดเฉพาะ (เช่นมีผลลัพธ์ที่บอกว่าการทำแบบเฉพาะของอัลกอริทึมโลภไม่สามารถแก้ปัญหา NP-complete) อย่างไรก็ตามมันก็ยิ่งยากขึ้นและคุณไม่มีโอกาสมากนักถ้าคุณยังไม่ได้อ่านตำราทฤษฎีความซับซ้อนมาตรฐาน
บางครั้งไม่มีแนวคิดทางแนวคิดที่ชัดเจนว่าทำไมอัลกอริธึมจึงควรใช้งานนั่นคือขึ้นอยู่กับฮิวริสติกที่เข้าใจไม่ได้ หากคุณไม่มีแนวคิดที่ชัดเจนว่าทำไมอัลกอริธึมของคุณจึงควรใช้งานคุณอาจไม่มีโอกาสเข้าใจว่าทำไมมันถึงไม่ได้!
ปัญหาทั่วไปเกี่ยวกับการเรียกร้องP NP≠
แม้ว่าผู้เชี่ยวชาญส่วนใหญ่คิดว่า P NP มีแนวโน้มมากกว่า P = NP แต่การอ้างสิทธิ์ดังกล่าวดูเหมือนจะน้อยกว่าทั่วไป เหตุผลก็คือการพิสูจน์ขอบเขตล่างดูเหมือนว่าจะเป็นงานที่หนักกว่าการออกแบบอัลกอริธึม (แต่บ่อยครั้งที่พิสูจน์ขอบเขตล่างและขอบเขตบนสัมพันธ์กันโดยเนื้อแท้ )≠
ปัญหาที่ 1: ผู้เขียนไม่ทราบคำจำกัดความของ P และ NP หรือแย่กว่านั้นคือไม่เข้าใจว่าอะไรคือข้อพิสูจน์ทางคณิตศาสตร์ เนื่องจากผู้เขียนขาดการฝึกอบรมทางคณิตศาสตร์ขั้นพื้นฐานเขาไม่เข้าใจเมื่อเขาได้รับการบอกในสิ่งที่เขานำเสนอไม่ใช่ข้อพิสูจน์ (เช่นขั้นตอนที่ไม่ได้ทำตามก่อนหน้านี้)
ปัญหาที่ 2: ผู้เขียนสับสนว่า "เราไม่รู้ว่า" กับ "ความเป็นไปไม่ได้ทางคณิตศาสตร์" ตัวอย่างเช่นพวกเขาใช้สมมติฐานที่ไม่ยุติธรรมหลายประการและเมื่อถูกถามว่า "ทำไมข้อความนี้ถึงเป็นจริง?" พวกเขาตอบว่า "จะเป็นเท็จได้อย่างไร" สิ่งหนึ่งที่พบได้ทั่วไปคือการสมมติว่าโปรแกรมใด ๆ ที่แก้ปัญหาจะต้องทำตามขั้นตอนพิเศษเช่นต้องคำนวณค่ากลางโดยเฉพาะเพราะเขาไม่สามารถคิดวิธีอื่นในการแก้ปัญหาได้
[จะแล้วเสร็จ]
อาร์กิวเมนต์P NP ไม่ถูกต้อง≠
[จะเขียน]
วิธีการตรวจสอบแนวคิด P NP ของคุณไม่สามารถทำงานได้≠
หากการเรียกร้องไม่ได้รับความเดือดร้อนจากปัญหาพื้นฐานเหล่านี้การปฏิเสธนั้นจะยากขึ้น ในระดับแรกหนึ่งสามารถค้นหาขั้นตอนที่ไม่ถูกต้องในการโต้แย้ง คำตอบทั่วไปจากผู้เขียนคือฉันสามารถแก้ไขได้และสิ่งนี้กลับไปกลับมา เช่นเดียวกับการแก้ปัญหา P = NP มันมักจะยากที่จะหาปัญหาพื้นฐานด้วยความคิดที่สามารถแสดงว่ามันไม่สามารถทำงานได้โดยเฉพาะอย่างยิ่งเมื่อความคิดของตัวเองเป็นทางการ
ในกรณีที่ดีที่สุดถ้าเราสามารถ formalizes ความคิดและระบุอุปสรรคที่แสดงให้เห็นความคิดที่ไม่สามารถทำงานที่เราได้รับการพิสูจน์ผลอุปสรรคใหม่ (นี้เป็นวิธีที่พยายามที่จะพิสูจน์ P NP ใช้วงจรตะกั่วต่ำกว่าขอบเขตที่จะพิสูจน์ธรรมชาติอุปสรรค )≠