Định nghĩa của


248

Tôi đang tham gia một khóa học về điện toánsự phức tạp , và tôi không thể hiểu những thuật ngữ này có nghĩa gì.

Tất cả những gì tôi biết là NP là tập con của NP-perfect, là tập con của NP-hard, nhưng tôi không biết ý nghĩa thực sự của chúng là gì. Wikipedia cũng không giúp được gì nhiều, vì những lời giải thích vẫn còn quá cao.


6
Đó là một đối tượng chính thức với một định nghĩa chính thức. Tôi đã tìm thấy hầu hết các giải thích "đơn giản" là thiếu. Nếu bạn gặp vấn đề trong việc hiểu các định nghĩa, bạn đang làm gì trong một lớp về lý thuyết phức tạp? (Câu hỏi nghiêm túc.) Nhân tiện, Wikipedia không phải là tài liệu tham khảo hay cho TCS.
Raphael

17
Không phải tất cả những gì bạn biết là đúng: NPC (NP hoàn thành) là một tập hợp con của NP, không phải là cách khác. Tính đầy đủ luôn bao gồm là một yếu tố của lớp mà vấn đề đã hoàn thành. Hơn nữa, NP không phải là tập con của NP-hard, vì không phải mọi vấn đề trong NP đều khó.
frafl

5
@frafl: "không phải mọi vấn đề trong NP đều khó" - vẫn còn được hiển thị.
Raphael

3
@Raphael: Điều đó thực sự phụ thuộc vào loại giảm mà bạn sử dụng. Tôi nghĩ thời gian đa thức nhiều một giảm, nơi . NPC
frafl

Câu trả lời:


365

Tôi nghĩ rằng các bài viết Wikipedia P , NPP so với NP là khá tốt. Vẫn đây là những gì tôi sẽ nói: Phần I , Phần II

[Tôi sẽ sử dụng các nhận xét bên trong ngoặc để thảo luận về một số chi tiết kỹ thuật mà bạn có thể bỏ qua nếu muốn.]


Phần I

Vấn đề quyết định

Có nhiều loại vấn đề tính toán. Tuy nhiên, trong phần giới thiệu về khóa học lý thuyết phức tạp tính toán, việc tập trung vào vấn đề quyết định sẽ dễ dàng hơn , tức là các vấn đề trong đó câu trả lời là CÓ hoặc KHÔNG. Có nhiều loại vấn đề tính toán khác nhưng hầu hết các câu hỏi về chúng có thể được giảm xuống thành các câu hỏi tương tự về các vấn đề quyết định. Hơn nữa, vấn đề quyết định rất đơn giản. Do đó, trong phần giới thiệu về khóa học lý thuyết phức tạp tính toán, chúng tôi tập trung vào nghiên cứu các vấn đề quyết định.

Chúng tôi có thể xác định một vấn đề quyết định với tập hợp con của đầu vào có câu trả lời CÓ. Điều này đơn giản ký hiệu và cho phép chúng ta viết xQ ở vị trí của Q(x)=YESxQ ở vị trí của Q(x)=NO .

Một quan điểm khác là chúng ta đang nói về các truy vấn thành viên trong một bộ. Đây là một ví dụ:

Vấn đề quyết định:

Đầu vào: Một số tự nhiên x ,
Câu hỏi: x phải là số chẵn không?

Vấn đề thành viên:

Input: Một số tự nhiên x ,
Câu hỏi: Liệu x trong Even={0,2,4,6,} ?

Chúng tôi đề cập đến câu trả lời CÓ trên đầu vào là chấp nhận đầu vào và câu trả lời KHÔNG trên đầu vào là từ chối đầu vào.

Chúng tôi sẽ xem xét các thuật toán cho các vấn đề quyết định và thảo luận về hiệu quả của các thuật toán đó trong việc sử dụng các tài nguyên tính toán của chúng . Tôi sẽ dựa vào trực giác của bạn từ lập trình bằng một ngôn ngữ như C thay vì chính thức xác định ý nghĩa của chúng tôi bằng thuật toán và tài nguyên tính toán.

[Lưu ý: 1. Nếu chúng tôi muốn làm mọi thứ chính thức và chính xác, chúng tôi sẽ cần sửa một mô hình tính toán như mô hình máy Turing tiêu chuẩn để xác định chính xác ý nghĩa của thuật toán và cách sử dụng tài nguyên tính toán của nó. 2. Nếu chúng ta muốn nói về tính toán trên các đối tượng mà mô hình không thể xử lý trực tiếp, chúng ta sẽ cần mã hóa chúng thành các đối tượng mà mô hình máy có thể xử lý, ví dụ: nếu chúng ta đang sử dụng máy Turing, chúng ta cần mã hóa các đối tượng như số tự nhiên và đồ thị dưới dạng chuỗi nhị phân.]


P = Các vấn đề với thuật toán hiệu quả đểtìmgiải pháp

Giả sử rằng các thuật toán hiệu quả có nghĩa là các thuật toán sử dụng hầu hết lượng tài nguyên tính toán đa thức . Tài nguyên chính mà chúng tôi quan tâm là thời gian chạy thuật toán trong trường hợp xấu nhất đối với kích thước đầu vào, tức là số bước cơ bản mà thuật toán thực hiện trên đầu vào có kích thước n . Kích thước của một đầu vào xn nếu cần n bit của bộ nhớ máy tính để lưu trữ x , trong trường hợp đó chúng ta viết |x|=n . Vì vậy, bằng các thuật toán hiệu quả, chúng tôi muốn nói đến các thuật toán có thời gian chạy trường hợp xấu nhất đa thức .

Các giả định rằng các thuật toán thời gian đa thức nắm bắt được khái niệm trực quan của các thuật toán hiệu quả được gọi là luận án Cobham của . Tại thời điểm này tôi sẽ không thảo luận liệu P có phải là mô hình phù hợp cho các vấn đề có thể giải quyết hiệu quả hay không và liệu P có hoặc không nắm bắt được những gì có thể được tính toán hiệu quả trong thực tế và các vấn đề liên quan. Hiện tại có những lý do chính đáng để đưa ra giả định này vì vậy với mục đích của chúng tôi, chúng tôi cho rằng đây là trường hợp. Nếu bạn không chấp nhận luận điểm của Cobham, điều đó không làm cho những gì tôi viết dưới đây không chính xác, điều duy nhất chúng ta sẽ mất là trực giác về tính toán hiệu quả trong thực tế. Tôi nghĩ rằng đó là một giả định hữu ích cho một người bắt đầu tìm hiểu về lý thuyết phức tạp.

