Tôi quan tâm đến câu hỏi làm thế nào tốt nhất để dạy NP-đầy đủ cho các chuyên ngành khoa học máy tính. Cụ thể, chúng ta nên dạy nó bằng cách sử dụng giảm Karp hay sử dụng giảm Turing?
Tôi cảm thấy rằng các khái niệm về tính đầy đủ và giảm NP là điều mà mọi chuyên ngành khoa học máy tính nên học hỏi. Tuy nhiên, khi giảng dạy về tính đầy đủ của NP, tôi nhận thấy rằng việc sử dụng giảm Karp có một số nhược điểm.
Trước hết, việc giảm Karp dường như gây nhầm lẫn không cần thiết cho một số sinh viên. Khái niệm trực quan về giảm là "nếu tôi có một thuật toán để giải bài toán X, thì tôi cũng có thể sử dụng nó để giải bài toán Y". Điều đó rất trực quan - nhưng nó giúp ánh xạ giảm Turing tốt hơn nhiều so với giảm Karp. Kết quả là, tôi thấy các sinh viên đang cố gắng chứng minh tính hoàn chỉnh của NP bị dẫn dắt lạc lối bởi trực giác của họ và tạo thành một bằng chứng không chính xác. Cố gắng dạy cả hai loại giảm và nhấn mạnh khía cạnh giảm Karp này đôi khi cảm thấy hơi giống như chủ nghĩa hình thức không cần thiết và chiếm thời gian lớp học không cần thiết và sự chú ý của sinh viên về những gì cảm thấy như một chi tiết kỹ thuật không cần thiết; không rõ ràng tại sao chúng ta sử dụng khái niệm giảm hạn chế hơn này.
Tôi hiểu sự khác biệt giữa giảm Karp và giảm Turing (Cook) và cách chúng dẫn đến các khái niệm khác nhau về tính đầy đủ của NP. Tôi nhận ra rằng việc giảm Karp cho chúng ta mức độ chi tiết tốt hơn giữa các lớp phức tạp. Vì vậy, đối với nghiên cứu nghiêm túc về lý thuyết phức tạp, giảm Karp rõ ràng là công cụ phù hợp. Nhưng đối với những sinh viên khoa học máy tính, những người chỉ học điều này và sẽ không bao giờ đi vào lý thuyết phức tạp, tôi không chắc liệu sự khác biệt tốt hơn này có quan trọng hay không là rất quan trọng đối với họ.
Cuối cùng, khi còn là sinh viên, tôi nhớ cảm giác bối rối khi gặp phải một vấn đề như "tautology" - ví dụ, đưa ra một công thức boolean, kiểm tra xem đó có phải là một tautology không. Điều gây nhầm lẫn là vấn đề này rõ ràng khó khăn: bất kỳ thuật toán đa thức thời gian nào cho nó đều ngụ ý rằng ; và giải quyết vấn đề này rõ ràng là khó như giải quyết vấn đề tautology. Tuy nhiên, mặc dù tautology trực giác khó như thỏa mãn, tautology không phải là NP-hard. Vâng, tôi hiểu ngày hôm nay tại sao lại như vậy, nhưng tại thời điểm đó tôi nhớ mình đã bị bối rối bởi điều này. (Điều gì đã đi qua đầu tôi một khi cuối cùng tôi đã hiểu là: Tại sao chúng ta lại phân biệt sự khác biệt giữa NP-hard và co-NP-hard? Dù sao, điều đó có vẻ giả tạo và không được thúc đẩy bởi thực tiễn. Tại sao chúng ta tập trung vào NP so với co-NP? Chúng có vẻ tự nhiên như nhau. Từ góc độ thực tế, độ cứng đồng NP dường như có những hậu quả thực tế giống như NP-độ cứng, vậy tại sao chúng ta lại bị treo lên vì sự khác biệt này? câu trả lời, nhưng là một sinh viên, tôi nhớ điều này chỉ làm cho chủ đề cảm thấy phức tạp hơn và động lực kém hơn.)
Vì vậy, câu hỏi của tôi là này. Khi chúng tôi dạy tính đầy đủ NP cho học sinh, tốt hơn là dạy sử dụng giảm Karp hoặc giảm Turing? Có ai đã thử dạy khái niệm về tính đầy đủ NP bằng cách sử dụng giảm Turing chưa? Nếu vậy, làm thế nào rồi? Sẽ có bất kỳ cạm bẫy hoặc nhược điểm không rõ ràng nào nếu chúng ta dạy các khái niệm bằng cách sử dụng giảm Turing và bỏ qua các vấn đề khái niệm liên quan đến giảm Karp?
Liên quan: xem ở đây và đây , trong đó đề cập rằng lý do tại sao chúng tôi sử dụng giảm Karp trong tài liệu là vì nó cho phép chúng tôi phân biệt giữa độ cứng NP và độ cứng đồng NP. Tuy nhiên, dường như không đưa ra bất kỳ câu trả lời nào tập trung vào quan điểm sư phạm về việc liệu khả năng này có quan trọng đối với mục tiêu học tập của một lớp thuật toán nên được áp dụng bởi mọi chuyên ngành CS hay không. Xem thêm ở đây trên cstheory.SE , trong đó có một cuộc thảo luận tương tự.