ฉันสนใจในคำถามของวิธีที่ดีที่สุดในการสอนปัญหาความสมบูรณ์ของวิชาเอกวิทยาการคอมพิวเตอร์ โดยเฉพาะอย่างยิ่งเราควรสอนโดยใช้การลดคาร์ปหรือการใช้การลดทอนของทัวริง
ฉันรู้สึกว่าแนวคิดของความสมบูรณ์แบบ NP และการลดลงเป็นสิ่งที่วิทยาศาสตร์คอมพิวเตอร์ทุกคนควรเรียนรู้ อย่างไรก็ตามเมื่อสอน NP-ครบถ้วนฉันได้สังเกตเห็นว่าการใช้ Karp Reduction มีข้อเสีย
ก่อนอื่นการลดคาร์ปดูเหมือนจะทำให้นักเรียนบางคนสับสนโดยไม่จำเป็น ความคิดที่เข้าใจง่ายของการลดคือ "ถ้าฉันมีอัลกอริทึมในการแก้ปัญหา X จากนั้นฉันก็สามารถใช้มันเพื่อแก้ปัญหา Y ได้เช่นกัน" นั่นเป็นเรื่องที่เข้าใจได้ง่ายมาก - แต่แผนที่ดีกว่าการทัวริงการลดลงมากกว่าการลดคาร์ป เป็นผลให้ฉันเห็นนักเรียนที่พยายามพิสูจน์ความสมบูรณ์แบบของ NP ถูกทำให้หลงผิดโดยสัญชาตญาณและพิสูจน์ข้อผิดพลาด พยายามที่จะสอนการลดลงทั้งสองประเภทและเน้นในแง่มุมของการลดคาร์ปนี้บางครั้งก็รู้สึกเหมือนเป็นพิธีการที่ไม่จำเป็นและใช้เวลาเรียนไม่จำเป็นและให้ความสนใจกับนักเรียนในสิ่งที่รู้สึกเหมือนรายละเอียดทางเทคนิค มันไม่ชัดเจนเลยว่าทำไมเราใช้ความคิดที่ จำกัด มากขึ้นในการลด
ฉันเข้าใจความแตกต่างระหว่างการลด Karp และการลด Turing (Cook) และวิธีที่พวกเขานำไปสู่แนวคิดที่แตกต่างของความสมบูรณ์แบบ NP ฉันตระหนักว่าการลดคาร์ปทำให้เรามีความแตกต่างที่ละเอียดยิ่งขึ้นระหว่างคลาสความซับซ้อน ดังนั้นสำหรับการศึกษาทฤษฎีความซับซ้อนอย่างจริงจังการลดคาร์ปจึงเป็นเครื่องมือที่เหมาะสม แต่สำหรับนักศึกษาวิทยาศาสตร์คอมพิวเตอร์ที่เพิ่งเรียนรู้สิ่งนี้และไม่เคยไปสู่ทฤษฎีความซับซ้อนฉันไม่แน่ใจว่าการแยกความแตกต่างที่ดีกว่านี้มีความสำคัญอย่างยิ่งหรือไม่
ในที่สุดในฐานะนักเรียนฉันจำได้ว่ารู้สึกงุนงงเมื่อฉันพบปัญหาเช่น "ซ้ำซาก" - เช่นกำหนดสูตรบูลีนตรวจสอบว่าเป็นวิชาซ้ำซาก สิ่งที่สับสนคือปัญหานี้ชัดเจนยาก: อัลกอริธึมเวลาพหุนามใด ๆ สำหรับมันจะบ่งบอกว่า; เห็นได้ชัดว่าการแก้ปัญหานี้ยากพอ ๆ กับการแก้ไขปัญหาซ้ำซาก อย่างไรก็ตามถึงแม้ว่าการหยั่งรู้เชิงสัญชาตญาณนั้นยากพอ ๆ กับความน่าพอใจ ใช่ฉันเข้าใจในวันนี้ว่าทำไมถึงเป็นเช่นนี้ แต่ในเวลานั้นฉันจำได้ว่ากำลังงงกับเรื่องนี้ (สิ่งที่ผ่านเข้ามาในหัวของฉันเมื่อฉันเข้าใจในที่สุดก็คือ: ทำไมเราถึงแยกความแตกต่างระหว่าง NP-hard และ co-NP-hard ต่อไป? ที่ดูเหมือนว่าประดิษฐ์และไม่ได้รับแรงบันดาลใจจากการฝึกฝนมากนัก มากกว่า co-NP พวกเขาดูเหมือนเป็นธรรมชาติเท่า ๆ กันจากมุมมองที่ปฏิบัติ co-NP- ความแข็งดูเหมือนว่าจะมีผลในทางปฏิบัติเช่นเดียวกับ NP-hardness ดังนั้นทำไมเราถึงถูกวางลงบนความแตกต่างนี้ใช่ฉันรู้ คำตอบ แต่ในฐานะนักเรียนฉันจำได้ว่าสิ่งนี้ทำให้เรื่องรู้สึกมีความลับมากขึ้นและมีแรงจูงใจต่ำ)
ดังนั้นคำถามของฉันคือสิ่งนี้ เมื่อเราสอนความสมบูรณ์แบบ NP ให้กับนักเรียนจะดีกว่าหรือไม่ที่จะสอนโดยใช้การลด Karp หรือการลดทอน มีใครลองสอนแนวคิดเรื่องความสมบูรณ์แบบโดยใช้การลดทอน ถ้าเป็นเช่นนั้นมันเป็นอย่างไร จะมีข้อผิดพลาดหรือข้อเสียที่ไม่ชัดเจนหรือไม่หากเราสอนแนวคิดโดยใช้การลดทัวริงและข้ามประเด็นเกี่ยวกับแนวคิดที่เกี่ยวข้องกับการลดลงของคาร์ป
ที่เกี่ยวข้อง: ดูที่นี่และที่นี่ซึ่งกล่าวถึงเหตุผลที่ว่าทำไมเราถึงใช้การลดลงของ Karp ในวรรณคดีเพราะมันช่วยให้เราสามารถแยกแยะความแตกต่างระหว่างความกระด้างและความแข็งร่วม อย่างไรก็ตามดูเหมือนว่าจะไม่ได้ให้คำตอบใด ๆ ที่มุ่งเน้นไปที่มุมมองการสอนว่าความสามารถนี้มีความสำคัญต่อวัตถุประสงค์การเรียนรู้ของคลาสอัลกอริทึมที่ควรได้รับการปฏิบัติโดย CS ทุกสาขาหรือไม่ ดูเพิ่มเติมได้ที่นี่ใน cstheory.SEซึ่งมีการสนทนาที่คล้ายกัน