P là lớp các vấn đề quyết định có thể được giải quyết một cách hiệu quả,
tức là các vấn đề quyết định có thuật toán thời gian đa thức.

Chính thức hơn, chúng tôi nói rằng một vấn đề quyết định Q là trong P iff

có một thuật toán hiệu quả A sao
cho tất cả các đầu vào x ,

  • nếu Q(x)=YES thì A(x)=YES ,
  • nếu Q(x)=NO sau đó A(x)=NO .

Tôi chỉ đơn giản có thể viết A(x)=Q(x) nhưng tôi viết nó theo cách này vì vậy chúng tôi có thể so sánh nó với định nghĩa của NP .


NP = Các vấn đề với thuật toán hiệu quả đểxác minh bằngchứng / chứng chỉ / nhân chứng

Đôi khi chúng tôi không biết cách hiệu quả để tìm câu trả lời cho vấn đề quyết định, tuy nhiên nếu ai đó cho chúng tôi biết câu trả lời và cung cấp cho chúng tôi bằng chứng, chúng tôi có thể xác minh rằng câu trả lời là đúng bằng cách kiểm tra bằng chứng để xem đó có phải là bằng chứng hợp lệ không . Đây là ý tưởng đằng sau sự phức tạp lớp NP .

Nếu bằng chứng quá dài thì nó không thực sự hữu ích, có thể mất quá nhiều thời gian để đọc bằng chứng, hãy kiểm tra xem nó có hợp lệ không. Chúng tôi muốn thời gian cần thiết để xác minh là hợp lý về kích thước của đầu vào ban đầu, chứ không phải kích thước của bằng chứng đã cho! Điều này có nghĩa là những gì chúng ta thực sự muốn không phải là bằng chứng dài tùy ý mà là bằng chứng ngắn . Lưu ý rằng nếu thời gian chạy của trình xác minh là đa thức về kích thước của đầu vào ban đầu thì nó chỉ có thể đọc một phần đa thức của bằng chứng. Vì vậy, ngắn gọn, chúng tôi có nghĩa là kích thước đa thức .

Hình thành điểm này bất cứ khi nào tôi sử dụng từ "bằng chứng" Tôi có nghĩa là "bằng chứng ngắn".

Dưới đây là một ví dụ về một vấn đề mà chúng tôi không biết cách giải quyết hiệu quả nhưng chúng tôi có thể xác minh hiệu quả bằng chứng:

Phân vùng
Input: tập hữu hạn các số tự nhiên S ,
Câu hỏi: là nó có thể để phân vùng S thành hai bộ AB ( AB=SAB= )
sao cho tổng các số trongA bằng tổng số trongB (xAx=xBx )?

Nếu tôi đưa cho bạn S và hỏi bạn xem chúng tôi có thể phân chia nó thành hai bộ sao cho tổng của chúng bằng nhau không, bạn không biết bất kỳ thuật toán hiệu quả nào để giải quyết nó. Bạn có thể sẽ thử tất cả các cách có thể để phân chia các số thành hai bộ cho đến khi bạn tìm thấy một phân vùng có tổng bằng hoặc cho đến khi bạn đã thử tất cả các phân vùng có thể và không có phân vùng nào hoạt động. Nếu bất kỳ ai trong số họ làm việc bạn sẽ nói CÓ, nếu không bạn sẽ nói KHÔNG.

Nhưng có nhiều phân vùng có thể theo cấp số nhân nên sẽ mất rất nhiều thời gian. Tuy nhiên, nếu tôi cung cấp cho bạn hai bộ AB , bạn có thể dễ dàng kiểm tra xem các khoản tiền đều bình đẳng và nếu AB là một phân vùng của S . Lưu ý rằng chúng ta có thể tính tổng một cách hiệu quả.

Ở đây, cặp AB mà tôi cung cấp cho bạn là bằng chứng cho câu trả lời CÓ. Bạn có thể xác minh hiệu quả yêu cầu của tôi bằng cách xem bằng chứng của tôi và kiểm tra xem đó có phải là bằng chứng hợp lệ không . Nếu câu trả lời là CÓ thì có bằng chứng hợp lệ và tôi có thể đưa nó cho bạn và bạn có thể xác minh nó một cách hiệu quả. Nếu câu trả lời là KHÔNG thì không có bằng chứng xác thực. Vì vậy, bất cứ điều gì tôi cung cấp cho bạn, bạn có thể kiểm tra và xem đó không phải là một bằng chứng hợp lệ. Tôi không thể lừa bạn bằng một bằng chứng không hợp lệ rằng câu trả lời là CÓ. Hãy nhớ lại rằng nếu bằng chứng quá lớn sẽ mất rất nhiều thời gian để xác minh nó, chúng tôi không muốn điều này xảy ra, vì vậy chúng tôi chỉ quan tâm đến bằng chứng hiệu quả , tức là bằng chứng có kích thước đa thức.

Đôi khi mọi người sử dụng " giấy chứng nhận " hoặc " nhân chứng " thay cho "bằng chứng".

Lưu ý Tôi đang cung cấp cho bạn đủ thông tin về câu trả lời cho một đầu vào x để bạn có thể tìm và xác minh câu trả lời một cách hiệu quả. Ví dụ, trong ví dụ phân vùng của chúng tôi tôi không cho bạn biết câu trả lời, tôi chỉ cung cấp cho bạn một phân vùng và bạn có thể kiểm tra xem nó có hợp lệ hay không. Lưu ý rằng bạn phải tự xác minh câu trả lời, bạn không thể tin tôi về những gì tôi nói. Hơn nữa, bạn chỉ có thể kiểm tra tính chính xác của bằng chứng của tôi . Nếu bằng chứng của tôi là hợp lệ, điều đó có nghĩa là câu trả lời là CÓ. Nhưng nếu bằng chứng của tôi không hợp lệ, điều đó không có nghĩa là câu trả lời là KHÔNG. Bạn đã thấy rằng một bằng chứng là không hợp lệ, không phải là không có bằng chứng hợp lệ. Chúng tôi đang nói về bằng chứng cho CÓ. Chúng tôi không nói về bằng chứng cho NO.

Chúng ta hãy xem một ví dụ: A={2,4}B={1,5} là một bằng chứng cho thấy S={1,2,4,5} có thể được phân chia thành hai bộ với tổng bằng nhau. Chúng ta chỉ cần tổng hợp các số trongA và các số trongB và xem kết quả có bằng nhau không, và kiểm tra xemA ,B có phải là phân vùng củaS .

