Vui lòng giải thích về khả năng quyết định của người Viking


8

Tôi đang cố gắng (bằng trực giác) hiểu hai thuật ngữ "tính quyết định" và "tính xác minh".

Tôi đã thực hiện một lượng tìm kiếm hợp lý và trải qua các văn bản khác nhau mà tôi có thể đặt tay lên. Tuy nhiên, sự hiểu biết trực quan của họ dường như thoát khỏi tôi, đặc biệt đối với người thứ hai.

Trong số nhiều định nghĩa được tìm thấy, một trong những định nghĩa sau đây được tìm thấy trong trang này , đã giải thích rõ ràng về tính quyết định đối với tôi.

Một ngôn ngữ được gọi là có thể quyết định nếu tồn tại một phương thức - bất kỳ phương thức nào - để xác định xem một từ đã cho có thuộc ngôn ngữ đó hay không.

Tuy nhiên, tôi không tìm thấy một định nghĩa song song cho tính xác minh.

Trong cuốn sách Lý thuyết tính toán của Sipser , chúng tôi tìm thấy,

P = lớp ngôn ngữ mà tư cách thành viên có thể được quyết định nhanh chóng.

NP = lớp ngôn ngữ mà thành viên có thể được xác minh nhanh chóng.

Trong ánh sáng của những điều trên, tôi muốn hiểu tính xác minh.

Vui lòng cung cấp càng nhiều ví dụ càng tốt, tại một thời điểm, tôi thử nắm bắt ý nghĩa, trong lần tiếp theo, tôi lại bị nhầm lẫn.


Bài viết này ( cs.uky.edu/~lewis/cs-heuristic/text/ class / p-np.html ) đưa ra một số ví dụ hay về vấn đề này.
Masroor

2
Những khái niệm này không bị giới hạn ở P và NP. Quay trở lại chương về khả năng tính toán và tính vô số. Và nhìn vào các định nghĩa chính thức.
Raphael

Câu trả lời:


7

Chìa khóa để hiểu ở đây là P và NP là các lớp của các vấn đề quyết định. Điều đó có nghĩa là tất cả trong số họ có câu trả lời có / không.

Vì vậy, khi chúng tôi nói một vấn đề như 3-SAT là NP-Complete, điều đó có nghĩa là đưa ra một ví dụ về 3-SAT (còn gọi là một từ có khả năng trong ngôn ngữ), không có cách nào hiệu quả để kiểm tra xem từ đó có hay không trong ngôn ngữ

Để nói một cái gì đó trong NP có nghĩa là tồn tại một số loại "bằng chứng" cho mỗi chuỗi trong ngôn ngữ, đó là đa thức về độ dài của đầu vào.

Ví dụ, trong 3-SAT, chúng tôi đang hỏi, có tồn tại việc gán True / false cho một tập hợp các biến trong công thức boolean, sao cho công thức trở thành đúng. Từ chúng tôi đang thử nghiệm là công thức boolean. Không có cách nào để tìm nếu có một giải pháp duy nhất làm cho toàn bộ công thức đúng. Nhưng, nếu chúng ta có một tập hợp các giá trị đúng / sai cho các biến, thì rất dễ kiểm tra (trong thời gian đa thức) nếu nó khiến công thức đánh giá là đúng.

Điểm mấu chốt ở đây là từ mà chúng tôi đang kiểm tra KHÔNG phải là giá trị đúng / sai cho mỗi biến. Từ chúng tôi đang kiểm tra là công thức chứa các biến và ngôn ngữ là tập hợp của tất cả các công thức boolean đánh giá là đúng.

Chúng tôi không biết cách kiểm tra hiệu quả nếu từ (công thức) có trong ngôn ngữ (có thể đánh giá là đúng), nhưng được cung cấp một tập các phép gán đúng / sai, chúng tôi có thể xác minh nếu nó đánh giá là đúng nghĩa là "bằng chứng" "Rằng từ (công thức) có trong ngôn ngữ. Do đó, vấn đề là ở NP, nhưng không được biết là ở P.

NP thực sự là lớp các vấn đề quyết định có thể giải quyết đa thức không xác định. Điều này là do, trong một máy xử lý không xác định, chúng tôi có các điểm "quyết định" trong đó chúng tôi có thể thực hiện một trong nhiều hành động và chứng nhận đa thức của chúng tôi về cơ bản chỉ là đưa ra quyết định đưa ra tại mỗi điểm quyết định.


Không có "nó" để tìm. P và NP là các lớp quyết định, vì vậy đây không phải là vấn đề tìm kiếm, đó là vấn đề có / không. Một giải pháp tiềm năng cho vấn đề có thể liên quan đến tìm kiếm, tức là nếu vấn đề hỏi "có tồn tại ...", nhưng về mặt kỹ thuật không cần phải "tìm" thứ gì đó, chỉ để kiểm tra xem một điều kiện là đúng hay sai.
jmite

Ok xin lỗi, xấu của tôi. Bạn hoàn toàn đúng.
đánh lừa

bài viết bị xóa nhờ sửa chữa của bạn. một lần nữa xin lỗi vì sai lầm của tôi
wece

Không cần phải xin lỗi!
jmite


1

giả sử bạn đưa ra một vấn đề và bạn đã hỏi tôi một giải pháp vì vậy hãy nói rằng bạn chỉ có thể kiểm tra số lượng chứng minh đa thức của tôi (nghĩa là: bạn có thể chạy chương trình máy tính hiệu quả trên bằng chứng của tôi) khi tôi gửi cho bạn bằng chứng về giải pháp của tôi bạn làm là để chạy chương trình của bạn và quyết định theo những gì đầu ra chương trình.
ví dụ: giả sử bạn hỏi tôi nếu đồ thị có 3 màu, thì việc tôi phải làm là gửi 3 màu của đồ thị, sau đó bạn kiểm tra xem tất cả các đỉnh liền kề có màu khác nhau không thì màu đó có hợp pháp không và chương trình chấm dứt với "Chấp nhận" (nếu không bằng chứng không được chấp nhận và chúng tôi chấm dứt bằng "từ chối").
đó được gọi để xác minh "nhanh chóng".
nếu bạn có thể xây dựng một "chương trình máy tính" "hiệu quả" (hoặc đơn giản là: thuật toán đa thức) cho biết nếu một đầu vào (một chuỗi có độ dài n) bằng ngôn ngữ (hoặc nếu đầu ra chương trình 1 \ "chấp nhận") thì đây là gì có nghĩa là bởi lớp phức tạp P.
ví dụ: giả sử tôi đưa cho bạn một danh sách các chuỗi (giả sử danh bạ điện thoại) và hỏi bạn về một tên mà bạn phải nói nếu nó có trong sách hay không. Một giải pháp là ném tất cả các tên và so sánh từng tên với tên đã cho, điều đó nói rằng bạn có thể giải quyết nó trong thời gian tuyến tính.
một ví dụ khác là: đưa ra một biểu đồ G = (V, E) và một cạnh e = (u, v) và bạn muốn nói nếu cạnh đó nằm trong biểu đồ.

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.