Định nghĩa 1.30. Ta nói L là bài toán thuộc loại NP-C nếu các khẳng định sau là đúng:
1) L thuộc NP
2) Với mọi ngôn ngữ L’NP có một phép thu thời gian đa thức L’ về L Định lý 1.3 Nếu bài toán P1 là NP-C, P2 là NP và có một phép thu thời gian đa thức từ P1 về P2 thì P2 cũng là NP-C.
Chứng minh: Ta cần chứng tỏ rằng mỗi ngôn ngữ L thuộc NP đều thu được P2 trong thời gian đa thức. Khi đó theo định nghĩa P2 sẽ thuộc NP-C.
Thật vậy, vì P1 là NP-C nên có một phép thu đa thức L về P1. Giả sử thời gian của phép thu này là P(n). Vì thế một chuỗi W∈L có chiều dài n được biến đổi thành một chuối x ∈ P1 có chiều dài tối đa là P(n). Ta cũng biết rằng
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
có một phép thu đa thức từ P1 về P2. Giả sử thời gian của phép thu này là
q(m). Thế thì phép thu này biến đổi chuỗi x ∈ P1 về chuỗi y nào đó thuộc P2
với thời gian tối đa là q(p(n)). Vì thế phép biến đổi W∈ L về y ∈ P2 mất thời gian tối đa là p(n) + q(p(n)), đây cũng là một đa thức. Như vậy, ta kết luận rằng L có thể thu về P2 trong thời gian đa thức.
Định lý 1.4. Nếu có một bài toán nào đó là NP-C mà lại thuộc lớp P thì ta có P = NP.
Chứng minh: Giả sử có bài toán Q ∈ NP-C và Q∈ P. Thế thì mọi ngôn ngữ L trong NP đều thu được về Q trong thời gian đa thức. Nếu Q∈ P thì L∈
P. Như vậy NP∈ P. Kết hợp với điều hiển nhên là P∈ NP ta được P = NP.
Nhận xét: Chúng ta vẫn tin tưởng rằng nhiều bài toán thuộc lớp NP
nhưng không thuộc P nên chúng ta sẽ xem việc chứng minh một bài toán là
NP-C có giá trị ngang với việc chứng minh rằng nó không thể giải được trong thời gian đa thức, và vì thế không có lời giải đúng nào bằng máy tính (và ta sẽ chỉ đi tìm lời giải gần đúng).