Nếu tôi đưa cho bạn A={2,5}B={1,4} , bạn sẽ kiểm tra và thấy bằng chứng của tôi không hợp lệ. Điều đó không có nghĩa là câu trả lời là KHÔNG, nó chỉ có nghĩa là bằng chứng cụ thể này không hợp lệ. Nhiệm vụ của bạn ở đây không phải là tìm câu trả lời, mà chỉ kiểm tra xem bằng chứng bạn đưa ra có hợp lệ hay không.

Nó giống như một sinh viên giải một câu hỏi trong một kỳ thi và một giáo sư kiểm tra xem câu trả lời có đúng không. :) (thật không may, sinh viên thường không cung cấp đủ thông tin để xác minh tính chính xác của câu trả lời của họ và các giáo sư phải đoán phần còn lại của câu trả lời và quyết định họ nên trả bao nhiêu cho sinh viên cho câu trả lời một phần của họ, thực sự là một điều khá khó khăn bài tập, nhiệm vụ).

Điều đáng kinh ngạc là tình huống tương tự áp dụng cho nhiều vấn đề tự nhiên khác mà chúng tôi muốn giải quyết: chúng tôi có thể xác minh một cách hiệu quả nếu một bằng chứng ngắn nhất định là hợp lệ, nhưng chúng tôi không biết cách tìm câu trả lời hiệu quả . Đây là động lực tại sao lớp phức tạp NPcực kỳ thú vị (mặc dù đây không phải là động lực ban đầu để xác định nó). Bất cứ điều gì bạn làm (không chỉ trong CS, mà cả về toán học, sinh học, vật lý, hóa học, kinh tế, quản lý, xã hội học, kinh doanh, ...) bạn sẽ phải đối mặt với các vấn đề tính toán rơi vào lớp này. Để biết được có bao nhiêu vấn đề xảy ra trong NP hãy kiểm tra một bản tóm tắt các vấn đề tối ưu hóa NP . Thật vậy, bạn sẽ có thời gian khó khăn để tìm các vấn đề tự nhiên mà không phải là trong NP . Nó chỉ đơn giản là tuyệt vời.

NP là lớp các vấn đề có trình xác minh hiệu quả, tức là
có một thuật toán thời gian đa thức có thể xác minh xem một giải pháp đã cho có đúng không.

Chính thức hơn, chúng tôi nói rằng một vấn đề quyết định Q là trong NP iff

có một thuật toán hiệu quả V được gọi là trình xác minh sao
cho tất cả các đầu vào x ,

  • nếu Q(x)=YES thì có một bằng chứngy sao choV(x,y)=YES ,
  • nếu Q(x)=NO sau đó cho tất cả các bằng chứngy ,V(x,y)=NO .

Chúng tôi nói một người xác minh là âm thanh nếu nó không chấp nhận bất kỳ bằng chứng nào khi câu trả lời là KHÔNG. Nói cách khác, một trình xác minh âm thanh không thể bị lừa để chấp nhận một bằng chứng nếu câu trả lời thực sự là KHÔNG. Không có dương tính giả.

Tương tự, chúng tôi nói một trình xác minh hoàn tất nếu nó chấp nhận ít nhất một bằng chứng khi câu trả lời là CÓ. Nói cách khác, một người xác minh hoàn chỉnh có thể bị thuyết phục về câu trả lời là CÓ.

Thuật ngữ này xuất phát từ hệ thống logic và bằng chứng . Chúng tôi không thể sử dụng một hệ thống bằng chứng âm thanh để chứng minh bất kỳ tuyên bố sai. Chúng ta có thể sử dụng một hệ thống bằng chứng hoàn chỉnh để chứng minh tất cả các tuyên bố đúng.

Trình xác minh V nhận được hai đầu vào,

  • x : đầu vào ban đầu choQ
  • y : một bằng chứng gợi ý choQ(x)=YES .

Lưu ý rằng chúng tôi muốn V có hiệu quả trong kích thước của x . Nếu y là một bằng chứng lớn, trình xác minh sẽ chỉ có thể đọc một phần đa thức của y . Đó là lý do tại sao chúng tôi yêu cầu các bằng chứng phải ngắn. Nếu y nói ngắn gọn rằng V có hiệu quả trong x cũng giống như nói rằng V có hiệu quả trong xy (vì kích thước của y được giới hạn bởi một đa thức cố định theo kích thước của x ).

Tóm lại, để chỉ ra rằng một vấn đề quyết định Q nằm ở NP chúng ta phải đưa ra một thuật toán xác minh hiệu quảâm thanhhoàn chỉnh .

Ghi chú lịch sử: trong lịch sử đây không phải là định nghĩa ban đầu của NP . Định nghĩa ban đầu sử dụng cái được gọi là máy Turing không xác định . Những máy này không tương ứng với bất kỳ mô hình máy thực tế nào và rất khó để làm quen (ít nhất là khi bạn bắt đầu tìm hiểu về lý thuyết phức tạp). Tôi đã đọc rằng nhiều chuyên gia nghĩ rằng họ sẽ sử dụng định nghĩa trình xác minh làm định nghĩa chính và thậm chí đã đặt tên lớp VP (để xác minh theo thời gian đa thức) thay cho NP nếu họ quay trở lại bình minh của lý thuyết phức tạp tính toán. Định nghĩa xác minh là tự nhiên hơn, dễ dàng hơn để hiểu khái niệm, và dễ sử dụng để hiển thị các vấn đề đang NP .


PNP

Do đó ta có P = hiệu quả có thể giải đượcNP = có thể kiểm chứng hiệu quả. Vì vậy,P=NP iff các vấn đề có thể được xác minh một cách hiệu quả cũng giống như các vấn đề có thể được giải quyết một cách hiệu quả.

Lưu ý rằng bất kỳ vấn đề nào trong P cũng nằm trong NP , tức là nếu bạn có thể giải quyết vấn đề, bạn cũng có thể xác minh xem một bằng chứng cụ thể có đúng không: người xác minh sẽ bỏ qua bằng chứng!

Đó là bởi vì chúng tôi không cần nó, người xác minh có thể tự tính toán câu trả lời, nó có thể quyết định xem câu trả lời là CÓ hay KHÔNG mà không cần bất kỳ trợ giúp nào. Nếu câu trả lời là KHÔNG, chúng tôi biết sẽ không có bằng chứng và người xác minh của chúng tôi sẽ từ chối mọi bằng chứng được đề xuất. Nếu câu trả lời là CÓ, cần có một bằng chứng, và trên thực tế, chúng tôi sẽ chỉ chấp nhận bất cứ điều gì làm bằng chứng.

[Chúng tôi có thể khiến người xác minh của mình chỉ chấp nhận một số trong số họ, điều đó cũng tốt, miễn là người xác minh của chúng tôi chấp nhận ít nhất một bằng chứng mà trình xác minh hoạt động chính xác cho vấn đề.]

