Trong mỗi cặpcủa bài toán, một là có thể giải được bằng thời gian đa thức và mặc khác là NP-đầy đủ, nhưng sự khác nhau không đáng kể giữa các bài toán xuất hiện trong : * Các đường đi đơ
Trang 1PHẦN I- TỔNG QUAN
Phần lớn các thuật toán chúng ta đã học là các thuật toán thời gian đa thức
(polynomial-time algorithms) : các dữ liệu vào có kích cỡ n, trường hợp xấu
nhất thời gian chạy là O(n k ) với một số hằng số k Đương nhiên điều kỳ diệu khi
mà tất cả các bài toán có thể giải được bằng thời gian đa thức Câu trả lời làkhông Chẳng hạn, đó là các bài toán, như “bài toán Halting“ nổi tiếng củaTuring, không thể giải được bằng bất kỳ máy tính nào, không vấn đề gì về việcmất thời gian đã cung ứng Cũng có các bài toán có thể giải được nhưng không
phải với thời gian O(n k ) với bất kỳ hằng số k Tóm lại, chúng ta nghỉ rằng các bài
toán có thể giải được bằng các thuật toán thời gian đa thức là dễ vận dụng và cácbài toán đòi hỏi thời gian siêu đa thức là khó vận dụng
Chủ đề của chương này là một lớp các bài toán thú vị được gọi là các bàitoán “NP-đầy đủ (NP-complete)" Thuật toán không đa thức vẫn chưa đượckhám phá cho một bài toán NP-đầy đủ, không có một bài toán NP-đầy đủ nào cóthể chứng minh rằng thuật toán không đa thức có thể tồn tại đối với bất kỳ bàitoán nào P ≠ NP ? , hầu hết sự lúng túng mở ra nghiên cứu các bài toán bằngkhoa học máy tính lý thuyết đã đưa ra vào năm 1971
Một khía cạnh khó khăn riêng của các bài toán NP-đầy đủ là xem chúnggiống như các bào toán mà có các thuật toán đa thức thời gian Trong mỗi cặpcủa bài toán, một là có thể giải được bằng thời gian đa thức và mặc khác là NP-đầy đủ, nhưng sự khác nhau không đáng kể giữa các bài toán xuất hiện trong :
* Các đường đi đơn dài nhất và ngắn nhất (Shortest vs longest simple paths) : chúng ta thấy rằng, chúng ta có thể tìm thấy các đường đi ngắn nhất từ
một nguồn đơn trong một đồ thị có hướng G = (V, E) với thời gian O(V E) Kết
thúc đường đi đơn dài nhất giữ hai đỉnh là khó
* Vòng Hamilton và Euler (Euler tour vs hamiltonian cycle) : An
vòng Euler của một kết nối của đồ thị có hướng G = (V, E) là một vòng đi
ngang qua mỗi đỉnh của G chính xác một lần, mặc dù nó có thể thăm một đỉnh
hơn một lần Chúng ta có thể tìm thấy các cạnh của vòng Euler với thời gian
O(E) Một vòng Hamilton của một đồ thị có hướng G = (V, E) là một vòng đơn
mà chứa mỗi đỉnh trong V Xác định khi một đồ thị có hướng có một vòng
là trong k conjunctive normal form, hoặc k-CNF, nếu nó là AND của các mệnh
đề OR của chính xác k các biến hoặc các phủ định của chúng Ví dụ, một công
Trang 2thức boolean (x1 ∨ ¬x2) ∧(¬x1∨ x3) ∧ (¬x2 ∨¬x3) là trong 2-CNF (Nó có chỉ định thỏa được x1 = 1, x2 = 0, x3 = 1) Đó là một thuật toán thời gian đa thức để
xác định khi một công thức 2-CNF thỏa được, nhưng như chúng ta sẽ thấy ởchương này, sự xác định khi một công thức 3-CNF thỏa mãn là NP-đầy đủ
Các lớp P, NP và NP-đầy đủ :
Qua chương này, chúng ta sẽ đề cập đến 3 lớp bài toán : P, NP và NPC,lớp cuối cùng là các bài toán NP-đầy đủ Chúng ta mô tả các thông tin này và sẽđịnh nghĩa chúng một cách hình thức như sau :
* Lớp P chứa các bài toán có thể giải được bằng thời gian đa thức Đặc
biệt hơn, chúng là các bài toán có thể giải được với thời gian O(nk) với một số
hằng số k, mà n là kích cỡ đặt vào của bào toán.
* Lớp NP chứa các bài toán có thể “xác minh (verifiable)" bằng thời gian
đa thức v|V|> Nghĩa là nếu chúng ta đưa ra một "certificate" của một giải pháp,
thì chúng ta có thể xác minh rằng “certificate” đó là đúng với thời gian đa thứcvới kích cỡ đặt vào của bài toán Chẳng hạn, trong bài toán vòng Hamilton, cho
một đồ thị có hướng G = (V, E), một certificate có thể là một chuỗi <v1, v2, v3, , của các cạnh |V| Dễ dàng kiểm tra bằng thời gian đa thức mà (vi, vi+1) ∈E với i =
1, 2, 3, , |V| - 1 và (v|V|, v1) ∈E Một ví dụ khác, đối với thỏa được 3-CNF, một
certificate có thể sẽ là một chỉ định của các giá trị đến các biến Chúng ta có thể
dễ dàng kiểm tra bằng thời gian đa thức mà chỉ định này thỏa được công thứcboolean Bất kỳ bài toán nào thỏa được trong P thì cũng thỏa được trong NP, nếukhi một bài toán thỏa được trong P thì có thể giải được nó trong thời gian đa thứcngay cả khi không bị đưa ra một certificate Chúng ta sẽ chính thức hóa kháiniệm này sau chương này, nhưng bây giờ chúng ta có thể tin rằng P ⊆ NP Câuhỏi đặt ra là liệu có hay không có P là một tập con thích hợp của NP Thật tình,một bài toán nằm trong lớp NPC và chúng ta đề cập đến nó như là NP-đầy đủ -nếu nó nằm trong NP và nó như là “khó” như đối với bất kỳ bài toán nào trong
NP Chúng ta sẽ định nghĩa một cách hình thức nó có nghĩa sẽ khó như bất kỳbài toán nào trong NP trong chương này Trong khi đó, chúng ta sẽ phát biểu màkhông chứng minh nếu bất kỳ bài toán NP-đầy đủ có thể giải được bằng thờigian đa thức thì mỗi bài toán NP-đầy đủ có một thuật toán thời gian đa thức.Phân lớn các nhà khoa học máy tính lý thuyết tin rằng các bài toán NP-đầy đủ đó
là khó vận dụng, khi đưa ra nhiều bài toán NP-đầy đủ mà đã nghiên cứu cho đếnnay- không có một nghiên cứu nào khám phá được một giải pháp thời gian đathức- nó sẽ làm kinh ngạc thật sự nếu tất cả chúng có thể giải được bằng thờigian đa thức Tuy nhiên, đưa ra nổ lực còn quá xa để chứng minh rằng các bàitoán NP-đầy đủ là khó vận dụng- không có một kết luận lôgic- chúng ta khôngthể loại trừ khả năng mà các bài bài toán NP-đầy đủ trong thực tế là có thể giảiđược bằng thời gian đa thức Để trở thành một người thiết kế thuật toán giỏi, bạnphải hiểu các nguyên lý cơ bản của lý thuyết NP-đầy đủ Nếu bạn có thể thiết lập
Trang 3một bài toán như NP-đầy đủ, bạn đưa ra bằng chứng tốt cho tính khó vận dụngcủa nó Như một kỹ sư, bạn sẽ sử dụng tốt hơn thời gian của bạn cho việc pháttriển một thuật toán xấp xỉ hoặc việc giải quyết một trường hợp đặc biệt dễ vậndụng khá hơn việc tìm kiếm cho một thuật toán nhanh mà giải quyết bài toánmột cách chính xác Hơn nữa, nhiều bài toán hấp dẫn nhường như không khóhơn việc phân loại, nghiên cứu đồ thị hoặc mạng máy tính chảy vào trong NP-đầy đủ Vì thế, nó quan trọng trở nên quen với lớp các bài toán đặc biệt này.
Khái quát các bài toán NP-đầy đủ :
Các phương pháp kỹ thuật chúng ta sử dụng để biểu diễn một bài toánriêng biệt là NP-đầy đủ khác với các phương pháp kỹ thuật đã sử dụng qua hầuhết cuốn sách này để thiết kế và phân tích các thuật toán Có một lý do cơ bảncho sự khác biệt này là : trong cách biểu diễn một bài toán sẽ là NP-đầy đủ,chúng ta làm một phát biểu về cách nó là khó không theo cách dễ Chúng takhông cố gắng chứng tỏ tình trạng của một thuật toán hiệu quả, nhưng cố gắnghơn rằng thuật toán không hiệu quả là tồn tại như nhau Chúng ta dựa vào 3 kháiniệm chính để biểu diễn một bài toán sẽ là NP-đầy đủ :
* Các bài toán quyết định và các bài toán tối ưu :
Nhiều bài toán thú vị là các bài toán tối ưu (optimization problems), bằng
cách mỗi giải pháp khả thi có một giá trị phù hợp và chúng ta mong ước tìm mộtgiải pháp khả thi với giá trị tốt nhất Chẳng hạn, trong một bài toán mà chúng tagọi đường đi ngắn nhất (SHORTEST-PATH), chúng ta cho một đồ thị vô hướng
G và các đỉnh u và v, chúng ta mong ước tìm đương đi từ u đến v mà sử dụng các
cạnh ít nhất NP-đầy đủ áp dụng trực tiếp không tối ưu hóa các bài toán Tuynhiên, để các bài toán quyết định, câu trả lời là đơn giản "có" hoặc "không" Mặc
dù biểu diễn cho thấy rằng một bài toán là NP-đầy đủ giới hạn chúng ta đến lĩnhvực của các bài toán quyết định, đó là một mối quan hệ thuận tiện giữa các bàitoán tối ưu và các bài toán quyết định Chúng ta thường có thể gieo một bài toántối ưu như một bài toán bài toán quyết định liên kết bởi một giới hạn trên giá trị
sẽ bị tối ưu Ví dụ, đối với đường đi ngắn nhất (SHORTEST-PATH), một bàitoán quyết định liên kết mà chúng ta gọi ĐƯỜNG ĐI (PATH), là khi, cho một
đồ thị có hướng G, các đỉnh u và v, và một số nguyên k, một đường đi tồn tại từ
u đến v bao gồm tất cả k cạnh Mối quan hệ giữa một bài toán tối ưu và bài toán
quyết định liên kết của nó làm việc trong sự ủng hộ của chúng ta khi chúng ta cốgắng chỉ ra rằng bài toán tối ưu là “khó” Bởi vì bài toán quyết định là dùngtrong một bối cảnh “dễ” hoặc ít nhất “không khó" Như một ví dụ đặc biệt,chúng ta có thể giải quyết ĐƯỜNG ĐI (PATH) bằng cách giải quyết ĐƯỜNG
ĐI NGẮN NHẤT(SHORTEST-PATH) và sau đó so sánh số các cạnh trong
đường đi ngắn nhất tìm thấy đến giá trị của bài toán quyết định tham số k Nói
cách khác, nếu một bài toán tối ưu là dễ, bài toán quyết định liên kết nó cũng là
dễ Bắt đầu bằng một phương pháp mà có nhiều liên quan đến NP-đầy đủ, nếuchúng ta có thể cung cấp bằng chứng mà một bài toán quyết định là khó, chúng
Trang 4ta cũng cung cấp bằng chứng mà bài toán tối ưu liên kết nó là khó Vì thế, ngay
cả khi nó giới hạn sự chú ý đến các bài toán quyết định, lý thuyết của NP-đầy đủthường liên quan đến nhiều các bài toán tối ưu
* Các phép rút gọn (Reductions) :
Khái niệm trên cho thấy rằng một bài toán là không khó hoặc không dễhơn các ứng dụng khác thậm chí khi cả hai bài toán là các bài toán quyết định.Chúng ta dẫn thuận tiện của ý kiến này tại phần lớn mỗi chứng minh NP-đầy đủ,
như sau : Chúng ta hãy xem như là một bài toán quyết định A, mà chúng ta sẽ
giải quyết trong thời gian đa thức Chúng ta gọi dữ liệu vào đến một bài toán
riêng biệt một trường hợp của vấn đề đó; chẳng hạn, trong ĐƯỜNG ĐI (PATH),
một instance có thể là một đồ thị đặc biệt G, các cạnh đặc biệt u và v của G và một số nguyên đặc biệt k Bây giờ cho rằng đó là một bài toán quyết định khác biệt B, mà chúng ta sẵn sàng biết cách để giải quyết bằng thời gian đa thức Cuối
cùng , cho rằng chúng ta có một thủ tục mà biến đổi mất kỳ instance α của A vào
một số instance β của B theo các tính chất sau :
1 Sự biến đổi theo thời gian đa thức
2 Các trả lời là như nhau Đó là, trả lời cho α is "có" khi và chỉ khi trả lờicho β cũng là "có."
Hình 1 Dùng một thuật toán rút gọn thời gian đa thức để giải quyết một bài toán quyết định A trong thời gian đa
thức, cho một thuật toán quyết định thời gian đa thức đối với bài toán B khác Bằng thời gian đa thức, chúng ta biến đổi một trường hợp α của A vào một β của B, chúng ta giải quyết B bằng thời gian đa thức và sử dụng trả lời đối với β như trả lời đối với α.
Chúng ta gọi một thủ tục như thế là một thuật toán rút gọn (reduction
algorithm) thời gian đa thức và, như hình 1., biểu diễn nó cung cấp cho chúng
ta một cách để giải quyết bài toán A bằng thời gian đa thức :
a Cho một instance α của bài toán A, sử dụng một thuật toán rút gọn thời
gian đa thức để biến đổi nó đến một instance β của bài toán B.
b Chạy thuật toán quyết định thời gian đa thức cho B trong instance β
c Sử dụng trả lời cho β như trả lời cho α
Theo mỗi bước mất thời gian đa thức , tất cả ba bước cùng thực hiện, vìthể chúng ta có một cách để quyết định trên α trong thời gian đa thức Nói cách khác, bằng việc rút gọn giải quyết bài toán A để giải quyết bài toán B, chúng ta
sử dụng tính “dễ thuyết phục (easiness)" của B để chứng minh tính đễ thuyết
Trang 5phục của A Sự lấy lại mà NP-đầy đủ là cách biểu diễn một bài toán khó hơn một
bài toán dễ, chúng ta sử dụng các phép rút gọn thời gian đa thức trong cách tráingược để biểu diễn một bài toán là NP-đầy đủ Chúng ta hãy lấy ý tưởng mộtbước xa hơn và biểu diễn cách chúng ta có thể sử dụng các phép rút gọn thờigian đa thức để biểu diễn rằng không một thuật toán thời gian đa thức có thể tồn
tại cho một bài toán đặc biệt B Cho rằng chúng ta có một bài toán quyết định A
mà chúng ta luôn biết rằng thuật toán thời gian không đa thức có thể tồn tại Bâygiờ chúng ta có thể sử dụng một chứng minh đơn giản bởi sự trái ngược để chỉ ra
rằng thuật toán thời gian không đa thức có thể tồn tại cho B Mặc khác cho rằng,
B có một thuật toán thời gian đa thức Sau đó, sử dụng phương pháp biểu diễn ở
hình 1, chúng ta sẽ có một cách để giải quyết bài toán A bằng thời gian đa thức,
mà các trái ngược của chúng ta đều được chấp nhận là đúng mà có thuật toán
thời gian không đa thức cho A Đối với NP-đầy đủ, chúng ta không thể thừa nhận rằng hoàn toàn có một thuật toán thời gian không đa thức cho A Phương pháp
chứng minh là tương tự, tuy nhiên, trong đó chúng ta chứng minh rằng bài toán
B là NP-đầy đủ trên sự tuyệt đối mà bài toán A cũng là NP-đầy đủ.
Một bài toán NP-đầy đủ đầu tiên (A first NP-complete problem) :
Vì kỹ thuật rút gọn dựa trên một bài toán có sẵn biết NP-đầy đủ để chứngminh một bài toán NP-đầy đủ khác, chúng ta cần một bài toán NP-đầy đủ đầutiên Bài toán đó chúng ta sẽ sử dụng là bài toán thỏa được mạch (circuit-satisfiability problem), mà chúng ta đã cho một mạch kết nối giá trị (booleancombinational circuit) gồm có các cổng VÀ (AND), HOẶC (OR) và cổng PHỦĐỊNH (NOT), chúng ta ước khi mà có bất kỳ tập giá trị các dữ liệu vào đến mạchnày mà các lý do các dữ liệu ra của nó là 1 Chúng ta sẽ chứng minh rằng bàitoán đầu tiên này là NP-đầy đủ trong phần III
Trang 62) Định nghĩa lớp NP của các bài toán thỏa được mà các giải pháp có thểthực hiện bằng thời gian đa thức Từ đó đặt ra câu hỏi P ≠ NP không ?.
3) Biểu diễn các quan hệ giữa các bài toán có thể nghiên cứu qua thời gian
đa thức “các phép rút gọn” Nó định nghĩa NP-đầy đủ và phát thảo một chứng cứ
mà một bài toán được gọi là NP-đầy đủ “ thỏa được mạch” (“circuitsatisfiability“) Tìm một bài toán NP-đầy đủ
4) Biểu diễn các bài toán khác có thể chứng minh NP-đầy đủ đơn giản bằngphương pháp luận của các phép rút gọn Phương pháp luận này đã được minhhoạ bằng cách biểu diễn hai bài toán thoả được công thức là NP-đầy đủ
5) Sự đa dạng của các bài toán chỉ ra NP-đầy đủ
1 THỜI GIAN ĐA THỨC (POLYNOMIAL TIME) :
Chúng ta bắt đầu nghiên cứu NP-đầy đủ bằng khái niệm của thời gian đathức có thể giải quyết được các bài toán Nhìn chung các bài toán này đã đề cập
là dễ vận dụng đối với Triết học chứ không phải Toán học, bởi các lý do Chúng
ta có thể đưa ra 3 tranh luận phụ :
- Thứ nhất, mặc dù đó là lý do để đề cập một bài toán yêu cầu thời gian
θ(n100) là khó , đó là một số bài toán thực tiễn mà yêu cầu thời gian theo thứ tự
như một đa thức bậc cao Thời gian đa thức có thể tính các bài toán đã được bắtgặp trong thực tiễn hoàn toàn tiêu biểu đòi hỏi mất ít thời gian cho một bài toán
là đã được khám phá ra hơn hiệu quả các thuật toán thường cho phép Thậm chínếu hiện tại thuật toán cho một bài toán có thời gian chạy tốt hơn sẽ sớm đượctìm ra
- Thứ hai, đối với nhiều mô hình lý do của sự tính toán, một bài toán có
thể đã được giải quyết bằng thời gian đa thức trong một mô hình này có thể đượcgiải quyết bằng thời gian đa thức trong một mô hình khác Ví dụ, lớp các bàitoán thỏa được trong thời gian đa thức bằng dãy số ngẫu nhiên truy cập máy đãđược sử dụng qua hầu hết trong cuốn sách này là giống lớp các bài toán có thểgiải quyết trong thời gian đa thức trên máy Turing trừu tượng Nó cũng giốnglớp bài toán có thể giải quyết bằng thời gian đa thức trong một máy tính songsong khi số các quá trình tăng đa thức với kích cỡ đặt vào
Trang 7- Thứ ba, lớp thời gian đa thức có thể giải quyết các bài toán có các thuộctính đóng, vì các đa thức đã đóng dưới phép cộng, phép nhân và phép hợp Ví
dụ, nếu lấy(đầu ra) ra một thuật toán thời gian đa thức dẫn vào một thuật toánthời gian đa thức khác, thuật toán đa hợp này là đa thức Nếu một thời gian đathức khác tạo một hằng số gọi đến thời gian đa thức các thủ tục con, thời gianchạy của thuật toán đa hợp là đa thức
1.1 Các bài toán trừu tượng (Abstract problems) :
Để hiểu lớp thời gian đa thức có thể giải quyết các bài toán, trước hết chúng
ta phải có một khái niệm hình thức của một “bài toán” là gì? Chúng ta định nghĩa
một bài toán trừu tượng Q là một quan hệ nhị phân trên một tập I của bài toán
các trường hợp (instance) và một tập S các giải pháp của bài toán.
Chẳng hạn, một trường hợp đối với đường đi ngắn nhất là một bộ ba chứa 1
đồ thị và 2 đỉnh Một giải pháp là một dãy các đỉnh trong đồ thị, có thể biểu thịdãy rỗng mà không tồn tại đường đi Bài toán đường đi ngắn nhất chính nó làquan hệ phù hợp với mỗi trường hợp của một đồ thị kết nối 2 đỉnh Vì các đường
đi ngắn nhất này là không nhất thiết phải duy nhất, một bài toán trường hợp đãcho có thể có hơn một giải pháp
Phát biểu có hệ thống này của một bài toán trừu tượng là quá bình thườngđến nỗi đã qui định cho các mục đích của chúng ta Như trên, lý thuyết NP-đầy
đủ giới hạn sự chú ý đến các bài bài toán thỏa được : có một giải pháp có/
không Trong trường hợp này, chúng ta có thể thấy một bài toán trừu tượng thỏa
được như một hàm mà các ánh xạ trường hợp từ tập I đến giải pháp tập {0,1}.
Ví dụ, một bài toán thỏa được liên quan đến đường đi ngắn nhất
(SHORTEST-PATH) là bài toán đường đi mà chúng ta thấy trước đây Nếu i= <G, u, v, k> là một trường hợp bài toán đường đi thỏa được, sau đó PATH (i) = 1 (yes) nếu một đường đi ngắn nhất từ u đến v có tại hầu hết k cạnh và ngược lại PATH (i) = 0
(no) Nhiều bài toán trừu tượng không thỏa được các bài toán nhưng tối ưu hơncác bài toán, mà một vài giá trị đều phải nhỏ nhất hoặc lớn nhất Tuy nhiên, nhưchúng ta thấy ở trên, điều đó thường là một bài toán đơn giản để viết lại một bàitoán tối ưu như một bài toán thỏa được là không khó hơn
1.2 Các mã hóa (encodings) :
Nếu một chương trình máy tính giải quyết một bài toán trừu tượng, bài toáncác trường hợp phải được trình bày bằng một cách mà chương trình dễ hiểu Một
mã hóa của một tập S của các đối tượng trừu tượng là một ánh xạ e từ S đến tập
của các chuỗi nhị phân Ví dụ, chúng ta làm quen với mã hóa các số tự nhiên N =
{0,1,2,3,4, } như các chuỗi { 0,1,10,11,100, } Sử dụng mã hóa này, e(17) =
10001 Bất cứ một ai có thể nhìn vào máy tính đại diện bởi các ký tự trên bànphím là quen với bảng mã ASCII hoặc EBCDIC Trong bảng mã ASCII, mã hóacủa A là 1000001 Thậm chí một đối tượng ghép có thể được mã hóa như mộtchuỗi nhị phân bằng cách kết nối các đại diện của các bộ phận cấu tạo của nó
Trang 8Các hình đa giác, các đồ thị, các hàm, các cặp có thứ tự, các chương trình- Tất cả
có thể mã hóa như các chuỗi nhị phân
Vì thế, một thuật toán máy tính mà “giải quyết” một vài bài toán trừu tượngthỏa được thực sự lấy một mã hóa của một bài toán trường hợp như dữ liệu vào.Chúng ta gọi một bài toán mà tập trường hợp là tập của các chuỗi nhị phân một
bài toán cụ thể Chúng ta nói rằng một thuật toán giải quyết một bài toán cụ thể
với thời gian O(T(n)) nếu khi đó nó đã qui định một bài toán trường hợp i của
độ dài n = |i|, thuật toán này có thể kéo dài giải pháp với thời gian O(T(n)) Một
bài toán cụ thể có thể giải quyết thời gian đa thức, vì thế, nếu tồn tại một thuật
toán để giải quyết nó với thời gian O(nk) cho một vài hằng số k.
Bây giờ chúng ta có thể định nghĩa hình thức độ phức tạp lớp P như tập
các bài toán thỏa được cụ thể là có thể giải quyết được thời gian đa thức
Chúng ta có thể sử dụng mã hóa để ánh xạ các bài toán trừu tượng đến các
bài toán cụ thể Đưa ra một một bài toán trừu tượng thỏa được Q ánh xạ một trường hợp tập I đến {0,1}, một mã hóa e: I → {0,1}* có thể được dùng để đem
lại một quan hệ bài toán thỏa được cụ thể, mà chúng ta biểu thị bởi e(Q) Nếu giải quyết một bài toán trừu tượng trường hợp i thuộc I là Q(i) ∈ {0,1}, sau đó
giải quyết đến bài toán thỏa được cụ thể trường hợp e(i) ∈{0,1}* cũng là Q(i).
Như một bài toán chuyên môn, có thể một số chuỗi nhị phân đại diện bài toántrừu tượng trường hợp không có nghĩa Để thuận tiện, chúng ta sẽ thừa nhận rằngbất kỳ chuỗi nào đã ánh xạ tùy ý đến 0 Vì thế, bài toán cụ thể kéo dài các giảipháp như bài toán trừu tượng trên các trường hợp chuỗi nhị phân mà đại diện các
mã hóa của các trường hợp bài toán trừu tượng
Chúng ta hãy mở rộng định nghĩa của thời gian đa thức có thể giải quyếtđược từ các bài toán cụ thể đến các bài toán trừu tượng bằng cách sử dụng các
mã hóa như cầu nối nhưng chúng ta sẽ định nghĩa độc lập bất kỳ mã hóa riêngbiệt Đó là, khả năng giải quyết một bài toán không nên phụ thuộc vào cách mãhóa bài toán Một cách đáng tiếc, nó phụ thuộc khá nhiều vào việc mã hóa
Chẳng hạn, cho rằng một số nguyên k đã được cung cấp như đặt dữ liệu vào một
thuật toán và cho rằng thời gian chạy của thuật toán là θ(k) Nếu số nguyên k đã
đưa ra in unary một chuỗi k 1’s- sau đó thời gian chạy của thuật toán là O(n)
bằng độ dài n đặt vào, là thời gian đa thức Tuy nhiên nếu chúng ta sử dụng nhị phân đại diện của số nguyên k, sau đó đặt vào độ dài là n=[lg k ] + 1 Trong
trường hợp này, thời gian chạy của thuật toán là θ(k) = θ(2 n), là số mũ tại kích cỡcủa dữ liệu vào Vì thế, sự phụ thuộc vào việc mã hóa, thuật toán chạy hoặc bằngthời gian đa thức hoặc bằng thời gian siêu đa thức
Việc mã hóa của một bài toán trừu tượng là khá quan trọng để chúng ta hiểuthời gian đa thức Chúng ta thực sự không thể nói về việc giải quyết một bài toántrừu tượng mà không chỉ rõ một mã hóa đầu tiên Việc mã hóa thực sự của mộtbài toán tạo ra một vài sự khác biệt đối với bài toán mà có thể đã giải quyết bằngthời gian đa thức Chẳng hạn, đại diện các số nguyên trong đường đáy 3 thay vì
Trang 9nhị phân không ảnh hưởng khi một bài toán có thể giải quyết bằng thời gian đathức, vì một số nguyên đã được trình bày trong đường đáy 3 có thể chuyển đếnmột số nguyên đã được trình bày trong đường đáy 2 bằng thời gian đa thức.
Chúng ta nói rằng một hàm số f : {0, 1}* → {0, 1}* là có thể tính thời gian
đa thức nếu nó tồn tại một thuật toán thời gian đa thức A mà, cho bất kỳ dữ liệu vào x∈{0, 1}*, kéo dài như đưa ra f(x) Đối với một số tập I của bài toán các trường hợp, chúng ta nói rằng 2 mã hóa e1 và e2 là đa thức quan hệ với nhau nếu chúng tồn tại 2 hàm có thể tính toán được đa thức thời gian f12 và f21 như đối với bất kỳ i ∈ I , chúng ta có f12(e1(i)) = e2(i) và f21(e2(i)) = e1(i) Đó là, mã hóa e2(i)
có thể đã tính từ việc mã hóa e1(i) bằng một thuật toán thời gian đa thức và ngược lại Nếu hai mã hóa e1 và e2 của một bài toán trừu tượng là đa thức quan
hệ, thì bài toán đó là thời gian đa thức có thể giải quyết hoặc không là độc lậpviệc mã hóa chúng ta dùng như theo các biểu diễn bổ đề
Bổ đề 1 : Lấy Q là một bài toán trừu tượng thỏa được trên một trường hợp tập I,
cho e1 và e2 là đa thức quan hệ mã hóa trên I Thì, e1(Q)∈P khi và chỉ khi
e2(Q)∈P
Chứng minh :
Chúng ta chỉ cần chứng tỏ hướng tiếp tới, khi lùi lại là đối xứng Vì thế, cho
rằng, e1(Q) có thể đã giải quyết với thời gian O(n k ) cho một vài hằng số k Hơn nữa, cho rằng đối với bất kỳ bài toán trường hợp i, việc mã hóa e1(i) có thể đã được tính từ việc mã hóa e2(i) với thời gian O(n c ) đối với một vài hằng số c, tại n=|e2(i)| Để giải quyết bài toán e2(Q), trên dữ liệu vào e2(i), đầu tiên chúng ta tính e1(i) và sau đó chạy thuật toán cho e2(Q) trên e2(i) Mất thời gian bao lâu để chạy thuật toán đó? Thảo luận của các mã hóa mất thời gian O(n c) và vì thế |
e1(i)| = O(n c), khi đưa ra một dãy tính không thể dài hơn thời gian chạy của nó
Giải quyết bài toán trên e1(i) mất thời gian O(|e1(i)| k ) = O(n ck ), là đa thức khi cả c
nó, đã mã hóa trong các đôi và đã phân cách bởi dấu phẩy (dấu ngoặc kép).(ASCII là một giản đồ mã hóa) Với một “chuẩn” mã hóa bằng tay, chúng ta cóthể lấy được từ lý do mã hóa của các đối tượng toán học, các đồ thị và các côngthức Để biểu thị chuẩn mã hóa của một đối tượng, chúng ta sẽ mã hóa đối tượng
đó bằng góc các đôi Vì thế, <G> biểu thị chuẩn mã hóa của một đồ thị G.
Trang 10Về sau chúng ta hoàn toàn dùng một mã hóa là đa thức đã quan hệ vớichuẩn mã hóa này, chúng ta có thể nói một cách hướng về các bài toán trừutượng không tham chiếu đến bất kỳ mã hóa riêng biệt nào, biết rằng việc chọn
mã hóa không ảnh hưởng đến bài toán trừu tượng là thời gian đa thức có thể giảiquyết được Tóm lại, từ nay về sau, chúng ta sẽ thừa nhận tất cả bài toán cáctrường hợp là các chuỗi nhị phân đã mã hóa dùng chuẩn mã hóa, trừ khi chúng tađịnh rõ ràng điều trái ngược Chúng ta sẽ không chú ý sự khác biệt này giữa cácbài toán trừu tượng và cụ thể Người đọc nên xem các bài toán mà xuất hiệntrong thực tiễn, tuy nhiên, bằng một chuẩn mã hóa là không rõ ràng và việc mãhóa là khác nhau
1.3 Một khung ngôn ngữ hình thức (A formal-language frameword) :
Một trong những khía cạnh thuận tiện tiêu điểm dựa trên các bài toán thỏađược là làm cho nó dễ sử dụng máy móc của lý thuyết ngôn ngữ hình thức Điềuquan trọng tại điểm này để xem lại một số các định nghĩa từ lý thuyết đó Một
bảng chữ cái Σ là một tập hạn chế các biểu tượng Một ngôn ngữ L c với Σ làtập các chuỗi bất kỳ được tạo bởi các biểu tượng từ Σ Ví dụ, nếu Σ = {0, 1}, tập
L = {10, 11, 101, 111, 1011, 1101, 10001, } là ngôn ngữ của các đại diện nhị
phân của các số hàng đầu Chúng ta biểu thị chuỗi rỗng bởi ε và ngôn ngữ rỗngbởi ∅ Ngôn ngữ của tất cả các chuỗi qua Σ là biểu thị Σ* Chẳng hạn, nếu Σ ={0, 1}, sau đó Σ* = {ε, 0, 1, 00, 01, 10, 11, 000, } là tập tất cả các chuỗi nhị
phân Mỗi ngôn ngữ L qua Σ là một tập con của Σ*
Có một thay đổi của các thao tác trên các ngôn ngữ Các thao tác tập lý
thuyết, như sự hợp và giao, theo hướng hoàn toàn từ các định nghĩa tập lý thuyết.
* Chúng ta định nghĩa phần bù của L bởi L = Σ* - L
* Nối của hai ngôn ngữ L 1 và L 2 là ngôn ngữ : L = {x 1 x 2 : x 1∈L 1 và x 2∈L 2 }
* Closure hoặc Kleene star của một ngôn ngữ L là ngôn ngữ :
L* = {ε} ∪ L ∪ L 2 ∪ L 3 ∪ , mà L k là ngôn ngữ đã được chứa bởi liên
kết L đến chính nó với k thời gian.
Từ điểm quan sát của ngôn ngữ lý thuyết, tập các trường hợp đối với bất kỳ
các bài toán thỏa được Q là tập đơn giản Σ*, mà Σ = {0, 1} Khi Q được mô tả
trọn vẹn bởi bài toán các trường hợp này mà kết quả một 1(yes) trả lời, chúng ta
có thể xem Q như một ngôn ngữ L qua Σ = {0, 1}, mà : L = {x ∈ Σ* : Q (x) = 1}.Chẳng hạn, bài toán thỏa được PATH có ngôn ngữ tương ứng :
Trang 11toán đưa ra A(x) là 1 Ngôn ngữ đã chấp nhận bởi một thuật toán A là tập các chuỗi L = {x ∈ {0,1}* : A(x) = 1}, đó là tập các chuỗi mà thuật toán đó chấp
nhận Một thuật toán A loại bỏ một chuỗi x nếu A(x) = 0.
Thậm chí nếu ngôn ngữ L là đã chấp nhận bởi một thuật toán A, thuật toán
này sẽ không cần thiết loại bỏ một chuỗi x ∉ L đã cung cấp như dữ liệu vào Ví
dụ, thuật toán này có thể lặp viễn viễn Một ngôn ngữ L đã thỏa được bởi một
thuật toán A nếu mỗi chuỗi nhị phân trong L đã chấp nhận bởi A và mỗi chuỗi
nhị phân không phải trong L là đã loại bỏ bởi A Một ngôn ngữ L đã chấp nhận
trong thời gian đa thức bởi một thuật toán A nếu nó đã chấp nhận bởi A và nếu thêm vào đó một hằng số k như đối với bất kỳ độ dài - n chuỗi x ∈ L, thuật toán
A chấp nhận x bằng thời gian Một ngôn ngữ L đã thỏa được bằng thời gian đa thức bởi một thuật toán A nếu có một hằng số k như đối với bất kỳ độ dài - n chuỗi x ∈ {0,1}* , thuật toán này hoàn toàn thỏa được khi x ∈ L bằng thời gian O(n k) Vì thế, để chấp nhận một ngôn ngữ, một thuật toán chỉ cần quan tâm đến
các chuỗi trong L, nhưng để thỏa được một ngôn ngữ cần phải chấp nhận hoàn
toàn hoặc loại bỏ mỗi chuỗi trong {0,1}*
Ví dụ, ngôn ngữ đường đi có thể đã chấp nhận bằng thời gian đa thức Một
thời gian đa thức đang chấp nhận thuật toán kiểm chứng mà G mã hóa một đồ
thị vô hướng, kiểm chứng mà u và v là các kiểm chứng trong G, dùng
breadth-first nghiên cứu để tính một đường đi ngắn nhất từ u đến v trong G và sau đó so sánh số các cạnh trên đường đi ngắn nhất được chứa k Nếu G mã hóa một đồ thị
vô hướng và đường đi từ u đến v tại hầu hết các cạnh k, thuật toán này đưa ra 1
và halts Trái lại, thuật toán này chạy vĩnh viễn Thuật toán này không thỏa được
đường đi, tuy nhiên, khi nó không cho dữ liệu ra 0 dứt khoát cho các trường hợp
mà một đường đi ngắn nhất có hơn k cạnh Một thuật toán thỏa được đường đi
phải loại bỏ dứt khoát các chuỗi nhị phân mà không phụ thuộc vào đường đi Đốivới một thuật toán thỏa được là dễ thiết kế : thay vì chạy vĩnh viễn khi không có
một đường đi từ u đến v tại hầu hết k cạnh, nó đưa ra 0 và halts Đối với các bài
toán khác, chẳng hạn như bài toán Turing’s Halting, tồn tại một thuật toán đangchấp nhận nhưng không tồn tại thuật toán quyết định
Chúng ta có thể định nghĩa một cách hình thức một lớp phức tạp như mộttập các ngôn ngữ, số hội viên mà đã được xác định bởi một độ đo phức tạp,
chẳng hạn thời gian chạy của một thuật toán xác định khi cho một chuỗi x thuộc ngôn ngữ L Định nghĩa thực sự của một lớp phức tạp là một cái gì đó hơn kỹ
thuật - độc giả đã quan tâm đến bởi Hartmanis và Steams
Sử dụng khung ngôn ngữ lý thuyết này, chúng ta có thể cung cấp một địnhnghĩa khác của lớp phức tạp P :
P = {L ⊆ {0,1}* : có tồn tại một thuật toán A mà quyết định L bởi thời gian
đa thức}
Sự thật, P cũng là lớp các ngôn ngữ mà có thể đã được chấp nhận bởi thờigian đa thức
Trang 12Định lý 2 : P = {L : L đã chấp nhận bởi một thuật toán thời gian đa thức}.
mà quyết định L Bởi vì A chấp nhận L với thời gian O(n k) đối với một vài hằng
số k, cũng tồn tại một hằng số c như A chấp nhận L tại hầu hết các bước T = cn k
Đặt bất kỳ chuỗi x, thuật toán A’ mô phỏng hành động của A đối với thời gian T Mã hóa thời gian T , thuật toán A’ kiểm tra hoạt động của A Nếu A chấp nhận
x , sau đó A’ chấp nhận x bằng cách đặt vào a 1 Nếu A không chấp nhận x, thì A’ loai bỏ x bằng cách đặt vào a 0 Trên hết của A’ mô phỏng A không tăng thời gian chạy bởi hơn một yếu tố đa thức và vì thế A’ là một thuật toán thời gian đa thức mà quyết định L.
Chú ý rằng chứng tỏ định lý 2 là không có tính cách xây dựng Đối với một
ngôn ngữ L∈ P, chúng ta thực sự không thể biết một giới hạn trên một thời gian
chạy cho thuật toán A mà chấp nhận L Tuy nhiên, chúng ta biết rằng như một giới hạn tồn tại, rằng một thuật toán A’ tồn tại có thể kiểm tra giới hạn, ngay khi chúng ta không thể tìm thấy thuật toán A’ một cách dễ dàng
Bài tập:
1 Định nghĩa bài toán tối ưu đường đi có độ dài lớn nhất
(LONGEST-PATH-LENGTH) như quan hệ phù hợp với mỗi trường hợp của một đồ thị vô hướng và
2 đỉnh với số các cạnh trong một đường đi đơn dài nhất giữa 2 đỉnh Định nghĩa
bài toán thỏa được LONGEST-PATH = {<G, u, v, k> : G = (V, E) là một đồ thị
vô hướng, u, v ∈ V, k ≥ 0 là một số nguyên và có tồn tại một đường đi đơn từ u đến v trong G chứa ít nhất k cạnh} Cho thấy rằng bài toán tối ưu LONGEST-
PATH-LENGTH có thể được giải quyết bằng thời gian đa thức khi và chỉ khiLONGEST-PATH ∈ P
2 Cho một định nghĩa hình thức đối với bài toán tìm vòng đơn dài nhất trong
một đồ thị vô hướng Cho một quan hệ quyết định bài toán Cho ngôn ngữ tươngứng để quyết định bài toán
3 Cho một mã hóa hình thức của các đồ thị có hướng như các chuỗi nhị phân
dùng một ma trận-liền kề đại diện Như sử dụng một danh sách-liền kề đại diện.Biện luận rằng hai đại diện là quan hệ hoàn toàn đa thức
4 Thuật toán qui hoạch động đối với 0-1 bài toán ba lô đã yêu cầu trong bài tập
16.2-2 là một thuật toán thời gian đa thức phải không? Giải thích
5 Chỉ ra một thuật toán thời gian đa thức trái ngược làm tại hầu hết một hằng số
của các các lệnh đến thời gian đa thức thủ tục con chạy với thời gian đa thức
Trang 13nhưng một số các lệnh đa thức thủ tục con có thể kết quả trong một thuật toánthời gian-theo luật số mũ ( exponential-time).
6 Chỉ ra lớp P, xem như một tập các ngôn ngữ là mã hóa dưới phép hợp, phép
giao, phép nối, phép phần bù và Kleene star Nếu L1, L2∈ P, thì L1∪L2 ∈ P,
2 SỰ XÁC MINH THỜI GIAN ĐA THỨC ( POLYNOMIAL-TIME VERIFICATION) :
Bây giờì chúng ta nhìn vào các thuật toán mà “chứng minh” số hội viên
trong các ngôn ngữ chẳng hạn, cho rằng để một trường hợp <G, u, v, k> của bài toán quyết định đường đi, chúng ta cũng cho một đường đi p từ u đến v Chúng
ta có thể dễ dàng kiểm tra bất cứ khi nào độ dài của p tại hầu hết k và nếu chúng
ta có thể xem p như một “chứng nhận” mà trường hợp quả thực phụ thuộc vào
đường đi Sau đó, đường đi thuộc P- trên thực thế, đường đi có thể giải quyết tạithời gian tuyến tính- và vì thế việc chứng minh số hội viên từ một chứng nhậnmất nhiều thời gian giải quyết bài toán phức tạp Bây giờ chúng ta sẽ ví dụ mộtbài toán mà chúng ta biết thời gian đa thức không quyết định thuật toán, cho mộtchứng nhận, chứng minh là dễ dàng
2.1 Các vòng Hamilton (Hamiltonian cycles) :
Bài toán tìm kiếm một vòng Hamilton trong một đồ thị vô hướng đã đượchọc hơn một trăm năm qua Thông thường, một vòng Hamilton của một đồ thị vô
hướng G = (V, E) là một vòng đơn chứa mỗi đỉnh trong V Một đồ thị chứa một
vòng Hamilton là nói đến người theo những nguyên tắc của Hamilton; Trái lại, lànói đến người không theo những nguyên tắc của Hamilton Bondy và Murty tríchdẫn một bức thư bởi W R Hamilton mô tả một trò chơi toán học trên khối mườihai mặt (Hình 2.(a)) trong đó một người chơi phải hoàn toàn dẫn đến từ mộtvòng chứa tất cả các đỉnh Khối mười hai mặt này là Hamilton và (Hình 2.(a))chỉ ra một vòng Hamilton Không phải tất cả các đồ thị là Hamilton, tuy nhiên, ví
dụ (Hình (b)) chỉ một đồ thị chia đôi với một số lẻ các đỉnh Bài tập 2 yêu cầubạn chỉ ra rằng tất cả các đồ thị là không Hamilton
Chúng ta có thể định nghĩa bài toán vòng Hamilton, “Một đồ thị G có mộtvòng Hamilton không?” như một ngôn ngữ hình thức :
HAM-CYCLE = {<G> : G là một đồ thị Hamilton}.
Một thuật toán có thể quyết định ngôn ngữ HAM-CYCLE như thế nào ?
Cho một trường hợp bài toán <G>, một quyết định thuật toán có thể liệt kê tất cả các phép hoán vị của các đỉnh của G và sau đó kiểm tra mỗi phép hoán vị để thấy
nếu nó là một đường đi Hamilton Thời gian chạy của thuật toán này là gì? Nếu
chúng ta dùng mã hóa “hợp lý” của một đồ thị như ma trận liền kề của nó, số m
của các đỉnh trong đồ thị là Ω n , mà n = |<G>| là độ dài mã hóa của G Đó là m!
các phép hoán vị của các đỉnh có thể thực hiện và vì thế thời gian chạy là Ω(m!)
= Ω n !) = Ω(2 n ), mà không O(n k ) đối với hằng số k Vì thế, thuật toán ngây
Trang 14thơ này không chạy với thời gian đa thức Sự thật, bài toán vòng Hamilton làNP-đầy đủ, như chúng ta sẽ chứng tỏ trong phần V.
Hình 2 (a) một đồ thị đại diện các đỉnh, các cạnh và các mặt của một khối mười hai mặt, với một vòng Hamilton biểu
diễn bởi các cạnh đã bôi đen (b) Một đồ thị chia đôi với một số lẻ các đỉnh Như bất kỳ đò thị là không Hamilton
2.2 Các thuật toán xác minh (Verification algorithms) :
Xem nhẹ một bài toán dễ hơn Cho rằng, một người bạn nói với bạn rằng
cho một đồ thị G là Hamilton và sau đó chứng tỏ bằng cách đưa bạn các đỉnh
theo thứ tự dọc vòng Hamilton Chắc chắn nó sẽ dễ dàng để xác minh bằngchứng : đơn giản rằng xác minh vòng đã cung cấp là Hamilton bằng cách kiểm
tra khi nó là phép hoán vị của các đỉnh của V và khi đó mỗi liên tiếp các cạnh
dọc theo vòng thực sự tồn tại trong đồ thị Thuật toán xác minh này có thể đã
thực hiện một cách chắc chắn để chạy với thời gian O(n 2 ); với n là độ dài mã hóa của G Vì thế, một chứng tỏ rằng một vòng Hamilton tồn tại trong một đồ thị có
thể đã xác minh trong thời gian đa thức
Chúng ta định nghĩa một thuật toán xác minh như bị một thuật toán hai đối
số (two-argument) A, mà một đối số là một chuỗi x đặt vào bình thường và một đối số khác là một chuỗi nhị phân y được gọi là một chứng nhận Một thuật toán hai đối số A là :
L= { x∈{0, 1}* : có tồn tại y∈{0, 1}* như là A(x,y) = 1 }
Bằng trực giác, một thuật toán A xác minh một ngôn ngữ L nếu cho bất kỳ chuỗi x ∈ L, có một chứng nhận y mà A có thể dùng để chứng tỏ rằng x ∈ L Hơn nữa, cho bất kỳ chuỗi x ∉ L, không có chứng nhận chứng tỏ rằng x ∈ L Chẳng hạn, trong bài toán vòng Hamiton, chứng nhận là liệt kê các đỉnh trong
một số vòng Hamilton Nếu một đồ thị là Hamilton, vòng Hamilton của chính nócung cấp đủ thông tin để xác minh sự kiện này
Ngược lại, nếu một đồ thị không phải là Hamilton, không có liệt kê các đỉnh
mà có thể đùa cợt thuật toán xác minh vào việc tin rằng đồ thị là Hamilton, khithuật toán xác minh kiểm tra một cách cẩn thận đã đưa ra “vòng” là chắc chắn
2.3 Độ phức tạp lớp NP (The complexity class NP) :
Độ phức tạp lớp NP là lớp các ngôn ngữ có thể đã xác minh bởi một thuật
toán thời gian đa thức Chính xác hơn, một ngôn ngữ L phụ thuộc vào NP nếu và
Trang 15chỉ nếu có tồn tại một thuật toán thời gian đa thức hai dữ liệu vào (two-input) A
và hằng số c như :
L= { x∈{0, 1}* : có tồn tại một chứng nhận y với | y | = 0 (| xc |) như là
A(x,y)=1 }.
Chúng ta nói rằng thuật toán A xác minh ngôn ngữ L bằng thời gian đa thức.
Từ thảo luận trên bài toán vòng Hamilton, nó cho phép HAM-CYCLE ∈
NP (Nó luôn tốt để biết rằng một tập quan trọng là không rỗng)
Hơn nữa, nếu L ∈ P, thì L ∈ NP, khi đó nếu có một thuật toán thời gian đa
thức để quyết định L, thuật toán đó có thể chuyển đổi một cách dễ dàng đến một
thuật toán xác minh mà đơn giản bỏ qua bất kỳ chứng nhận và chấp nhận một
cách chính xác các chuỗi các dữ liệu vào của nó xác định trong L Vì thế, P ⊆
NP
Không biết khi nào mà P = NP, nhưng hầu hết các nhà nghiên cứu tin rằng
P và NP là không cùng lớp với nhau Bằng trực giác, lớp P chứa các bài toán cóthể đã giải quyết một cách nhanh chóng Bạn có thể đã học từ kinh nghiệm mà
nó thường khó để giải quyết một bài toán từ hỗn tạp hơn để xác minh một giảipháp được đại diện một cách rõ ràng, đặc biệt khi làm việc dưới thời gian ràngbuộc Tóm lại, các nhà khoa học máy tính lý thuyết tin rằng sự tương đồng này
mở rộng các lớp P và NP và như thế NP gồm các ngôn ngữ không có trong P
Có nhiều chứng cớ thuyết phục mà P ≠ NP - tồn tại các ngôn ngữ mà đầy đủ” Chúng ta sẽ học lớp này trong phần III
“NP-Hình 3 Bốn khả năng cho các mối quan hệ giữa các lớp phức tạp Một mỗi biểu đồ, một vùng mã hóa khác chỉ một
quan hệ tập con riêng (a)P=NP=co-NP Hầu hết các nhà nghiên cứu đề cập khả năng này là không giống nhau (b) Nếu NP đóng dưới phần bù, thì NP=co-NP, thì không cần trường hợp mà P=NP (c) P=NP ∩ co-NP,nhưng NP không đóng dưới phần bù (d) NP ≠ co-NP và P ≠ NP ∩ co-NP Hầu hết các nhà nghiên cứu đề cập khả năng này là không giống nhau
Nhiều câu hỏi cơ bản khác vượt ra ngoài giới hạn P ≠ NP câu hỏi còn lại đãkhông được giải quyết Mặc dù, nhiều công việc bởi nhiều nhà nghiên cứu, thậm
chí không một người nào biết nếu lớp NP mã hóa dưới phần bù Đó là L ∈ NPđưa đến L∈ NP hay không ? Chúng ta định nghĩa độ phức tạp lớp NP-đầy đủ
như tập các ngôn ngữ L như thế L∈ NP Câu hỏi của NP mã hóa dưới phần bù
có thể đã được nói lại như khi NP=co-NP Khi P mã hóa dưới phần bù (Bài tậpI.6), nó cho phép rằng P⊆ NP ∩ co-NP Tuy nhiên, một lần nữa nó không biết
Trang 16khi nào mà P⊆ NP ∩ co-NP hoặc khi nào mà có một số ngôn ngữ trong NP ∩
co-NP - P Hình 3 biểu diễn 4 khả năng có thể thực hiện được
Vì thế, đối với chúng ta việc hiểu chính xác các mối quan hệ giữa P và NP
là không đầy đủ Tuy nhiên, bằng cách thăm dò lý thuyết của NP-đầy đủ, chúng
ta sẽ tìm các khó khăn trong việc chứng tỏ các bài toán khó là từ một quan điểmthiết thực không gần quá lớn chúng ta có thể giả định
Bài tập :
1 Xem như ngôn ngữ GRAPH-ISOMORPHISM = {<G1, G2> : G1 và G2 là các
đồ thị đẳng cấu} Chứng tỏ rằng GRAPH-ISOMORPHISM ∈ NP bằng cách
mô tả một thuật toán thời gian đa thức để xác minh ngôn ngữ đó
2 Chứng tỏ rằng một đồ thị chia đôi vô hướng với một số lẻ các đỉnh, thì G
không Hamilton
3 Chỉ ra rằng nếu HAM-CYCLE ∈ P, thì bài toán liệt kê các đỉnh của một vòngHamilton, theo thứ tự, là thời gian đa thức có thể giải quyết được
4 Chứng tỏ rằng lớp NP các ngôn ngữ là đã mã hóa dưới phép hợp, phép giao,
phép nối và Kleene star Thảo luận sự đóng kín của NP dưới phần bù
5 Chỉ ra rằng bất kỳ ngôn ngữ trong NP có thể đã được quyết định bởi một thuật
toán chạy với thời gian 2O(nk) cho một số hằng số k.
6 Một đường Hamilton trong một đồ thị là một đường đơn mà thăm mỗi đỉnh
đúng một lần Chỉ ra rằng ngôn ngữ HAM-PATH = {<G, u, v> : có một đường Hamilton từ u đến v trong đồ thị G } thuộc NP.
7 Chỉ ra rằng bài toán đường đi Hamilton có thể đã được giải quyết bằng thời
gian đa thức trên các đồ thị không vòng vô hướng Cho một thuật toán có hiệuquả cho bài toán đó
8 Lấy ∅ một công thức boolean đã được đặt từ giá trị đặt vào các biến x1, x2, , xk,phủ định (negations) (¬), VÀ (∧), HOẶC (∨) và parentheses Công thức ∅
là một phép lặp thừa nếu nó định giá đến 1 cho mỗi chỉ định của 1 và 0 để đặtvào các biến Định nghĩa phép lặp thừa (TAUTOLOGY) như ngôn ngữ của côngthức boolean mà là các phép lặp thừa Chỉ ra rằng TAUTOLOGY ∈ co-NP
9 Chứng tỏ rằng P ⊆ co-NP
10 Chứng tỏ rằng nếu NP ≠ co-NP, thì P ≠ NP.
11 Lấy G là một đồ thị vô hướng liên thông với ít nhất 3 đỉnh và lấy G3 đồ thịđược chứa bởi sự liên kết tất cả các cặp của các đỉnh là đã liên thông bởi một
đường trong G của độ dài ít nhất 3 Chứng tỏ rằng G3 là Hamilton (Gợi ý : Đặt
một cây spanning cho G và sử dụng một đối số qui nạp).
3 NP-ĐẦY ĐỦ VÀ SỰ RÚT GỌN (NP-COMLPETENESS AND REDUCIBILITY) :
Có lẽ hầu hết lý do thuyết phục tại sao các nhà khoa học máy tính lý thuyếttin rằng P ≠ NP là hiện tượng có thực của lớp các bài toán “NP-đầy đủ” Lớp này
có tính chất ngạc nhiên rằng nếu bất kỳ bài toán NP-đầy đủ có thể đã giải được
Trang 17bằng thời gian đa thức, thì mỗi bài toán trong NP có một giải pháp thời gian đathức, đó là, P = NP
Ngôn ngữ HAM-CYCLE là một bài toán NP-đầy đủ Nếu chúng ta có thểquyết định HAM-CYCLE bằng thời gian đa thức, thì chúng ta có thể giải quyếtmỗi bài toán trong NP bằng thời gian đa thức Sự thật, nếu NP-P không rỗng,chúng ta sẽ nói một cách chắc chắn rằng HAM-CYCLE ∈ NP-P
Trong một hoàn cảnh, các ngôn ngữ NP-đầy đủ là các ngôn ngữ “khó nhất”trong NP Trong phần này, chúng ta sẽ chỉ ra cách so sánh mối quan hệ “khôngđổi” của các ngôn ngữ sử dụng một khái niệm chính xác được gọi là “ rút gọnđược thời gian đa thức” Sau đó chúng ta định nghĩa hình thức các ngôn ngữ NP-đầy đủ và chúng ta hoàn thành bởi bản tóm tắt một chứng tỏ rằng một ngôn ngữnhư thế được gọi là CIRCUIT-SAT, là NP-đầy đủ Phần IV và V, chúng ta sẽ sửdụng khái niệm của rút gọn được để chỉ ra rằng nhiều bài toán khác là NP-đầyđủ
3.1 Sự rút gọn (Reducibility) :
Bằng trực giác, một bài toán Q có thể đã biến đổi bài toán Q’ khác nếu bất
kỳ trường hợp của Q có thể “đã nói lại dễ dàng” như một trường hợp của Q’, giải pháp này cung cấp một giải pháp đến trường hợp của Q Chẳng hạn, bài toán của việc giải quyết các phương trình tuyến trong một vô hạn x biến đổi đến bài toán của việc giải quyết các phương trình bậc hai Cho một trường hợp ax+b = 0, chúng ta chuyển nó đến 0x 2 +ax +b = 0, giải pháp mà cung cấp một giải pháp đến ax+b = 0.
Vì thế, nếu một bài toán Q biến đổi đến bài toán Q’ khác, trong hoàn cảnh
đó, thì Q là “không khó để giải quyết” hơn Q’ Trở lại khuôn khổ ngôn ngữ
thông thường của chúng ta để quyết định các bài toán, chúng ta nói rằng một
ngôn ngữ L1 là rút gọn được thời gian đa thức đến một ngôn ngữ L2, được viết L1 ≤ p L2 , nếu có tồn tại thời gian đa thức có thể tính hàm f : {0, 1}* → {0, 1}*
như đối với tất cả x ∈{0, 1}*
x ∈L1 nếu và chỉ nếu f(x) ∈L2
Chúng ta gọi hàm f này là sự rút gọn hàm và một thuật toán thời gian đa thức F mà tính toán f được gọi là một sự rút gọn thuật toán.
Trang 18Hình 4 Một minh họa của một thời gian đa thức rút gọn từ một ngôn ngữ L1 đến một ngôn ngữ L 2 qua một hàm rút gọn f Đặt bất kỳ x ∈{0, 1}*, hỏi khi mà x ∈L có giống trả lời như hỏi khi mà f(x) ∈ L 2
Hình 4 minh họa ý tưởng của một sự rút gọn thời gian đa thức từ một ngôn
ngữ L1 đến ngôn ngữ L2 khác Mỗi ngôn ngữ là một tập con của {0, 1}* Hàm rút gọn f này cung cấp một phép ánh xạ thời gian đa thức như thế nếu x ∈L1 , thì f(x) ∈L2 Hơn nữa, nếu x ∉L1 thì f(x) ∉L2 Vì thế, hàm rút gọn này ánh xạ bất
kỳ trường hợp x của quyết định bài toán được đại diện bởi ngôn ngữ L1 đến một trường hợp f(x) của bài toán được đại diện bởi ngôn ngữ L2 Cung cấp một trả lời khi f(x) ∈L2 hoàn toàn có hướng, cung cấp trả lời khi x ∈L1
Các rút gọn thời gian đa thức cho chúng ta một công cụ mạnh mẽ để chứng
Hình 5 Chứng minh của Bổ đề 3 Thuật toán F là một thuật toán rút gọn mà tính toán hàm rút gọn f từ L1 đến L2 với
thời gian đa thức và A2 quyết định là một thuật toán thời gian đa thức quyết định L2.Đã minh họa một thuật toán A1
quyết định khi mà x ∈ L1 bằng cách sử dụng F để chuyển bất kỳ dữ liệu đặt vào x vào f(x) và sau đó sử dụng A2 để quyết định
khi mà f(x) ∈ L2
Hình 5 minh họa đặt A1 Đưa dữ liệu vào x ∈ {0, 1}*, thuật toán A1 này dùng F để chuyển x vào f(x) và sau đó nó dùng A2 để thử khi f(x) ∈L2 Đưa ra A2 là giá trị để cung cấp như đưa ra từ A1.
Sự đúng đắn của A1 theo điều kiện (I) Thuật toán này chạy với thời gian đa thức, khi cả F và A2 chạy với thời gian đa thức (xem hình I.5).
3.2 NP-đầy đủ (NP-completeness) :
Các rút gọn thời gian đa thức cung cấp một phương tiện thông thường choviệc biểu diễn một bài toán là ít khó như bài toán khác, qua một thừa số thời gian
đa thức Đó là, nếu L1 ≤ p L2 , thì L1 là thừa số đa thức không khó hơn L2, mà tại
sao “ít hơn hoặc bằng” natation cho sự rút gọn là giúp trí nhớ Bầy giờ chúng ta
có thể định nghĩa tập của các ngôn ngữ NP-đầy đủ là các bài toán khó nhất trongNP
Trang 19Một ngôn ngữ L ⊆ {0, 1}* là NP-đầy đủ nếu :
(1) L ∈ NP và
(2) L’ ≤ p L đối với mỗi L’ ∈ NP
Nếu một ngôn ngữ L thỏa được tính chất (2), nhưng không cần thiết tính chất (1), chúng ta nói rằng L là NP-khó Chúng ta cũng định nghĩa lớp NPC của
các ngôn ngữ NP-đầy đủ
Theo lý thuyết cho rằng, NP-đầy đủ là tại điểm then chốt của tác dụngquyết định khi P=NP
Định lý 4 : Nếu bất kỳ bài toán NP-đầy đủ có thể giải quyết được thời gian đa
thức, thì P=NP Tương đương, nếu bất kỳ bài toán trong NP không thể giải quyếtthời gian đa thức, thì không thể giải quyết bài toán NP-đầy đủ là thời gian đathức
Chứng minh :
Cho rằng L ∈ P và L ∈ NPC Đối với bất kỳ L’ ∈ NP, chúng ta có L’ ≤p L
bởi tính chất (2) của định nghĩa NP-đầy đủ Vì thế, theo Bổ đề 3, chúng ta cũng
NP, dẫn đến các mối quan hệ giữa P, NP, và NPC biểu diễn ở hình 6
Nhưng đối với tất cả chúng ta biết rằng, một người nào đó có thể thấy mộtthuật toán thời gian đa thức cho một bài toán NP-đầy đủ, vì thế chứng tỏ rằngP=NP
Tuy nhiên, khi thuật toán không phải thời gian đa thức cho bất kỳ bài toánNP-đầy đủ chưa được tìm ra, một chứng tỏ rằng một bài toán là NP-đầy đủ cungcấp bằng chứng tuyệt vời cho tính khó của nó
Hình 6 Hầu hết các nhà khoa học máy tính lý thuyết xem các mối quan hệ giữa P, NP và NPC như thế nào? Cả P và
NPC là hoàn toàn chứa không quá NP và P ∩ NPC = ∅
3.3 Thỏa được mạch (Circuit Satisfiability) :
Trang 20Chúng ta đã định nghĩa khái niệm của một bài toán NP-đầy đủ nhưng vớiquan điểm này, chúng ta không thực sự chứng tỏ rằng bất kỳ bài toán là NP đầy
đủ Mỗi chúng ta chứng tỏ rằng tại ít nhất một bài toán là NP-đầy đủ, chúng ta cóthể sử dụng thời gian đa thức rút gọn như một công cụ để chứng tỏ NP-đầy đủcủa các bài toán khác vì thế bây giờ chúng ta chứng tỏ tình trạng của một bàitoán NP đầy đủ : bài toán thỏa được mạch
Tuy nhiên bằng chứng chính thức bài toán thỏa được mạch là NP đầy đủyêu cầu kỹ thuật chi tiết nằm ngoài phạm vi của bài tập này Thay vì chúng ta sẽ
mô tả 1 cách không trang trọng một bằng chứng dựa trên sự hiểu biết cơ bản của
sự liên kết các mạch giá trị
Sự liên kết các mạch giá trị xây dựng trong các phân tử liên kết giá trị mà
có mối liên hệ với nhau bởi các dây (wires) Một phân tử liên kết giá trị là bất kỳphần tử mạch mà có 1 hằng số của giá trị dữ liệu vào và ra biểu diễn 1 hàm cácgiá trị boolean đã đưa ra từ tập {0,1} mà 0 đại diện SAI và 1 đại diện ĐÚNG Các phần tử kết nối giá trị mà chúng ta dùng trong bài toán thỏa được mạchtính 1 hàm boolean đơn giản và được biết như các cổng logic
Hình 7 biểu diễn 3 cổng logic cơ bản mà chúng ta dùng trong bài toán thỏađược mạch cổng NOT (phủ định) cổng AND (và) và cổng OR (hoặc) Cổng
NOT lấy một chuỗi nhị phân đơn giản đặt vào x mà giá trị là 0 hoặc 1, và cho ra một nhị phân dữ liệu ra g mà giá trị đối lập với giá trị đặt vào hai cổng khác lấy 2 nhị phân đặt vào x và y và cho ra một nhị phân ra z.
Thao tác của mỗi cổng và của bất kỳ phân tử kết nối giá trị có thể đã mô tảbởi 1 bảng chân trị, biễu diễn dưới mỗi cổng ở hình 7 Một bảng chân trị cho các
dữ liệu ra của phân tử kết nối được mỗi khả năng có thể của các dữ liệu vào.Chẳng hạn, bảng chân trị đối với cổng OR nó cho chúng ta thấy rằng khi các dữ
liệu vào là x = 0 và y = 1 thì giá trị dữ liệu ra là z = 1 Chúng ta dùng các biểu
tượng ¬ để chỉ hàm NOT (phủ định), ∧ để chỉ hàm AND(và) , và ∨ để chỉ hàm
OR (hoặc)
Vì thế , ví dụ : 0 ∨ 1 = 1
Hình 7 Ba cổng logic cơ bản, với các dữ liệu vào ra là nhị phân Dưới mỗi cổng là bảng chân trị mô tả các phép
toán của cổng đó (a) là cổng PHỦ ĐỊNH (NOT), (b) là cổng VÀ (AND), (c) là cổng HOẶC (OR)
Trang 21Chúng ta có thể tổng quát hóa các cổng ANDì và OR để lấy hơn 2 dữ liệuvào Một cổng AND dữ liệu ra là 1 nếu tất cả dữ liệu vào của nó là 1, và ngượclại dữ liệu ra của nó là 0 Một cổng OR dữ liệu ra là 1 nếu bất kỳ các dữ liệu vàocủa nó là 1 và ngược lại dữ liệu ra của nó là 0
Một mạch kết hợp boolean chứa một hoặc nhiều hơn các phần tử kết nối giátrị đã có mối liên hệ với nhau bởi các dây (wires) Một dây có thể kết nối dữ liệucủa một phần tử đến dữ liệu đến dữ liệu vào của một phần tử khác, bởi sự cungcấp giá trị dữ liệu của phần tử đầu tiên như một giá trị dữ liệu vào của một phần
tử thứ hai Hình 8, biểu diễn 2 mạch kết hợp boolean giống nhau; chúng khácnhau chỉ một cổng Phần (a) của hình cũng chỉ các giá trị trên các dây cá nhân,
cho dữ liệu vào < x 1 =1, x 2 =1, x 3=1> Mặc dù, một dây đơn có thể không có nhiềuhơn một phần tử kết nối dữ liệu ra đã kết nối với nó, nó không thể dẫn nhiềuphần tử các dữ liệu vào Số phần tử các dữ liệu vào dẫn bởi một dây được gọi là
hệ số phân đầu ra (fan-out) của dây đó Nếu không có phần tử dữ liệu ra đã kếtnối đến một dây, dây đó là một mạch đặt vào, chấp nhận các giá trị dữ liệu vào
từ một nguồn ngoài Nếu không có phần tử đặt vào đã kết nối đến một dây, dây
đó là một mạch dữ liệu ra, cung cấp các kết quả của phép tính mạch đến bênngoài Đối với mục đích của định nghĩa này bài toán thỏa được mạch chúng tagiới hạn số mạch các dữ liệu đối với 1, mặc dù trong thực tế thiết kế phần cứng,một mạch kết hợp boolean có thể có nhiều dữ liệu vào
Các mạch kết hợp boolean không chứa vòng Mục đích của chúng ta là tạo
một đồ thị có hướng G=<V,E> với một đỉnh cho mỗi phần tử kết nối và với k cạnh có hướng cho mỗi dây mà hệ số phân đầu ra (fan-out) là k; đó là một cạnh (u,v) có hướng nếu một dây kết nối dữ liệu ra của phần tử u đến 1 dữ liệu vào của phần tử v Sau đó G phải không vòng (acylic) Một chỉ định chân trị cho một
mạch kết hợp boolean là một tập các giá trị dữ liệu vào boolean Chúng ta nóirằng một mạch kết hợp boolean dữ liệu ra 1 là chỉ định thỏa được : một chân trịchỉ định mà các lý do dữ liệu ra của mạch đó sẽ là 1 Ví dụ, mạch ở hình 8 (a) có
thể chỉ định thỏa được < x1=1, x2=1, x3=0> và vì thế nó là có thể thỏa được Như bài tập II.1 yêu cầu bạn biểu diễn, không chỉ định của các giá trị đến x1, x2 và x3
các lý do mạch ở hình 8 (b) để cho ra một dữ liệu ra 1; nó luôn luôn cho ra 0, vìthế nó không thể thỏa được
Trang 22Hình 8 Hai trường hợp của bài toán thỏa được mạch Hình (a), chỉ định (x1=1, x2=1, x3=0) đưa các dữ liệûu vào của
các trường hợp mạch này dữ liệu ra của mạch là 1 Vì thế mạch là thoả được Hình (b), không chỉ định đến các dữ liệu và của mạch này có thể do dữ liệu ra của mạch là 1 Vì thế, mạch đó là không thỏa được.
Bài toán thỏa được mạch là “Cho một mạch kết hợp boolean bao gồm cáccổng AND, OR, NOT là có thể thỏa được hay không ?”
Tuy nhiên chúng ta phải đồng ý một mã hóa chuẩn cho các mạch, kích cỡcủa một mạch kết hợp boolean là số các phần tử kết nối giá trị cộng số các dây
trong mạch 1 có thể đặt một đồ thị mã hóa mà ánh xạ bất kỳ cho mạch C vào một chuỗi nhị phân <C> mà độ dài là đa thức với kích cỡ của mạch chính nó.
Như một ngôn ngữ hình thức, chúng ta có thể định nghĩa :
CIRCUIT-SAT = { <C> : C có thể thỏa được một mạch kết hợp boolean }.
Bài toán thỏa được mạch (circuit-satisfiability) xuất hiện trong vùng trợgiúp máy tính tối ưu hóa phần cứng Nếu một mạch con luôn luôn cho ra 0, màmạch con có thể đã được thay thế bởi 1 mạch con đơn giản hơn mà bỏ qua tất cảcác cổng logic và cung cấp giá trị hằng 0 như nó đã đưa ra Nó sẽ giúp ích chomột thuật toán thời gian đa thức đối với bài toán này
Cho một mạch C, chúng ta có thể cố gắng xác định khi nó không thể thỏa
được bởi sự kiểm tra đơn giản tất cả các chỉ định có thể đến các dữ liệu vào Tuy
nhiên, nếu có k dữ liệu vào, có 2 k các chỉ định có thể Khi kích cỡ của C là đa thức trong k, việc kiểm tra mất thời gian Ω(2k), là siêu đa thức (superpolynomial)với kích cỡ của mạch Thực tế, có bằng chứng cho rằng, các tồn tại thuật toángian không đa thức giải quyết bài toán thỏa được mạch vì thỏa được mạch là NP-đầy đủ Chúng ta làm vỡ bằng chứng của sự kiện này vào hai phần, dựa trên haiphần của định nghĩa NP-đầy đủ
Bổ đề 5: Bài toán thỏa được mạch (circuit-satisfiability) thuộc lớp NP.
Chứng minh :
Chúng ta sẽ cung cấp một dữ liệu vào 2 thuật toán thời gian đa thức A có thể chứng minh CIRCUIT-SAT Mỗi dữ liệu vào A là một mạch kết hợp C Dữ
liệu vào khác là một chứng nhận (cirtificate) tương ứng đến một chỉ định của các
giá trị boolean đến các dây trong C (Xem bài tập III.4 đối với một chứng nhận
nhỏ hơn)
Thuật toán A đã được xây dựng như sau Mỗi cổng logic trong mạch, nó
kiểm tra đã cung cấp bởi chứng nhận trên dây dữ liệu ra là hoàn toàn đúng đãtính như một hàm của các giá trị trên các dây dữ liệu vào Sau đó, nếu cho ratoàn bộ mạch là 1, thuật toán dữ liệu ra 1, khi các giá trị đã gán đến các dữ liệu
vào của C cung cấp 1 chỉ định thỏa được Trái lại, A dữ liệu ra là 0.
Khi một mạch thỏa được C là dữ liệu vào thuật toán A, đó là một chứng nhận mà độ dài đa thức trong kích cỡ của C là lý do A dữ liệu ra 1 Khi một mạch không thỏa được là dữ liệu vào, không chứng nhận nào có thể đánh lừa A
và tin tưởng rằng mạch đó có thể thỏa được Một thuật toán chạy vơi thời gian đa