Toán ứng dụng và Tính toán
Độ phức tạp tính toán, P và NP
Phân loại bài toán theo tốc độ tăng của thời gian giải, xoay quanh câu hỏi liệu P có bằng NP hay không.
Trực giácVì sao một số câu đố dễ kiểm tra nhưng khó giải
Giải một câu đố Sudoku từ đầu có thể mất rất nhiều thời gian, thử hết khả năng này đến khả năng khác. Nhưng nếu một người bạn đưa cho bạn một bảng đã điền xong và khẳng định nó giải được câu đố, việc kiểm tra khẳng định đó lại nhanh: chỉ cần rà từng hàng, cột và ô để tìm số trùng lặp. Sắp xếp một bộ bài đã xáo trộn thì khác — vừa giải nhanh (vài lượt của bất kỳ thuật toán sắp xếp nào) vừa kiểm tra nhanh không kém. Lý thuyết độ phức tạp tính toán biến sự phân biệt thường ngày này — "dễ giải" so với chỉ đơn thuần "dễ kiểm tra một lời giải" — thành một điều chính xác về mặt toán học, và đặt câu hỏi liệu sự phân biệt đó có thật hay chỉ là ảo giác.
Phổ thôngĐo thời gian chạy: tăng đa thức so với tăng mũ
Thời gian chạy của một thuật toán thường được đo như một hàm theo kích thước đầu vào , dùng ký hiệu big-O: nghĩa là thời gian chạy tăng không nhanh hơn một bội hằng số của khi đủ lớn. Tìm kiếm tuần tự trong một danh sách chưa sắp xếp gồm phần tử mất bước; tìm kiếm nhị phân trên danh sách đã sắp xếp gồm phần tử chỉ mất bước. Cả hai đều là đa thức (thực ra là dưới tuyến tính hoặc tuyến tính) theo . Ngược lại, thử mọi tập con của phần tử mất bước — mũ theo , và chậm hơn rất nhiều khi vượt qua vài chục.
| Tốc độ tăng | |||
|---|---|---|---|
Đại họcCác lớp P và NP
Định nghĩa: Lớp P
P (thời gian đa thức) là tập các bài toán đúng/sai mà một máy tính chuẩn có thể giải trong thời gian bị chặn bởi một đa thức theo kích thước đầu vào — tức là trong thời gian với hằng số cố định nào đó. Sắp xếp, kiểm tra số nguyên tố, và tìm đường đi ngắn nhất trong đồ thị đều thuộc P.
Định nghĩa: Lớp NP
NP (thời gian đa thức không đơn định) là tập các bài toán đúng/sai mà một câu trả lời "có" được đề xuất đi kèm một chứng chỉ (nhân chứng, như chu trình Hamilton ở trên hay một phép gán thỏa mãn cho một công thức) có thể được kiểm tra tính đúng đắn trong thời gian đa thức, dù nhìn chung không có cách nào đã biết để tìm chứng chỉ đó trong thời gian đa thức. Mọi bài toán thuộc P cũng thuộc NP (nếu bạn có thể giải nhanh, kiểm tra cũng nhanh một cách tầm thường), nên ; liệu bao hàm ngược lại có đúng hay không chính là câu hỏi P đối với NP.
Một cách hình thức, một ngôn ngữ thuộc NP nếu tồn tại một đa thức và một bộ kiểm chứng thời gian đa thức sao cho khi và chỉ khi tồn tại một chứng chỉ với và chấp nhận. Định nghĩa dựa trên bộ kiểm chứng này tương đương với định nghĩa "máy Turing không đơn định" phổ biến hơn, và thường dễ suy luận hơn trong thực tế.
Đại họcQuy dẫn thời gian đa thức và tính NP-đầy đủ
Định nghĩa: Quy dẫn thời gian đa thức
Bài toán quy dẫn về bài toán trong thời gian đa thức, viết là , nếu tồn tại một hàm , tính được trong thời gian đa thức, biến mỗi thể hiện của thành một thể hiện của sao cho là thể hiện có đáp án "có" của khi và chỉ khi là thể hiện có đáp án "có" của . Về trực giác, nghĩa là " khó ít nhất bằng ": một thuật toán nhanh cho ngay lập tức cho một thuật toán nhanh cho , bằng cách biến đổi rồi gọi nó.
Định nghĩa: NP-đầy đủ
Một bài toán là NP-đầy đủ nếu và mọi bài toán đều thỏa . Các bài toán NP-đầy đủ là những bài toán "khó nhất" trong NP: một thuật toán hiệu quả cho bất kỳ bài toán nào trong số đó, qua các phép quy dẫn, sẽ chuyển thành một thuật toán hiệu quả cho mọi bài toán trong NP.
Bài toán thỏa mãn Boolean (SAT) — cho một công thức Boolean theo các biến , quyết định xem có phép gán giá trị đúng/sai nào làm nó nhận giá trị đúng hay không — là NP-đầy đủ.
Vì sao đúng?
SAT rõ ràng thuộc NP: một phép gán thỏa mãn là một chứng chỉ có thể kiểm tra trong thời gian đa thức chỉ bằng cách thay giá trị vào. Phần sâu sắc là chứng minh mọi bài toán NP đều quy dẫn về SAT — điều này đúng vì một công thức Boolean đủ biểu cảm để mô tả, từng bước một, toàn bộ quá trình chạy của bất kỳ bộ kiểm chứng thời gian đa thức nào, từng ô nhớ và từng thời điểm, nên "có tồn tại chứng chỉ hay không" trở thành "công thức khổng lồ này có thỏa mãn được không".
Chứng minh
Cho với bộ kiểm chứng thời gian đa thức chạy trong thời gian nhiều nhất trên đầu vào độ dài kèm một chứng chỉ độ dài nhiều nhất . Cố định một đầu vào độ dài ; ta xây một công thức Boolean , thỏa mãn được đúng khi có một chứng chỉ nào đó làm chấp nhận.
Hãy tưởng tượng toàn bộ quá trình tính toán của trên , với chứng chỉ chưa biết, được trình bày như một bảng (tableau): một lưới trong đó hàng ghi lại toàn bộ nội dung băng và vị trí đầu đọc của bộ kiểm chứng tại bước thời gian . Đưa vào một biến Boolean cho mỗi bộ ba (ô, bước thời gian, ký hiệu có thể), ghi lại ký hiệu nào nằm ở ô đó tại thời điểm đó — vì lưới có số ô và số bước thời gian là đa thức, đây là một số lượng biến đa thức.
Công thức được xây dựng như một phép hội (AND) các mệnh đề áp đặt bốn điều kiện cục bộ, dễ kiểm tra: (1) mỗi ô chứa đúng một ký hiệu tại mỗi bước thời gian; (2) hàng mã hóa đúng đầu vào cố định theo sau là chỗ trống cho chứng chỉ chưa được đoán; (3) mỗi cửa sổ nhỏ gồm các ô liền kề qua hai bước thời gian liên tiếp nhất quán với quy tắc chuyển trạng thái của (đây là nơi các bit chứng chỉ, để tự do ở hàng , được phép ảnh hưởng tới phần còn lại của tính toán); (4) một ô nào đó tại bước thời gian cuối cùng ghi lại trạng thái chấp nhận.
Mỗi điều kiện trên chỉ ràng buộc một vùng lân cận nhỏ, cỡ cố định của các biến, nên mỗi điều kiện chuyển thành một số mệnh đề hằng số, và chỉ có số lượng đa thức vùng lân cận cần ràng buộc — nên có kích thước đa thức và tính được từ trong thời gian đa thức. Theo cách xây dựng, thỏa mãn được đúng khi tồn tại một bảng nhất quán, tức là đúng khi có chứng chỉ nào đó làm chấp nhận, tức là đúng khi . Điều này thể hiện phép quy dẫn cho một bất kỳ, kết hợp với đã chỉ ra ở trên, chứng minh SAT là NP-đầy đủ.
Nếu là NP-đầy đủ và , thì .
Vì sao đúng?
Tính NP-đầy đủ của nghĩa là mọi bài toán NP đều có thể được viết lại, trong thời gian đa thức, thành một thể hiện của . Nếu bản thân sau đó có thể giải trong thời gian đa thức, việc nối bước viết lại và bước giải lại với nhau cũng giải được bài toán NP gốc trong thời gian đa thức — nên chỉ một bài toán NP-đầy đủ khả thi sẽ kéo mọi bài toán NP xuống P cùng với nó.
Chứng minh
Giả sử là NP-đầy đủ và có một thuật toán giải trong thời gian . Lấy bất kỳ ; theo tính NP-đầy đủ của , , nghĩa là tồn tại một hàm quy dẫn tính được trong thời gian biến các thể hiện của thành thể hiện của trong khi bảo toàn đáp án có/không.
Với một đầu vào độ dài của , trước tiên tính : việc này mất thời gian , và đặc biệt đầu ra có độ dài nhiều nhất (một thuật toán thời gian đa thức không thể viết ra nhiều đầu ra hơn thời gian nó chạy). Sau đó chạy thuật toán thời gian đa thức cho trên : vì , việc này mất thời gian .
Tổng thời gian chạy là , vẫn là một đa thức theo (hợp của hai đa thức là một đa thức). Theo tính đúng đắn của phép quy dẫn, là thể hiện có đáp án "có" của khi và chỉ khi là thể hiện có đáp án "có" của , nên thủ tục kết hợp này quyết định đúng trong thời gian đa thức.
Vì là bất kỳ, mọi bài toán NP đều có một thuật toán thời gian đa thức, tức . Kết hợp với bao hàm luôn đúng , ta có .
| Bài toán | Tình trạng đã biết |
|---|---|
| Sắp xếp một danh sách | Thuộc P: phép so sánh là đủ |
| Kiểm tra số nguyên tố | Thuộc P từ năm 2002 (thuật toán AKS) |
| Thỏa mãn Boolean (3-SAT) | NP-đầy đủ (Cook–Levin, 1971) |
| Người bán hàng lữ hành (dạng quyết định) | NP-đầy đủ |
| Đẳng cấu đồ thị | Thuộc NP; có thuật toán tựa đa thức từ 2015 (Babai); chưa biết thuộc P hay NP-đầy đủ |
| Phân tích thừa số nguyên tố | Thuộc NP và co-NP; chưa biết thuộc P — giả thiết độ khó làm nền tảng cho RSA |
Đại họcỨng dụng thực tiễn và Ví dụ minh họa
Nhận ra một bài toán là NP-đầy đủ có giá trị thực tiễn ngay lập tức: nó cho kỹ sư biết nên ngừng tìm một thuật toán chính xác, luôn nhanh, và thay vào đó tìm tới các phương pháp heuristic, thuật toán xấp xỉ, hoặc cấu trúc trường hợp đặc biệt. Điều đó cũng là nền tảng cho mật mã học hiện đại (độ an toàn của RSA dựa vào việc phân tích thừa số là khó), hậu cần và lập lịch (định tuyến xe, xếp lịch thi), tin sinh học (dự đoán cấu trúc protein, các biến thể của bài toán căn chỉnh trình tự), và tối ưu hóa trình biên dịch (cấp phát thanh ghi chính là tô màu đồ thị, vốn là NP-đầy đủ).
Ví dụ: Biến một phủ đỉnh thành một tập độc lập
Xét đồ thị đường đi trên đỉnh với các cạnh . Dùng sự kiện rằng một đồ thị với đỉnh có phủ đỉnh kích thước khi và chỉ khi nó có tập độc lập kích thước , và biết rằng là một tập độc lập cực đại của đồ thị này, tìm kích thước phủ đỉnh nhỏ nhất.
Lời giải
Trước tiên kiểm tra thực sự là độc lập: không cạnh nào trong có cả hai đầu mút thuộc , nên không có hai đỉnh được chọn nào kề nhau, xác nhận đó là một tập độc lập hợp lệ kích thước ; đây là cực đại vì một đường đi đỉnh không thể có đỉnh đôi một không kề nhau (sẽ phải có hai đỉnh kề nhau dọc theo đường đi duy nhất).
Áp dụng công thức quy dẫn với và kích thước tập độc lập : kích thước phủ đỉnh nhỏ nhất .
Kiểm tra trực tiếp: tập bù phải là một phủ đỉnh. Kiểm tra mọi cạnh đều có ít nhất một đầu mút thuộc : cạnh chạm ; cạnh chạm ; cạnh chạm ; cạnh chạm . Cả bốn cạnh đều được phủ chỉ bởi đỉnh, xác nhận đáp án.
Sự tương đương giữa phủ đỉnh và tập độc lập này chính xác là kiểu quy dẫn thời gian đa thức (thực ra ở đây là một quy dẫn rất đơn giản, tính được trong thời gian tuyến tính và khả nghịch) đã bàn ở trên: cả Phủ Đỉnh và Tập Độc Lập đều là các bài toán quyết định NP-đầy đủ, và phép quy dẫn này cho thấy chúng, theo một nghĩa chính xác, là cùng một bài toán nhìn từ hai góc độ khác nhau.
Ví dụ: Vì sao vét cạn thất bại ngay ở kích thước khiêm tốn
Một thuật toán vét cạn cho bài toán thỏa mãn với biến Boolean kiểm tra tất cả phép gán giá trị đúng/sai có thể, tốn khoảng giây (một phần tỷ giây) cho mỗi phép gán trên một máy tính nhanh. Ước lượng, tới lũy thừa mười gần nhất, tìm kiếm vét cạn này mất bao nhiêu giây với biến.
Lời giải
Số phép gán cần kiểm tra là . Vì , ta có ; chính xác hơn .
Nhân với chi phí mỗi phép gán giây cho tổng thời gian khoảng giây.
Làm tròn tới lũy thừa mười gần nhất, đây là khoảng giây — xấp xỉ đến ngày tính toán liên tục, chỉ với biến, một kích thước được coi là nhỏ trong các ứng dụng thực tế (các thể hiện SAT công nghiệp thường xuyên có hàng nghìn hoặc hàng triệu biến).
Đây chính xác là lý do vì sao sự phân biệt giữa thời gian đa thức và thời gian mũ quan trọng trong thực tế, không chỉ về mặt lý thuyết: một thuật toán đa thức giả định chạy trong, chẳng hạn, bước sẽ chỉ cần bước — một phần nhỏ của mili giây — cho thấy vì sao câu hỏi P đối với NP có tầm quan trọng thực tiễn to lớn đến vậy.
Với , đại lượng nào lớn hơn: hay ?
"NP" thực sự là viết tắt của điều gì?
Theo định lý Cook–Levin, bài toán nào là bài toán đầu tiên từng được chứng minh là NP-đầy đủ?
Nếu ai đó tìm ra một thuật toán thời gian đa thức cho một bài toán NP-đầy đủ duy nhất chẳng hạn như SAT, điều gì sẽ xảy ra?
Tài liệu tham khảo
- Stephen A. Cook (1971). The Complexity of Theorem-Proving Procedures · DOI:10.1145/800157.805047
- Michael Sipser (2012). Introduction to the Theory of Computation
- Michael R. Garey, David S. Johnson (1979). Computers and Intractability: A Guide to the Theory of NP-Completeness
- Clay Mathematics Institute (2000). P vs NP Problem