Đây là một ví dụ:

Tổng
đầu vào: danh sách n+1 số tự nhiên a1,,ans ,
Câu hỏi:Σi=1nai=s ?

Vấn đề là ở P vì chúng ta có thể tổng hợp các số và sau đó so sánh nó vớis , chúng ta trả về CÓ nếu chúng bằng nhau và KHÔNG nếu chúng không.

Vấn đề cũng nằm trong NP . Xem xét một trình xác minh V có được một bằng chứng cộng với đầu vào cho Sum. Nó hoạt động giống như thuật toán trong P mà chúng tôi đã mô tả ở trên. Đây là một trình xác minh hiệu quả cho Sum.

Lưu ý rằng có các trình xác minh hiệu quả khác cho Sum và một số trong số chúng có thể sử dụng bằng chứng được cung cấp cho chúng. Tuy nhiên, cái chúng tôi thiết kế không có và điều đó cũng tốt. Kể từ khi chúng tôi đưa ra một xác minh hiệu quả cho Sum vấn đề là ở NP . Bí quyết cùng làm việc cho tất cả các vấn đề khác trong P nên PNP .


Brute-Force / tiêts-Tìm kiếm Các thuật toán cho NPNPExpTime

Các thuật toán tốt nhất mà chúng tôi biết để giải quyết một vấn đề tùy ý trong NPbrute-force các thuật toán tìm kiếm / toàn diện . Chọn một trình xác minh hiệu quả cho sự cố (nó có một trình xác minh hiệu quả theo giả định của chúng tôi rằng nó nằm trong NP ) và kiểm tra tất cả các bằng chứng có thể từng cái một. Nếu người xác minh chấp nhận một trong số họ thì câu trả lời là CÓ. Nếu không, câu trả lời là KHÔNG.

Trong ví dụ phân vùng của chúng tôi, chúng tôi thử tất cả các phân vùng có thể và kiểm tra xem các khoản tiền có bằng nhau trong bất kỳ phân vùng nào không.

Lưu ý rằng thuật toán brute-force chạy trong thời gian theo cấp số nhân trong trường hợp xấu nhất. Kích thước của bằng chứng là đa thức trong kích thước của đầu vào. Nếu kích thước của bằng chứng là m thì có 2m bằng chứng có thể. Kiểm tra từng người trong số họ sẽ mất thời gian đa thức bởi người xác minh. Vì vậy, trong tổng số các thuật toán brute-force mất thời gian theo cấp số nhân.

Điều này cho thấy bất kỳ NP vấn đề có thể được giải quyết trong thời gian mũ, tức là NPExpTime . (Ngoài ra các thuật toán brute-force sẽ chỉ sử dụng một lượng đa thức của không gian, tức là NPPSpace nhưng đó là một câu chuyện cho một ngày khác).

Một vấn đề trong NP có thể có thuật toán nhanh hơn nhiều, ví dụ, bất kỳ vấn đề nào trong P đều có thuật toán thời gian đa thức. Tuy nhiên, đối với một vấn đề tùy ý trong NP chúng tôi không biết các thuật toán có thể làm tốt hơn nhiều. Nói cách khác, nếu bạn chỉ nói với tôi rằng vấn đề của bạn nằm ở NP (và không có gì khác về vấn đề này) thì thuật toán nhanh nhất mà chúng tôi biết để giải quyết nó cần có thời gian theo cấp số nhân.

Tuy nhiên, điều đó không có nghĩa là không có thuật toán nào tốt hơn, chúng tôi không biết điều đó . Theo như chúng tôi biết vẫn có thể xảy ra (mặc dù hầu như tất cả các nhà lý thuyết phức tạp đều cho rằng rất khó xảy ra) rằng NP=P và tất cả các vấn đề NP có thể được giải quyết trong thời gian đa thức.

Hơn nữa, một số chuyên gia phỏng đoán rằng chúng ta không thể làm tốt hơn nhiều, tức là có những vấn đề trong NP không thể giải quyết hiệu quả hơn nhiều so với các thuật toán tìm kiếm vũ phu cần thời gian theo cấp số nhân. Xem Giả thuyết Thời gian theo cấp số nhân để biết thêm thông tin. Nhưng điều này không được chứng minh, nó chỉ là một phỏng đoán . Nó chỉ cho thấy chúng ta còn bao xa để tìm ra thuật toán thời gian đa thức cho các vấn đề NP tùy ý .

Mối liên hệ này với thời gian theo cấp số nhân khiến một số người nhầm lẫn: họ nghĩ không chính xác rằng các vấn đề NP đòi hỏi phải có thời gian theo cấp số nhân (hoặc thậm chí tệ hơn là không có thuật toán nào cho họ cả). Nói rằng một vấn đề nằm ở NP không có nghĩa là vấn đề khó giải quyết, nó chỉ có nghĩa là dễ xác minh, nó bị giới hạn trên về khó khăn trong việc giải quyết vấn đề và nhiều vấn đề NP rất dễ giải quyết từ PNP .

Tuy nhiên, có những vấn đề NP dường như khó giải quyết. Tôi sẽ trở lại này trong khi chúng tôi thảo luận NP -hardness.


Giới hạn dưới có vẻ khó chứng minh

OK, vì vậy bây giờ chúng tôi biết rằng có nhiều vấn đề tự nhiên xảy ra ở NP và chúng tôi không biết cách giải quyết hiệu quả nào và chúng tôi nghi ngờ rằng chúng thực sự cần thời gian để giải quyết theo cấp số nhân. Chúng ta có thể chứng minh điều này?

Thật không may, nhiệm vụ chứng minh giới hạn dưới là rất khó khăn. Chúng tôi thậm chí không thể chứng minh rằng những vấn đề này đòi hỏi nhiều hơn thời gian tuyến tính ! Hãy để một mình yêu cầu thời gian theo cấp số nhân.

Chứng minh giới hạn thời gian tuyến tính khá dễ dàng: thuật toán cần phải đọc đầu vào sau khi tất cả. Chứng minh giới hạn siêu tuyến tính là một câu chuyện hoàn toàn khác. Chúng tôi có thể chứng minh giới hạn siêu tuyến tính với nhiều hạn chế hơn về loại thuật toán mà chúng tôi đang xem xét, ví dụ: sắp xếp thuật toán bằng cách sử dụng so sánh, nhưng chúng tôi không biết giới hạn dưới mà không có những hạn chế đó.

