Dạy hoàn thiện NP - Giảm Turing so với giảm Karp


25

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 P=NP; 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đâ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ự.


Quan sát động lực: Turing-giảm cho một vấn đề trong NP không được biết là ngụ ý . XNP

1
@RickyDemer, đã hiểu - nhưng khi chúng tôi cố gắng chứng minh một vấn đề khó khăn, chúng tôi không thực sự quan tâm liệu có ở NP hay không, vì vậy điều đó không thúc đẩy tôi siêu hiệu quả. Và, cho thấy một vấn đề khó là ứng dụng chính của NP, tính đầy đủ NP, độ cứng NP, v.v.X
DW

1
Tôi không thấy nhiều sự khác biệt. Ý tưởng Cook "kêu gọi giải quyết các vấn đề khác" là tự nhiên đối với lập trình , nhưng đối với những người có nền tảng trừu tượng hơn (một số toán học rời rạc dưới vành đai của họ) thì ánh xạ giữa các trường hợp vấn đề cũng là điều tự nhiên.
vonbrand

Câu trả lời:


10

Tôi sẽ nói rất chắc chắn dạy bằng cách sử dụng giảm Karp (nhiều người). Bất kể lợi ích của việc sử dụng giảm Turing nhiều lần (Cook), giảm Karp là mô hình chuẩn.

Mọi người đều sử dụng Karp và cạm bẫy chính của việc dạy Cook là bạn sẽ kết thúc với cả một lớp học sinh bị bối rối bệnh lý mỗi khi đọc sách giáo khoa hoặc cố gắng thảo luận về chủ đề này với bất kỳ ai không được bạn dạy.

k


7

Tốt hơn là dạy cả hai ! Một chuyên ngành khoa học máy tính nên biết về cả hai.

Tôi không biết bất cứ ai sử dụng giảm Cook để dạy tính đầy đủ NP, các nhà lý thuyết phức tạp rõ ràng là không, các nhà lý thuyết không phức tạp thường tuân theo định nghĩa chuẩn từ bài báo của Karp và được sử dụng trong tất cả các sách giáo khoa (mà tôi biết). Nó sẽ gây ra nhiều nhầm lẫn cho họ sau này nếu bạn không tuân theo thuật ngữ tiêu chuẩn.

Giảm bớt Cook về cơ bản là giải quyết vấn đề bằng cách sử dụng chương trình con hộp đen. Họ rất dễ giải thích và động viên nếu sinh viên của bạn có một số kinh nghiệm lập trình. Chúng rất cần thiết vì không có phần giảm Cook, bạn không thể thảo luận về việc giảm giữa các vấn đề tìm kiếm, vấn đề tối ưu hóa, v.v.

NPNPPNPNP

NPcoNPNPNPNPPNP

xAf(x)B


2
NPNPNPNP

@DW bạn có nghĩa là "Nấu" thay cho (thứ hai và thứ ba) "Karp" trong bình luận của bạn? Bạn vẫn có thể chứng minh rằng các vấn đề khó sử dụng Cook, đó không phải là vấn đề. Vấn đề là NP không được đóng dưới chúng, tức là giảm Cook không bảo tồn hiệu quả tính xác thực của các vấn đề.
Kaveh

2
Rất tiếc, vâng, ý tôi là Cook, không phải Karp. (argh!) Tôi hiểu rằng NP không bị đóng dưới mức giảm Cook, nhưng bạn có thể giải thích lý do tại sao đó là một vấn đề, từ quan điểm về cách chúng tôi dạy thuật toán cho sinh viên đại học? Những vấn đề sư phạm hoặc khái niệm nào tạo ra? Điều gì sẽ dẫn đến hậu quả tiêu cực nếu chúng ta dạy các thuật toán như vậy và chỉ thừa nhận / chấp nhận rằng NP không bị đóng dưới mức giảm Cook? Ví dụ, nó sẽ gây ra một số hiểu lầm khái niệm có vấn đề trong học sinh?
DW

-3

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".

Một cách thú vị để tiếp cận vấn đề giảng dạy cụ thể này là nhận ra rằng tính hoàn chỉnh của NP có những điểm tương đồng và tương đồng với tính không ổn định cũng không trực quan. học sinh vào lớp chỉ bao giờ nghe nói về các thuật toán dừng lại. nhưng định lý nguyên tắc của TCS là các vấn đề tồn tại mà không có giải pháp bảo đảm, tức là vấn đề tạm dừng. và trên thực tế, những vấn đề không thể giải quyết được có thể bắt đầu nhìn xa khỏi sự giả tạo, và rõ ràng là hơi phổ biến.

vì vậy, lý thuyết đang cho chúng ta biết cách xem tính toán một cách cơ bản như một quá trình có thể trả về một câu trả lời trong một số trường hợp. trong các trường hợp khác, nó có thể không. đối với tính đầy đủ và tính quyết định của NP, câu hỏi cơ bản và chung nhất là "có thuật toán nào trả về Ythời gian P" không. nhưng điều này không nói gì về một thuật toán trả về Nthời gian P. một thuật toán có thể trả về Ythời gian P cho một trường hợp nhưng không trả về câu trả lời trong các trường hợp khác. lý thuyết đang nói với chúng ta rằng thực sự có một sự khác biệt rõ rệt ở đây mà chúng ta phải hết sức chú ý. nếu nó không trực quan, điều đó có nghĩa là trực giác cơ bản của chúng ta cần được điều chỉnh lại (như thường thấy trong giảng dạy lý thuyết).


nói cách khác, rõ ràng có thể tồn tại các thuật toán trả về Ythời gian P nhưng cũng mất nhiều thời gian hơn thời gian P để trả về Nvà lý thuyết dựa trên / định hướng / tập trung vào khoảng thời gian cần trả lời Y.
vzn

1
Bất kỳ sinh viên nào đã viết hơn năm chương trình đều quen thuộc với khái niệm "một thuật toán không dừng lại" từ kinh nghiệm cá nhân trực tiếp.
David Richerby

chỉ cần cố gắng xác định coNP theo cách trực quan hơn theo yêu cầu dựa trên kinh nghiệm / tương tự hàng ngày. bản thân tôi cũng luôn thấy nó không trực quan. Có ai có cách tốt hơn không?
vzn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.