Để chứng minh giới hạn trên cho một vấn đề, chúng ta chỉ cần thiết kế một thuật toán đủ tốt. Nó thường cần kiến ​​thức, tư duy sáng tạo và thậm chí là sự khéo léo để đưa ra một thuật toán như vậy.

Tuy nhiên, nhiệm vụ đơn giản hơn đáng kể so với việc chứng minh giới hạn dưới. Chúng tôi phải chỉ ra rằng không có thuật toán tốt . Không phải là chúng ta không biết về bất kỳ thuật toán nào đủ tốt ngay bây giờ, mà là không tồn tại bất kỳ thuật toán tốt nào , rằng sẽ không có ai tìm ra một thuật toán tốt . Hãy suy nghĩ về nó trong một phút nếu bạn chưa từng thấy trước đây, làm thế nào chúng ta có thể hiển thị một kết quả không thể như vậy ?

Đây là một nơi khác mà mọi người bị lẫn lộn. Ở đây "sự bất khả thi" là một sự bất khả thi về mặt toán học , tức là nó không phải là một phần ngắn mà chúng ta có thể sửa chữa trong tương lai. Khi chúng tôi nói không thể, chúng tôi có nghĩa là nó hoàn toàn không thể, không thể là 1=0 . Không có tiến bộ khoa học có thể làm cho nó có thể. Đó là những gì chúng tôi đang làm khi chúng tôi đang chứng minh giới hạn thấp hơn.

Để chứng minh giới hạn dưới, nghĩa là chỉ ra rằng một vấn đề cần một khoảng thời gian để giải quyết, có nghĩa là chúng ta phải chứng minh rằng bất kỳthuật toán, ngay cả những thuật toán rất khéo léo chưa biết, không thể giải quyết vấn đề nhanh hơn. Có nhiều ý tưởng thông minh mà chúng ta biết (tham lam, phù hợp, lập trình động, lập trình tuyến tính, lập trình semidefinite, lập trình tổng bình phương và nhiều ý tưởng thông minh khác) và còn nhiều nhiều ý tưởng khác mà chúng ta chưa biết. Loại trừ một thuật toán hoặc một ý tưởng cụ thể về thiết kế thuật toán là chưa đủ, chúng ta cần loại trừ tất cả chúng, ngay cả những thuật toán mà chúng ta chưa biết, thậm chí những thuật toán có thể chưa từng biết đến! Và người ta có thể kết hợp tất cả những thứ này trong một thuật toán, vì vậy chúng ta cũng cần loại trừ sự kết hợp của chúng. Đã có một số tiến bộ cho thấy rằng một số ý tưởng không thể giải quyết N P khó khănNPcác vấn đề, ví dụ như tham lam và các phần mở rộng của nó không thể hoạt động, và có một số công việc liên quan đến thuật toán lập trình động và có một số công việc về cách sử dụng lập trình tuyến tính cụ thể. Nhưng những điều này thậm chí không gần với việc loại bỏ những ý tưởng thông minh mà chúng ta biết (tìm kiếm các giới hạn thấp hơn trong các mô hình tính toán bị hạn chế nếu bạn quan tâm).


Rào cản: Lower Bounds Are Khó Chứng minh

Mặt khác, chúng tôi có các kết quả toán học được gọi là các rào cản nói rằng bằng chứng ràng buộc thấp hơn không thể như vậy và như vậy, và gần như vậy bao gồm tất cả các kỹ thuật mà chúng tôi đã sử dụng để chứng minh giới hạn thấp hơn! Trên thực tế, nhiều nhà nghiên cứu đã từ bỏ công việc chứng minh giới hạn dưới sau bằng chứng tự nhiên của Alexander Razbarov và Steven Rudich kết quả rào cản . Nó chỉ ra rằng sự tồn tại của các loại bằng chứng ràng buộc thấp hơn sẽ ngụ ý sự không an toàn của các trình tạo số giả mã hóa và nhiều công cụ mã hóa khác.

Tôi nói gần như bởi vì trong những năm gần đây, có một số tiến bộ chủ yếu là Ryan Williams đã có thể phá vỡ các kết quả rào cản một cách thông minh, cho đến nay vẫn là kết quả cho các mô hình tính toán rất yếu và khá xa so với các thuật toán đa thức thời gian nói chung .

Nhưng tôi đang chuyển hướng. Vấn đề chính tôi muốn làm là chứng minh giới hạn thấp là khó khăn và chúng tôi không có giới hạn mạnh thấp hơn đối với các thuật toán nói chung giải quyết NP vấn đề.

[Mặt khác, công việc của Ryan Williams cho thấy có mối liên hệ chặt chẽ giữa việc chứng minh giới hạn dưới và chứng minh giới hạn trên. Xem bài nói chuyện của anh ấy tại ICM 2014 nếu bạn quan tâm.]


Giảm: Giải quyết vấn đề bằng cách sử dụng một vấn đề khác dưới dạng chương trình con / Oracle / Hộp đen

Ý tưởng về việc giảm rất đơn giản: để giải quyết vấn đề, sử dụng thuật toán cho một vấn đề khác.

Dưới đây là ví dụ đơn giản: giả sử chúng ta muốn tính tổng của một danh sách n số tự nhiên và chúng ta có thuật toán Sum trả về tổng của hai số đã cho. Chúng ta có thể sử dụng Sum để cộng các số trong danh sách không? Tất nhiên!

Vấn đề:

Input: một danh sách n số tự nhiên x1,,xn ,
Output: trở về i=1nxi .

Thuật toán rút gọn:

  1. s=0
  2. cho i từ 1 đến n
    2.1. s=Sum(s,xi)
  3. trở lại s

Ở đây chúng tôi đang sử dụng Sum trong thuật toán của chúng tôi như là một chương trình con . Lưu ý rằng chúng tôi không quan tâm về cách Sum công trình, nó hoạt động như hộp đen cho chúng tôi, chúng tôi không quan tâm những gì đang xảy ra bên trong Sum . Chúng ta thường gọi chương trình con Sum là nhà tiên tri . Nó giống như lời sấm truyền của Delphi trong thần thoại Hy Lạp, chúng tôi đặt câu hỏi và lời sấm trả lời chúng và chúng tôi sử dụng câu trả lời.

Đây thực chất là một sự giảm bớt: giả sử rằng chúng ta có thuật toán cho một vấn đề và sử dụng nó như một lời tiên tri để giải quyết vấn đề khác. Ở đây hiệu quả có nghĩa là hiệu quả giả định rằng câu trả lời của nhà tiên tri trong một đơn vị thời gian, tức là chúng ta đếm mỗi lần thực hiện lời tiên tri một bước.

Nếu oracle trả về một câu trả lời lớn chúng ta cần phải đọc nó và có thể mất một thời gian, vì vậy chúng ta nên đếm thời gian cần thiết chúng ta phải đọc các câu trả lời mà oracle đã ban cho chúng ta. Tương tự như vậy để viết / đặt câu hỏi từ nhà tiên tri. Nhưng oracle hoạt động ngay lập tức, tức là ngay khi chúng ta đặt câu hỏi từ nhà tiên tri, nhà tiên tri viết câu trả lời cho chúng ta trong một đơn vị thời gian. Tất cả các công việc mà nhà tiên tri làm được tính một bước duy nhất, nhưng điều này không bao gồm thời gian chúng ta phải viết câu hỏi và đọc câu trả lời.

Bởi vì chúng tôi không quan tâm làm thế nào oracle hoạt động mà chỉ về câu trả lời mà nó trả về, chúng tôi có thể đơn giản hóa và coi nhà tiên tri là vấn đề thay cho thuật toán cho nó. Nói cách khác, chúng tôi không quan tâm nếu nhà tiên tri không phải là một thuật toán, chúng tôi không quan tâm làm thế nào các nhà tiên tri đưa ra câu trả lời của nó.

Ví dụ, Sum trong câu hỏi trên là chính hàm bổ sung (không phải là thuật toán để tính toán bổ sung).

Chúng ta có thể hỏi nhiều câu hỏi từ một nhà tiên tri và các câu hỏi không cần phải được xác định trước: chúng ta có thể đặt câu hỏi và dựa trên câu trả lời mà nhà tiên tri trả lại, chúng ta tự thực hiện một số tính toán và sau đó hỏi một câu hỏi khác dựa trên câu trả lời chúng ta có câu hỏi trước.

Một cách khác để xem xét điều này là suy nghĩ về nó như là một tính toán tương tác . Bản thân tính toán tương tác là một chủ đề lớn vì vậy tôi sẽ không tham gia vào đây, nhưng tôi nghĩ việc đề cập đến quan điểm giảm này có thể hữu ích.

Một thuật toán A có sử dụng một oracle / hộp đen O thường được ký hiệu là AO .

Mức giảm mà chúng ta đã thảo luận ở trên là hình thức giảm chung nhất và được gọi là giảm hộp đen (hay còn gọi là giảm orory , giảm Turing ).

Chính thức hơn:

Chúng tôi nói rằng vấn đề Q là hộp đen có thể rút gọn thành vấn đề O và viết QTO iff
có một thuật toán A sao cho tất cả các đầu vào x ,
Q(x)=AO(x) .

Nói cách khác, nếu có một thuật toán A trong đó sử dụng oracle O như một chương trình con và giải quyết vấn đề Q .

Nếu thuật toán giảm của chúng tôi A chạy trong thời gian đa thức chúng tôi gọi nó là một đa thức thời gian giảm hộp đen hay đơn giản là một giảm Nấu (để vinh danh Stephen A. Cook ) và viết QTPO . (Bảng con T là viết tắt của "Turing" để vinh danh Alan Turing ).

Tuy nhiên, chúng tôi có thể muốn đưa ra một số hạn chế về cách thuật toán giảm tương tác với nhà tiên tri. Có một số hạn chế được nghiên cứu nhưng hạn chế hữu ích nhất là hạn chế được gọi là giảm nhiều - một (hay còn gọi là giảm ánh xạ ).

Ý tưởng ở đây là trên một đầu vào x , chúng tôi thực hiện một số tính toán thời gian đa thức và tạo ra một y là một ví dụ của vấn đề mà nhà tiên tri giải quyết. Sau đó chúng tôi hỏi lời sấm và trả lại câu trả lời cho nó. Chúng tôi được phép hỏi một câu hỏi duy nhất từ ​​nhà tiên tri và câu trả lời của nhà tiên tri là những gì sẽ được trả lại.

Chính thức hơn,

Chúng tôi nói rằng vấn đề Q có thể giảm được nhiều cho vấn đề O và viết QmO iff
có một thuật toán A sao cho tất cả các đầu vào x ,
Q(x)=O(A(x)) .

Khi thuật toán giảm là thời gian đa thức chúng tôi gọi nó là thời gian đa thức nhiều-one giảm hoặc đơn giản là giảm Karp (để vinh danh Richard M. Karp ) và biểu thị nó bằng cách QmPO .

Lý do chính cho sự quan tâm đến việc giảm không tương tác cụ thể này là vì nó bảo tồn các vấn đề NP : nếu có sự giảm nhiều lần một đa thức từ một vấn đề A sang vấn đề NPB , thì A cũng ở NP .

Khái niệm đơn giản về giảm là một trong những khái niệm cơ bản nhất trong lý thuyết phức tạp cùng với P , NPNP -complete (mà chúng ta sẽ thảo luận dưới đây).


Bài đăng đã trở nên quá dài và vượt quá giới hạn của câu trả lời (30000 ký tự). Tôi sẽ tiếp tục câu trả lời trong Phần II .



4
@Kaveh Đó là một bài viết tuyệt vời, cảm ơn. Tôi đã làm được sự quyết đoán trước phần này trong lớp, nhưng tôi hơi chậm hiểu về việc chứng minh tính không ổn định. Tôi không biết điều này có liên quan gì đến sự thiếu hiểu biết của tôi với sự phức tạp không.
đại lý 154

5
Tôi đã đọc nhiều sách phức tạp từ cấp độ giới thiệu (bao gồm cả Sipser) đến nâng cao hơn. Tôi không có vấn đề gì với toán học trừu tượng (ví dụ: tôi có thể đọc Đại số của Lang). Câu trả lời này là tốt nhất để giải thích NP so với P. Tôi sẽ đề nghị bạn dành nhiều thời gian hơn cho việc đánh bóng nó và làm cho nó ghi chú bài giảng. Nó có thể giúp rất nhiều người.
scaaahu

@scaaahu, cảm ơn bạn đã nhận xét tốt bụng và cũng cho những gợi ý. Tôi dự định hoàn thành và đánh bóng điều này sớm.
Kaveh

10
Câu trả lời này nên được thực hiện như một câu trả lời tham khảo. Tất cả các câu hỏi loại P / NP cơ bản trong tương lai nên được đề cập trước tiên. Mô tả rất trôi chảy!
Paresh

179

Phần II

Tiếp theo phần I .

Cái trước vượt quá số lượng chữ cái tối đa được phép trong một câu trả lời (30000) vì vậy tôi chia nó thành hai.

-completeness:Phổ N P Vấn đềNP NP

OK, cho đến nay chúng ta đã thảo luận về lớp các vấn đề có thể giải quyết hiệu quả ( ) và lớp các vấn đề có thể kiểm chứng hiệu quả ( N P ). Như chúng ta đã thảo luận ở trên, cả hai đều là giới hạn trên . Hãy tập trung sự chú ý của chúng tôi bây giờ về các vấn đề bên trong N P như ngạc nhiên nhiều vấn đề tự nhiên bật ra được bên trong N P .PNPNPNP

Bây giờ đôi khi chúng tôi muốn nói rằng một vấn đề rất khó giải quyết . Nhưng như chúng tôi đã đề cập ở trên, chúng tôi không thể sử dụng giới hạn thấp hơn cho mục đích này: về mặt lý thuyết, chúng chính xác là những gì chúng tôi muốn chứng minh, tuy nhiên trong thực tế, chúng tôi đã không thành công trong việc chứng minh giới hạn thấp hơn và nói chung chúng khó chứng minh như chúng tôi đã đề cập ở trên. Có còn cách nào để nói rằng một vấn đề khó giải quyết không?

Ở đây có khái niệm về -completeness. Nhưng trước khi xác định N P -completeness cho chúng tôi có cái nhìn khác về giảm.NPNP

Giảm như là khó khăn tương đối

Chúng ta có thể nghĩ về giới hạn dưới là khó khăn tuyệt đối của vấn đề. Sau đó, chúng ta có thể nghĩ về việc giảm như là khó khăn tương đối của vấn đề. Chúng ta có thể lấy một giảm từ đến BAB nói là dễ dàng hơn BAB . Đây là tiềm ẩn trong khái niệm chúng ta sử dụng để cắt giảm. Chính thức, cắt giảm đưa ra một phần đơn đặt hàng về các vấn đề.

Nếu chúng ta có thể giảm một cách hiệu quả một vấn đề sang một vấn đề B khác thì A không nên khó khăn hơn B để giải quyết. Theo trực giác thì là thế này:ABAB

MBABMBANBMBNMNA

P

NPNP

NPNP

NPNP
NPNP

ANP

ANP
NPBBABmPA

NPNPNPNP

NPNP

(Hai vấn đề khác mà nhiều người làm việc để tối ưu hóa thuật toán của họ cho họ để sử dụng thực tế trong công nghiệp là Vấn đề về Sự hài lòng của Lập trìnhHạn chế . Tùy thuộc vào vấn đề của bạn và các trường hợp bạn quan tâm đến các thuật toán được tối ưu hóa cho một trong những thuật toán này có thể hoạt động tốt hơn khác.)

NP
NP

NP

NPNP

NPNPNPNPNPNP cứng (tức là không có bất kỳ thuật toán thời gian đa thức).

Bây giờ các câu hỏi là:

  • NP

  • Chúng ta có biết ai trong số họ không?

NPNPNPNP

NPExpTimeNPNP

p¬p

NPNP

ANPABBNPNPAABNPB

NPNPNP

Hãy suy nghĩ về nó trong một giây. Nó là khá tuyệt vời khi lần đầu tiên chúng ta thấy điều này. Chúng tôi có thể chứng minh tất cảNPNP

SATNPSATSubsetSumNPSATSubsetSum

NP

NP

Lưu ý: phần sau đây có thể là một chút kỹ thuật trong lần đọc đầu tiên.

NP


Vxtk
YESkVxtNO

UniVerNP

VNPxVxUniVer
tkVxVx

tttk

NPUniVerNP


MxMt
YESMxYEStNOYESt

CPt

Interpreter

UniVerNPMxtkcckInterpreterMYESxct

SATNP

Trình xác minh phổ quát UniVerNPUniVerNP

NPSAT

SAT


φ
YESφNO

SATNP


Được viết...

NP

NP

NP

PNP

Cái gì tiếp theo? Đi đâu từ đây?


6
Tôi ước tôi có thể nâng cao hơn một lần, cảm ơn bạn đã nỗ lực rất nhiều để trả lời!
Fingerolfin

2
Wow, bài viết tuyệt vời! Tôi cũng thực sự mong đợi các phần được công bố, đặc biệt là "Phải làm gì nếu bạn phải giải quyết vấn đề hoàn thành NP?".
Tobias Hermann

5
@ xci13 Bạn có thể! Upvote phần đầu tiên;)
Vince Emigh

4
Tôi đã tạo một tài khoản ở đây chỉ để bình chọn cả bài viết của bạn!
ghosts_in_the_code

6
@Kaveh Có kế hoạch nào để hoàn thành bài viết tuyệt vời này không?
Gab

26

Nhiều hơn những câu trả lời được đề cập hữu ích, tôi khuyên bạn nên đánh giá cao để xem " Vượt Tính: P vs NP Vấn đề " của Michael Sipser . Tôi nghĩ rằng video này nên được lưu trữ như một trong những video giảng dạy hàng đầu trong khoa học máy tính.!

Thưởng thức!


Thật thú vị, sách giáo khoa của tôi là của anh ấy. Nó không phải là một cuốn sách khủng khiếp, nhưng nó khiến một số người mong muốn.
đại lý 154

8

Sao chép câu trả lời của tôi cho một câu hỏi tương tự trên Stack Overflow:

Cách dễ nhất để giải thích NP v. Và như vậy mà không đi sâu vào kỹ thuật là so sánh "các vấn đề từ" với "các vấn đề trắc nghiệm".

Khi bạn đang cố gắng giải quyết một "vấn đề từ ngữ", bạn phải tìm giải pháp từ đầu. Khi bạn đang cố gắng giải quyết "vấn đề trắc nghiệm", bạn có một lựa chọn: hoặc giải quyết nó giống như "vấn đề từ ngữ", hoặc cố gắng đưa ra từng câu trả lời cho bạn và chọn câu trả lời phù hợp.

Điều thường xảy ra là "vấn đề trắc nghiệm" dễ hơn nhiều so với "vấn đề từ" tương ứng: thay thế câu trả lời của thí sinh và kiểm tra xem chúng có phù hợp với nỗ lực ít hơn đáng kể so với tìm câu trả lời đúng từ đầu không.

Bây giờ, nếu chúng ta đồng ý nỗ lực mất thời gian đa thức "dễ dàng" thì lớp P sẽ bao gồm "các vấn đề từ dễ" và NP lớp sẽ bao gồm "các vấn đề dễ lựa chọn".

Bản chất của P v. NP là câu hỏi: "Có bất kỳ vấn đề trắc nghiệm dễ dàng nào không dễ như vấn đề từ ngữ" không? Đó là, có vấn đề nào dễ dàng xác minh tính hợp lệ của một câu trả lời nhất định nhưng việc tìm ra câu trả lời đó từ đầu có khó không?

Bây giờ chúng tôi hiểu trực giác NP là gì, chúng tôi phải thử thách trực giác của mình. Nó chỉ ra rằng có "vấn đề trắc nghiệm", theo một cách nào đó, khó nhất trong tất cả chúng: nếu ai đó tìm ra giải pháp cho một trong những vấn đề "khó nhất trong tất cả" thì người ta có thể tìm ra giải pháp cho TẤT CẢ Vấn đề NP! Khi Cook phát hiện ra điều này 40 năm trước, nó đã đến như một sự ngạc nhiên hoàn toàn. Những vấn đề "khó nhất trong tất cả" được gọi là NP-hard. Nếu bạn tìm thấy "giải pháp cho vấn đề từ" cho một trong số họ, bạn sẽ tự động tìm "giải pháp cho vấn đề từ" cho mỗi "vấn đề trắc nghiệm dễ dàng"!

Cuối cùng, các vấn đề hoàn thành NP là những vấn đề đồng thời là NP và NP-hard. Theo sự tương tự của chúng tôi, chúng đồng thời "dễ như các vấn đề trắc nghiệm" và "khó nhất trong số chúng là các vấn đề từ ngữ".


Bây giờ chúng tôi hiểu trực giác NP là gì, chúng tôi phải thử thách trực giác của mình. Hóa ra là có "vấn đề trắc nghiệm" - ý bạn là "vấn đề từ ngữ" ở đó? Tôi nghĩ vậy, bởi vì tất cả các vấn đề NP đều dễ dàng như "nhiều lựa chọn" theo định nghĩa.
Dmitry Grigoryev

Theo dòng, hóa ra có "vấn đề trắc nghiệm", theo một cách nào đó, khó nhất trong tất cả chúng tôi có nghĩa là hóa ra có những vấn đề NP, theo một nghĩa nào đó, là khó nhất trong tất cả . Các vấn đề NP thực sự là các vấn đề đa lựa chọn dễ dàng theo định nghĩa, nhưng chúng cũng khó nhất trong số chúng là các vấn đề từ ngữ. Ví dụ tiêu chuẩn là SAT3: nó dễ như một bài toán trắc nghiệm, nhưng khó như một bài toán đố.
Michael

7

Đơn giản nhất trong số đó là P, các vấn đề có thể giải quyết được trong thời gian đa thức thuộc về đây.

Rồi đến NP. Các vấn đề có thể giải quyết trong thời gian đa thức trên máy Turing không xác định thuộc về đây.

Độ cứng và tính đầy đủ phải giảm. Một vấn đề A khó đối với lớp C nếu mọi vấn đề trong C giảm xuống A. Nếu vấn đề A khó đối với NP hoặc NP-hard, nếu mọi vấn đề trong NP đều giảm xuống A.

Cuối cùng, một vấn đề đã hoàn thành đối với lớp C nếu nó thuộc C và khó đối với C. Trong trường hợp của bạn, sự cố A đã hoàn thành đối với NP hoặc NP-hoàn thành, nếu mọi vấn đề trong NP giảm xuống A và A ở NP .

Để thêm vào giải thích về NP, một vấn đề nằm ở NP khi và chỉ khi một giải pháp có thể được xác minh trong thời gian đa thức (xác định). Hãy xem xét bất kỳ vấn đề hoàn chỉnh NP nào mà bạn biết, SAT, CLIITE, SUBSET SUM, VERTEX COVER, v.v. Nếu bạn "có được giải pháp", bạn có thể xác minh tính chính xác của nó trong thời gian đa thức. Chúng là các phép gán chân thực cho các biến, biểu đồ con hoàn chỉnh, tập hợp con số và tập hợp các đỉnh thống trị tất cả các cạnh.


6

Đối với những điều cơ bản, P so với NP và Sở thú phức tạp tính toán video có vẻ đơn giản hơn rất nhiều để hiểu.

Đối với một máy tính có phiên bản thực sự lớn của một vấn đề :

Vấn đề P

dễ dàng để giải quyết (khối rubix)

Vấn đề NP

khó - nhưng kiểm tra câu trả lời thì dễ (sudoku)

Có lẽ đây đều là những vấn đề thực sự của P nhưng chúng ta không biết ... P so với NP .

NP-hoàn thành

Rất nhiều vấn đề NP liên quan đến cùng một vấn đề (sudoku là người mới trong danh sách).

Vấn đề EXP

thực sự khó khăn (bước tiếp theo tốt nhất trong cờ vua)

Vấn đề NP-hard

Chỉnh sửa: NP-hard không được giải thích rõ trong video (tất cả đều là các bit màu hồng), sơ đồ NP-hard Euler của Wikipedia rõ ràng hơn về điều này.

Tóm tắt video

Bảng đen Euler của P, NP, NP-đầy đủ, EXP và NP-hard

Sơ đồ Euler cứng của Wikipedia

Sơ đồ SVG Euler của P, NP, NP-đầy đủ và NP-hard


0

P , NP , NP-đầy đủNP-hard là các lớp phức tạp, phân loại các vấn đề theo độ phức tạp thuật toán để giải quyết chúng. Nói tóm lại, chúng dựa trên ba thuộc tính:

bảng lớp phức tạp

Có thể giải quyết trong thời gian đa thức: Xác định các vấn đề quyết định có thể được giải quyết bằng máy Turing xác định (DTM) bằng cách sử dụng lượng thời gian tính toán đa thức, nghĩa là thời gian chạy của nó được giới hạn trên bởi một biểu thức đa thức trong kích thước của đầu vào cho thuật toán. Sử dụng ký hiệu Big-O độ phức tạp thời gian này được xác định là O(n ^ k), trong đó n là kích thước của hệ số không đổi đầu vào và ka.

Giải pháp có thể kiểm chứng được trong thời gian đa thức: Xác định các vấn đề quyết định mà giải pháp đã cho có thể được xác minh bằng DTM bằng cách sử dụng lượng thời gian tính toán đa thức, mặc dù để có được giải pháp chính xác có thể cần lượng thời gian cao hơn.

Giảm bất kỳ vấn đề NP nào trong thời gian đa thức : Xác định các vấn đề quyết định có thuật toán để giải quyết chúng có thể được sử dụng để giải quyết bất kỳ vấn đề NP nào sau bước dịch thời gian đa thức.


Gần đây tôi đã viết một bài viết về chủ đề này cung cấp thêm chi tiết, bao gồm trình diễn mã để giảm vấn đề NP thành vấn đề NP-hard: Các lớp vấn đề phức tạp

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.