Tải bản đầy đủ (.doc) (48 trang)

Tiểu luận Phân tích và thiết kế thuật toán NP-ĐẦY ĐỦ (NP-Completeness)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (547.48 KB, 48 trang )

ĐẠI HỌC HUẾ
TRƯỜNG ĐẠI HỌC KHOA HỌC
TIỂU LUẬN
PHÂN TÍCH VÀ THIẾT KẾT THUẬT TOÁN
Đề tài:
NP-ĐẦY ĐỦ
(NP-Completeness)

Giảng viên hướng dẫn: TS. Hoàng Quang
Học viên thực hiện: Nhóm 5
Trương Nữ Thùy Duyên
Trần Hoài Nhân
Trần Văn Hòa
Huỳnh Thị Kim Ngân
Đoàn Thanh Hòa
Lớp Khoa học máy tính Khoá 2009-2011
Huế, tháng 11/2009
MỤC LỤC
ĐẠI HỌC HUẾ 1
MỤC LỤC 2
PHẦN I: TỔNG QUAN 1
PHẦN II: NỘI DUNG 6
3. NP-ĐẦY ĐỦ VÀ PHÉP RÚT GỌN (NP-COMLPETENESS AND
REDUCIBILITY): 17
3.1. Sự rút gọn (Reducibility): 17
3.2. NP-đầy đủ (NP-completeness): 19
PHẦ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) : trên các đầu vào có kích cỡ n, thời gian
thực hiện trong trường hợp xấu nhất là O(n
k


) với một hằng số k . Quả rất tự
nhiên khi ta tự hỏi rằng: có phải tất cả các bài toán đều có thể giải trong 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ủa Turing, không thể giải được bằng bất kỳ máy tính
nào, bất kể cung ứng bao nhiêu thời gian. 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. Nói chung,
chúng ta xem 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ễ trị” và các bài toán đòi hỏi thời gian siêu đa thức là “khó trị”.
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ài toán “NP-đầy đủ (NP-complete)", mà tình trạng của nó là một ẩn số. Chưa
có thuật toán thời gian đa thức nào được khám phá cho bài toán NP đầy đủ,
cũng như chưa có ai có thể chứng minh rằng thuật toán không phải thời gian
đa thức có thể tồn tại đối với bất kỳ bài toán nào trong số chúng. Cái gọi là P
≠ NP này đã từng là một trong những bài toán nghiên cứu mở gây phức tạp
nhất, sâu nhất trong khoa học máy tính lý thuyết được đư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úng giống như các bài toán mà có các thuật toán thời gian đa thức. Trong
mỗi cặp củ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à NP đầy đủ.
* Chu trình Hamilton và Euler (Euler tour vs. hamiltonian cycle) :
Một chu trình Euler của một kết nối của đồ thị có hướng G = (V, E) là một
chu trình đ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 chu trình

Euler với thời gian O(E). Một chu trình Hamilton của một đồ thị có hướng G
= (V, E) là một chu trình đơn mà chứa mỗi đỉnh trong V. Xác định khi một đồ
thị có hướng có một chu trình Hamilton là NP-đầy đủ.
* Thỏa được 2-CNF và 3-CNF (2-CNF satisfiability vs. 3-CNF
satisfiability) : Một công thức boolean bao gồm các biến mà các giá trị là 0
hoặc 1; boolean liên kết như ∧ (AND), ∨ (OR), and ¬ (NOT); và dấu ngoặc
đơn (). Một công thức boolean là thỏa được nếu có một vài chỉ định của các
giá trị 0 và 1 đến các biến của nó mà do nó định giá đến 1. Chúng ta sẽ định
nghĩa các thuật ngữ hình thức hơn sau chương này, nhưng không hình thức,
một công thức boolean là trong k dạng chuẩn tắc hội (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
___________________
NPC 1 Trình bày: nhóm 5
biến hoặc các phủ định của chúng. Ví dụ, một công thức boolean (x
1
∨ ¬x
2
)
∧(¬x
1
∨ x
3
) ∧ (¬x
2
∨¬x
3
) là trong 2-CNF. (Nó có chỉ định thỏa được x
1
= 1, x
2

= 0, x
3
= 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 đủ.
NP đầy đủ và các lớp P và NP :
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(n
k
) với một số
hằng số k, mà n là kích cỡ vào của bài 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. Nghĩa là nếu chúng ta đưa ra một "chứng chỉ (certificate)" của
một lời giải, thì chúng ta có thể xác minh rằng chứng chỉ đó là đúng với thời
gian đa thức với kích cỡ vào của bài toán. Chẳng hạn, trong bài toán chu trình
Hamilton, cho một đồ thị có hướng G = (V, E), một chứng chỉ có thể là một
chuỗi <v
1
, v
2
, v
3
, , v
|V|
> của các cạnh |V|. Dễ dàng kiểm tra bằng thời gian đa
thức mà (v
i

, v
i+1
) ∈E với i = 1, 2, 3, , |V| - 1 và (v
|V|
, v
1
) ∈E. Một ví dụ khác,
đối với thỏa được 3-CNF, một chứng chỉ 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ức boolean.
Bất kỳ bài toán nào thỏa được trong P thì cũng thỏa được trong NP, nếu
khi một bài toán thỏa được trong P thì có thể giải được nó trong thời gian đa
thức ngay cả khi không bị đưa ra một chứng chỉ. Chúng ta sẽ chính thức hóa
khái niệm này sau chương này, nhưng bây giờ chúng ta có thể tin rằng P ⊆
NP. Câu hỏ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ời gian đ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ó trị, khi đưa ra nhiều bài toán NP-đầy
đủ mà đã nghiên cứu cho đến nay- không có một nghiên cứu nào khám phá
được một giải pháp thời gian đa thứ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ời gian đa thức. Tuy nhiên, đưa ra nổ lực còn
quá xa để chứng minh rằng các bài toán NP-đầy đủ là khó trị- không có một
kết luận lôgic- chúng ta không thể 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ạn phả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 một bài
___________________
NPC 2 Trình bày: nhóm 5
toán như NP-đầy đủ, bạn đưa ra bằng chứng tốt cho tính khó trị củ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át triể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ễ trị, khá hơn
việc tìm kiếm một thuật toán nhanh mà giải quyết bài toán một cách chính
xác. Hơn nữa, nhiều bài toán hấp dẫn dường như không khó hơn việc phân
loại, nghiên cứu đồ thị hoặc mạng luồng thực tế là 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án
riêng biệt là NP-đầy đủ khác với các phương pháp kỹ thuật đã sử dụng qua
hầu hế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ản cho 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
ta khô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ắng hơ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ái niệ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 lời giải khả thi có một giá trị phù hợp và chúng ta mong ước
tìm một lời giải khả thi với giá trị tốt nhất. Chẳng hạn, trong một bài toán mà
chúng ta gọ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. Tuy nhiê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ĩnh vự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ài toá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án tố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ẽ được tối ưu. Ví dụ, đối với đường đi
ngắn nhất (SHORTEST-PATH), một bài toá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ùng trong 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ếu
chú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 ta 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ì
___________________
NPC 3 Trình bày: nhóm 5
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ời cho
β
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
dễ thuyết phụ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ái ngược để biểu diễn một bài toán là NP-đầy đủ. Chúng ta hãy
lấy ý tưởng một bướ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ời gian đa thức để biểu diễn rằng không một thuật toán thời
___________________
NPC 4 Trình bày: nhóm 5
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ây giờ 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ứng minh một bài toán NP-đầy đủ khác, chúng ta cần một bài toán NP-đầy
đủ đầu tiê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ị
(boolean combinational circuit) gồm có các cổng VÀ (AND), HOẶC (OR)
và cổng PHỦ ĐỊNH (NOT), chúng ta hy vọng khi mà có bất kỳ tập giá trị các
dữ liệu vào đến mạch nà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ài toán đầu tiên này là NP-đầy đủ trong phần III.
___________________
NPC 5 Trình bày: nhóm 5
PHẦN II: NỘI DUNG
Chương này chúng ta nghiên cứu các khía cạnh của NP-đầy đủ dựa vào
sự phân tích các thuật toán. Gồm 5 phần:
1) Chúng ta chú ý đến khái niệm của “bài toán (problem)” và định nghĩa
độ phức tạp lớp P của thời gian đa thức có thể giải được các bài toán. Chúng
ta cũng xem xét các khái niệm này có phù hợp với khuôn khổ (framework)
của lý thuyết ngôn ngữ hình thức (formal) hay không?
2) Đị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” (“circuit

satisfiability“). 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ằng phương pháp luận của các phép rút gọn. Phương pháp luận này đã được
minh hoạ 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
đa thứ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 lý lẽ hỗ trợ:
- Thứ nhất, mặc dù có lý khi xem bai toán yêu cầu thời gian θ(n
100
) là
khó trị, song có rất ít 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. Các bài toán tính toán được theo thời gian đa thức đã
gặp trong thực tế thường yêu cầu ít thời gian hơn nhiều. 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 được tìm ra.
- Thứ hai, đối với nhiều mô hình tính toán hợp lý, 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ể được giả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ài toán
thỏa được trong thời gian đa thức bằng máy truy cập ngẫu nhiên nối tiếp được
dùng thường xuyên trong cuốn sách này giống như lớp bài toán giải được trong
thời gian đa thức trên máy Turing trừu tượng. Nó cũng giống lớ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 song song, cho dù số
lượng các bộ xử lý tăng trưởng theo đa thức với kích cỡ đầu vào.
- Thứ ba, lớp các bài toán thời gian đa thức giải được có các tính chất
bao đóng chính xác, bởi 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 kết xuất một thuật toán thời gian đa thức được dẫn vào
một thuật toán thời gian đa thức khác, thuật toán phức hợp này là đa thức.
___________________

NPC 6 Trình bày: nhóm 5
Nếu một thời gian đa thứ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 gian chạy của thuật toán phức hợp là đa thức.
1.1. Các bài toán trừu tượng (Abstract problems):
Để hiểu lớp các bài toán giải được theo thời gian đa thức, 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 hệ thức nhị phân trên một tập I
các minh dụ (instances) của bài toán và một tập S các nghiệm của bài toán.
Chẳng hạn, một minh dụ đối với đường đi ngắn nhất là một bộ ba chứa 1
đồ thị và 2 đỉnh. Một nghiệm 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à
hệ thức kết hợp từng minh dụ của mỗi đồ thị và 2 đỉnh với một lộ trình ngắn
nhất trong đồ thì nối hai đỉ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 minh dụ đã cho có thể có nhiều hơn một nghiệm.
Cách trình bày này của một bài toán trừu tượng là chung hơn so với yêu
cầu của các mục tiêu của chúng ta. Để đơn giản, lý thuyết về NP-đầy đủ giới
hạn sự chú ý đến các bài bài toán quyết định : có một nghiệm có/ không.
Trong trường hợp này, chúng ta có thể xem một bài toán quyết định trừu
tượng dưới dạng một hàm ánh xạ từ tập minh dụ I đến tập nghiệm {0,1}. Ví
dụ, một bài toán quyết định 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 minh dụ của bài toán đường đi ngắn nhất, thì 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 phải là bài toán quyết định mà
là bài toán tối ưu, mà một vài giá trị đều phải nhỏ nhất hoặc lớn nhất. Để áp
dụng lý thuyết về NP đầy đủ cho các bài toán tối ưu hóa, ta phải áp đổi lại
chúng thành các bài toán quyết định. Thông thường để áp đổi lại một bài toán
tối ưu hóa, ta áp đặt một cận trên giá trị sẽ được tối ưu hóa. Nói chung, nếu có
thể nhanh chóng giải một bài toán tối ưu hóa, ta cũng có thể nhanh chóng giải
một bài toán quyết định có liên quan của nó. Do đó, nếu một bài toán tối ưu

hóa là dễ thì bài toán quyết định liên quan của nó cũng dễ.
1.2. Các phép 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án các trường hợp phải được trình bày bằng một cách mà chương trình hiểu
rõ. Phép mã hó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 đã xem xét các phép biểu diễn máy tính
về các ký tự trên bàn phím ắt quen với bảng mã ASCII hoặc EBCDIC. Trong
bảng mã ASCII, mã hóa của A là 1000001. Thậm chí một đối tượng ghép có
thể được mã hóa như một chuỗi nhị phân bằng cách kết nối các phép biểu
diễn của các bộ phận cấu tạo của nó. Cá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 dưới dạng các chuỗi
nhị phân.
___________________
NPC 7 Trình bày: nhóm 5
Như vậy, một thuật toán máy tính mà “giải quyết” một vài bài toán quyết
định trừu tượng thực tế chấp nhận một mã hóa của minh dụ bài toán như dữ
liệu vào. Chúng ta gọi một bài toán mà tập minh dụ 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 được cung cấp một minh dụ bài toán
i có độ dài n= |i|, thuật toán này có thể tạo ra nghiệm trong thời gian tối đa
O(T(n)). Do đó, một bài toán cụ thể có thể giải quyết thời gian đa thức, nếu tồn
tại một thuật toán để giải quyết nó với thời gian O(n
k
) cho một vài hằng số k.
Bây giờ chúng ta có thể định nghĩa hình thức lớp P như tập các bài toán
quyết định cụ thể giải được thời gian đa thức.
Chúng ta có thể sử dụng các phép 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 quyết định trừu tượng

Q ánh xạ một tập minh dụ I vào{0,1}, một mã hóa e: I → {0,1}* có thể được
dùng để cảm sinh một bài toán quyết định cụ thể có liên quan, mà chúng ta
biểu thị bởi e(Q). Nếu nghiệm cho một minh dụ bài toán trừu tượng i thuộc I
là Q(i) ∈ {0,1}, thì nghiệm cho minh dụ bài toán cụ thể e(i) ∈{0,1}* cũng là
Q(i). Với tư cách là một tính chất kỹ thuật, có thể một số chuỗi nhị phân
không biểu diễn một bài toán minh dụ trừu tượng có ý nghĩa. Để thuận tiện,
chúng ta sẽ thừa nhận rằng bất kỳ chuỗi nào như vậy được ánh xạ tùy ý đến 0.
Vì thế, bài toán cụ thể tạo ra cùng các nghiệm như bài toán trừu tượng trên
các minh dụ chuỗi nhị phân biểu thị cho các phép mã hóa của các minh dụ 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
phép 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êng biệt. Đó là, khả năng giải quyết một bài toán không được 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 dưới
dạng 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 theo đơn phân- 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ằng thờ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ểu thờ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án trừ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ột bà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ằng thời gian đa thức. Chẳng hạn, biểu các số nguyên theo cơ số 3 thay
vì nhị 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
đa thức, vì một số nguyên đã được biểu diễn trong cơ số 3 có thể chuyển đến
một số nguyên đã được biểu diễn trong cơ số 2 bằng thời gian đa thức.
___________________
NPC 8 Trình bày: nhóm 5
Chúng ta nói rằng một hàm số f : {0, 1}* → {0, 1}* là có thể tính toán
được theo 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}*, sẽ tạo 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 e
1
và e
2
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
f
12
và f
21
như đối với bất kỳ i ∈ I , chúng ta có f
12
(e
1
(i)) = e
2
(i) và f
21
(e
2
(i)) =

e
1
(i). Đó là, mã hóa e
2
(i) có thể đã tính từ việc mã hóa e
1
(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 e
1
và e
2
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ập việc mã hóa chúng ta dùng như theo các biểu
diễn bổ đề.
Bổ đề 34.1 : Cho Q là một bài toán quyết định trừu tượng trên một tập minh
dụ I, và cho e
1
và e
2
là các phép mã hóa có liên quan theo đa thức trên I. Thì,
e
1
(Q)∈P khi và chỉ khi e
2
(Q)∈P.
Chứng minh :
Chúng ta chỉ cần chứng tỏ hướng tới, khi lùi lại là đối xứng. Vì thế, cho
rằng, e
1

(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 e
1
(i) có
thể đã được tính từ việc mã hóa e
2
(i) với thời gian O(n
c
) đối với một vài hằng
số c, tại n=|e
2
(i)|. Để giải quyết bài toán e
2
(Q), trên dữ liệu vào e
2
(i), đầu tiên
chúng ta tính e
1
(i) và sau đó chạy thuật toán cho e
2
(Q) trên e
2
(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ế |e
1

(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 e
1
(i) mất thời gian O(|e
1
(i)|
k
) = O(n
ck
), là
đa thức khi cả c và k là các hằng số.
Vì thế, khi một bài toán trừu tượng có các trường hợp của nó đã mã hóa
bằng nhị phân hoặc đường đáy 3 không ảnh hưởng đến “độ phức tạp” của nó,
đó là khi nó là thời gian đa thức có thể giải quyết hoặc không, nhưng nếu các
trường hợp đã mã hóa trong, độ phức tạp của nó có thể thay đổi. Để có thể
nghịch đảo một kiểu mã hóa độc lập, tổng quát hoá chúng ta sẽ thừa nhận bài
toán này các trường hợp đã mã hóa bằng bất cứ lý do nào, kiểu ngắn gọn, đặc
biệt trừ khi chúng ta nói cách khác. Để thực hành, chúng ta sẽ thừa nhận mã
hóa của một số nguyên này là đa thức quan hệ với nó mã hóa như một liệt kê
các thành phần của 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ông thứ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.
Về sau chúng ta hoàn toàn dùng một mã hóa là đa thức đã quan hệ với
chuẩ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ừu
tượ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ể
___________________
NPC 9 Trình bày: nhóm 5
giải quyế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ác trườ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ác bà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ện trong 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 khuôn khổ 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ều quan 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ỗng bở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

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ừ quan điểm của lý thuyết ngôn ngữ, tập các minh dụ đối với bất kỳ các
bài toán quyết định Q là tập Σ*, mà Σ = {0, 1}. Bởi Q được mô tả bởi các
minh dụ bài toán 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 :
PATH = {<G, u, v, k> : G = (V, E) là một đồ thị có hướng,
u, v ∈ V,
k

0 là một số nguyên và tồn tại một đường đi từ u đến v trong
G mà chiều dài tối đa của nó là k }.
Một khuôn khổ ngôn ngữ hình thức cho phép chúng ta diễn đạt mối quan hệ
giữa các bài toán quyết định và các thuật toán mà giải quyết chúng súc tích.
Chúng ta nói rằng một thuật toán A chấp nhận một chuỗi x ∈ {0,1}* nếu đặt
vào x , thuật toán đưa ra A(x) là 1. Ngôn ngữ đã chấp nhận bởi một thuật toán
___________________
NPC 10 Trình bày: nhóm 5
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 được
quyết định trong 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 quyết định x
trong 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ể được 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 để tính một đường đi ngắn nhất từ u đến v trong G và sau đó so
sánh khoảng cách có được với 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à dừng.
Trái lại, thuật toán này chạy vĩnh viễn. Thuật toán này không quyết định
đườ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 quyết định
đườ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. Đối với một thuật toán quyết định 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 chấ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
(complexity class) như một tập các ngôn ngữ, với tư cách là thành viên mà ở
đó được xác định bởi một độ đo phức, chẳng hạn thời gian chạy của một thuật
toán xác định một chuỗi x có thuộc về ngôn ngữ L. Định nghĩa thực sự của
một lớp phức 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 khuôn khổ lý thuyết ngôn ngữ này, chúng ta có thể cung cấp
một định nghĩa khác của lớp phức P :
P = {L ⊆ {0,1}* : có tồn tại một thuật toán A mà quyết định L trong 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ời
gian đa thức.
Định lý 34.2 : P = {L : L đã chấp nhận bởi một thuật toán thời gian đa thức}.
___________________

NPC 11 Trình bày: nhóm 5
Chứng minh :
Khi lớp các ngôn ngữ đã quyết định bởi các thuật toán thời gian đa thức
là một tập con lớp ngôn ngữ đã chấp nhận bởi các thuật toán thời gian đa
thức, chúng ta chỉ cần thấy rằng nếu L đã chấp nhận bởi một thuật toán thời
gian đa thức, đó là quyết định bởi một thuật toán thời gian đa thức. Lấy L là
ngôn ngữ đã chấp nhận bởi một số thuật toán thời gian đa thức A. Chúng ta sẽ
sử dụng một lớp luận cứ “sự mô phỏng” đến cấu trúc khác của thuật toán thời
gian đa thức A’ 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 minh định lý 2. là phi kiến tạo. Đối với một ngôn ngữ
L∈ P, chúng ta thực sự không thể biết một cận trên 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 một cận tồn tại, rằng
một thuật toán A’ tồn tại có thể kiểm tra cậ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 quyết định 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ỉ khi LONGEST-PATH ∈ P.
2. Cho một định nghĩa hình thức đối với bài toán tìm chu trình đơn dài nhất
trong một đồ thị vô hướng. Nêu một quan hệ quyết định bài toán. Nêu ngôn
ngữ tương ứng để quyết định bài toán.
3. Cho một phép mã hóa hình thức của các đồ thị có hướng dưới dạng các
chuỗi nhị phân dùng một phép biểu diễn ma trận-liền kề. Như sử dụng một
phép biểu danh sách-liền kề. Chứng tỏ rằng hai phép biểu diễn là liên quan
theo đ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 như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án thời gian-theo luật số mũ ( exponential-time).
___________________
NPC 12 Trình bày: nhóm 5
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 L
1
, L
2
∈ P, thì L
1
∪L
2

P,

2. XÁC MINH THỜI GIAN ĐA THỨC (POLYNOMIAL-TIME
VERIFICATION):
Bây giờ ta xét các thuật toán “xác minh” tư cách thành viên trong các
ngôn ngữ. Chẳng hạn, giả sử rằng với một minh dụ <G, u, v, k> của bài toán
quyết định PATH, ta cũng có một đường đi p từ u đến v. Ta có thể dễ dàng
kiểm tra độ dài của p có phải tối đa là k hay không và nếu có ta có thể xem p
như một “chứng chỉ” thực sự thuộc về bài toán PATH. Với bài toán quyết
định PATH “chứng chỉ” dường như không làm ta quan tâm lắm. Xét cho
cùng, PATH thuộc lớp P - trên thực thế, PATH có thể giải được trong thời
gian tuyến tính- và do đó việc chứng minh tư cách thành viên cho một chứng
chỉ đã cho sẽ kéo dài ngang bằng với việc giải quyết bài toán ngay từ đầu.
Bây giờ, ta sẽ xét một bài toán mà biết rằng chưa có giải thuật quyết định
trong thời gian đa thức, tuy nhiên nếu ta có một chứng chỉ thì việc xác minh
nó là dễ dàng.
2.1. Chu trình Hamilton (Hamiltonian cycles):
Bài toán tìm một chu trình hamilton trong một đồ thị vô hướng đã được
nghiên cứu hơn một trăm năm qua. Một cách hình thức, một chu trình
hamilton của một đồ thị vô hướng G = (V, E) là một chu trình đơn chứa tất cả
các đỉnh trong V. Một đồ thị chứa một chu trình hamilton được gọi là đồ thị
hamilton; Ngược lại được gọi là phi hamilton. Bondy và Murty trích dẫn một
bức thư của W. R. Hamilton mô tả một trò chơi toán học trên khối mười hai
mặt (Hình 2.(a)) như sau: một người chơi sẽ chỉ ra năm đỉnh liên tiếp bất kỳ
trong đồ thị người chơi còn lại sẽ phải hoàn thành đường đi để tạo ra một chu
trình chứa tất cả các đỉnh. Khối mười hai mặt này là đồ thị hamilton và (Hình
2.(a)) chỉ ra một chu trình hamilton. Tuy nhiên,không phải tất cả các đồ thị
đều là Hamilton, ví dụ (Hình (b)) là một đồ thị chia đôi với một số lẻ các
đỉnh. Bài tập 2 yêu cầu bạn chỉ ra rằng tất cả các đồ thị như thế là hamilton.
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.
Chúng ta có thể định nghĩa bài toán chu trình hamilton, “Một đồ thị G có

một chu trình Hamilton không?” dưới dạng một ngôn ngữ hình thức :
___________________
NPC 13 Trình bày: nhóm 5
HAM-CYCLE = {<G> : G là một đồ thị Hamilton}.
Một thuật toán như thế nào có thể quyết định ngôn ngữ HAM-CYCLE?
Căn cứ vào một minh dụ <G>, một thuật toán quyết định 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ó có phải là một chu trình hamilton hay không. Thời gian chạy của
thuật toán này là gì? Nếu chúng ta sử dụng phép 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
, trong
đó n = |<G>| là độ dài mã hóa của G. Có m! các phép hoán vị các đỉnh có thể
thực hiện và vì thế thời gian chạy là Ω(m!) = Ω
n
!) = Ω(2
n
), không phải là
O(n
k
) với k là hằng số. Vì thế, thuật toán này không chạy với thời gian đa
thức. Sự thật, bài toán chu trình hamilton là NP-đầy đủ, như chúng ta sẽ
chứng tỏ trong phần 5.

2.2. Các thuật toán xác minh (Verification algorithms) :
Xem xét 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
đồ thị G là Hamilton rồi xung phong chứng minh điều đó bằng cách đưa cho
bạn một chu trình hamilton. Chắc chắn nó sẽ dễ dàng để xác minh chu trình
đã đưa ra đó có đúng không bằng cách: kiểm tra nó có phải là phép hoán vị
của các đỉnh của V và mỗi trong số các cạnh kề dọc theo chu trình có thực sự

tồn tại trong đồ thị hay không. Một cách chắc chắn thuật toán xác minh này
có thể đã thực hiện với thời gian O(n
2
); với n là độ dài mã hóa của G. Như
vậy, một phép chứng minh rằng một chu trình hamilton tồn tại trong một đồ
thị có thể được xác minh trong thời gian đa thức.
Ta định nghĩa một thuật toán xác minh A dưới dạng một thuật toán hai
đối số (two-argument), mà đối số x là một chuỗi đầu 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 chỉ. Một thuật
toán hai đối số A xác minh một chuỗi đầu vào x nếu ở đó tồn tại một chứng
chỉ y sao cho A(x,y)=1. Ngôn ngữ được xác minh bởi một thuật toán xác
minh A là:
L= { x∈{0, 1}* : có tồn tại y∈{0, 1}* sao cho 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 chỉ 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 chỉ nào chứng tỏ rằng x ∈
L. Chẳng hạn, trong bài toán chu trình hamiton, chứng chỉ là danh sách các
đỉnh trong chu trình hamilton. Nếu một đồ thị là Hamilton, chu trình
Hamilton của chính nó cung cấp đủ thông tin để xác minh điều này. Ngược
lại, nếu một đồ thị không phải là Hamilton, thì không có danh sách các đỉnh
nào có có thể đánh lừa thuật toán xác minh tin rằng đồ thị đã đưa ra là
hamilton, bởi thuật toán xác minh kiểm tra một cách cẩn thận “chu trình” đã
để đảm bảo là chắc chắn.
2.3. Lớp phức NP (The complexity class NP):
___________________
NPC 14 Trình bày: nhóm 5
Lớp phức NP là lớp các ngôn ngữ có thể được 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à chỉ 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 (| x
c
|) sao cho
A(x,y)=1 }.
Chúng ta nói rằng thuật toán A xác minh ngôn ngữ L trong thời gian đa
thức.
Từ thảo luận trên về bài toán chu trình hamilton, dẫn đến 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, bởi 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.
Ta vẫn chưa biết P = NP hay không, 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. Lớp NP bao gồm các bài
toán có thể được xác minh một cách nhanh chóng. Có lẽ qua kinh nghiệm bạn
có thể đã biết rằng việc giải quyết một bài toán từ đầu phức tạp hơn việc xác
minh một giải pháp được đưa ra một cách rõ ràng, đặc biệt khi làm việc trong
thời gian ràng buộc. Nói chung, các nhà khoa học máy tính tin rằng sự tương
đồng này mở rộng các lớp P và NP, và như vậy tin rằng 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ữ “NP-
đầy đủ”. Chúng ta sẽ nghiên cứu lớp này trong phần 3.
Nhiều câu hỏi cơ bản khác vượt ra ngoài giới hạn P ≠ NP vẫn chưa được
giải quyết được. Mặc dù, đã có nhiều công sức của nhiều nhà nghiên cứu đã
bỏ ra, thậm chí không một người nào biết lớp NP có bị đóng dưới phần bù
hay không. Nghĩa là nếu L ∈ NP thì
L
∈ NP hay không? Chúng ta định nghĩa

lớp phức co-NP như tập các ngôn ngữ L sao cho
L
∈ NP. Câu hỏi NP có bị
đóng dưới phần bù hay không có thể được phát biểu như sau: NP=co-NP. Khi
NP mã hóa dưới phần bù (Bài tập I.6), nó cho phép rằng P⊆ NP ∩ co-NP.
Tuy nhiên, một lần nữa ta không biết P = NP ∩ co-NP hay không hoặc khi
nào mà có một số ngôn ngữ trong NP ∩ co-NP – P hay không. Hình 3 biểu
diễn 4 khả năng có thể xảy ra.
___________________
NPC 15 Trình bày: nhóm 5
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 chắc xảy ra
nhất. (b) Nếu NP đóng dưới phần bù, thì NP=co-NP, thì không cần trường hợp 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à có
thể xảy ra nhất.
.
Như vậy, sự hiểu biết của chúng ta về mối quan hệ chính xác giữa P và
NP là không đầy đủ. Tuy nhiên, bằng cách khảo sát lý thuyết về tính đầy đủ
NP, chúng ta sẽ thấy rằng việc chứng tỏ các bài toán là khó từ một quan điểm
thiết thực không quá lớn chúng ta tưởng.
Bài tập:
1. Xét ngôn ngữ GRAPH-ISOMORPHISM = {<G
1
, G
2
> : G

1
và G
2
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 laf phi
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
chu trinhf hamilton, theo thứ tự, trong 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 2
O(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ệu
quả 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 x
1
,
x
2

, , x
k
,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 để đặt vào các biến. Định nghĩa phép lặp thừa (TAUTOLOGY) như ngôn
ngữ của công thức boolean mà là các phép lặp thừa. Chỉ ra rằng
TAUTOLOGY ∈ co-NP.
___________________
NPC 16 Trình bày: nhóm 5
9. Chứng tỏ rằng P ⊆ co-NP.
10. Chứng tỏ rằng nếu NP ≠ co-NP, thì P ≠ NP.
11. Cho G là một đồ thị vô hướng liên thông với ít nhất 3 đỉnh và lấy G
3
đồ
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 G
3
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À PHÉP RÚT GỌN (NP-COMLPETENESS AND
REDUCIBILITY):
Có lẽ lý do thuyết phục nhất tại sao các nhà khoa học máy tính lý thuyết
tin rằng P ≠ NP là sự tồn tại 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ể được giải
trong 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
đa thức, đó là, P = NP. Mặc dù, nhiều năm nghiên cứu chưa có 1 giải thuật
thời gian đa thức nào được khám phá cho bài toán NP đầy đủ
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 trong thời gian đa thức, thì chúng ta có thể giải
mỗi bài toán NP trong thời gian đa thức. Thật vậy, 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.
Theo một nghĩa nào đó, 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 “tính khó”
tươ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à
“khả năng rút gọn thời gian đa thức”. Sau đó chúng ta định nghĩa 1 cách hình
thức các ngôn ngữ NP-đầy đủ và phác họa một phần chứng minh rằng một
ngôn ngữ như vậy đượ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 về khả năng rút gọn để chỉ ra rằng nhiều bài
toán khác là NP-đầy đủ.
3.1. Sự rút gọn (Reducibility):
Theo trực giác, một bài toán Q có thể được rút gọn bài toán Q’ khác nếu
bất kỳ đầu vào của Q có thể “dễ dàng được đặt lại” dưới dạng một đầu vào
của Q’, giải pháp này cung cấp một giải pháp đến đầu vào 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 biến đổi nó thành 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 trường hợp này, thì Q là “không khó để giải quyếtt” hơn
Q’.
Trở về khuôn khổ ngôn ngữ hình thức của quyết định các bài toán,
chúng ta nói rằng một ngôn ngữ L
1
là rút gọn được theo thời gian đa thức
đến một ngôn ngữ L
2
, được viết L

1
≤ p L
2
, nếu có tồn tại hàm tính toán theo
thời gian đa thức f : {0, 1}* → {0, 1}* sao cho tất cả x ∈{0, 1}*.
x ∈L
1
nếu và chỉ nếu f(x) ∈L
2
___________________
NPC 17 Trình bày: nhóm 5
Chúng ta gọi hàm f là hàm rút gọn và một thuật toán thời gian đa thức F
dùng để tính toán f được gọi là một thuật toán rút gọn.
Hình 4. Một minh họa của phép rút gọn thời gian đa thức từ một ngôn
ngữ L
1
đến một ngôn ngữ L
2
qua một hàm rút gọn f. Bất kỳ x ∈{0, 1}*, câu
hỏi x ∈L1 hay không sẽ có câu trả lời như câu hỏi f(x) ∈ L
2
hay không.
Hình 4 minh họa ý tưởng của một phép rút gọn thời gian đa thức từ một
ngôn ngữ L
1
đến ngôn ngữ L
2
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 sao cho
nếu x ∈L

1
, thì f(x) ∈L
2
. Hơn nữa, nếu x ∉L
1
thì f(x) ∉L
2
. Vì thế, hàm rút
gọn này ánh xạ bất kỳ đầu vào x của bài toán quyết định được đại diện bởi
ngôn ngữ L
1
đến một đầu vào của f(x) của bài toán được đại diện bởi ngôn
ngữ L
2
. Cung cấp một trả lời f(x) ∈L
2
hay không, sẽ trực tiếp cung cấp trả
lời x ∈L
1
hay không.
Các phép rút gọn thời gian đa thức cho chúng ta một công cụ mạnh mẽ
để chứng tỏ rằng các ngôn ngữ khác thuộc về P.
Bổ đề 3 :

Nếu L
1
, L
2
⊆{0, 1}* là các ngôn ngữ sao cho L
1


p L
2
, thì L
2
∈ P
hàm ý L
1
∈ P.
Chứng minh :
Lấy A
2
là một thuật toán thời gian đa thức mà nó quyết định L
2
,

và lấy F
là thuật toán rút gọn thời gian đa thức mà các phép tính toán hàm rút gọn f.
Chúng ta sẽ đặt một thuật toán thời gian đa thức A
1
quyết định L
1
.
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ừ L
1
thành L
2
trong thời gian đa thức và A
2

là một thuật toán thời gian đa thức quyết định L
2
. Minh họa một thuật toán A
1
___________________
NPC 18 Trình bày: nhóm 5
mà quyết định bất kì x ∈ L
1
hay không bằng cách sử dụng F để chuyển bất kỳ
dữ liệu vào x vào f(x) và sau đó sử dụng A
2
để quyết định bất kì f(x) ∈ L
2

Hình 5 minh họa phần kiến tạo của A
1
. Đưa 1 dữ liệu vào x ∈ {0, 1}*,
thuật toán A
1
này dùng F để chuyển x vào f(x) và sau đó nó dùng A
2
để
kiểm tra bất kì f(x) ∈L
2
. Đầu ra của A
2
là giá trị được cung cấp như đầu ra từ
A
1
.

Sự đúng đắn của A
1
là do đ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à A
2
chạy với thời gian đa thức (xem hình I.5).
3.2. NP-đầy đủ (NP-completeness):
Các phép rút gọn thời gian đa thức cung cấp một biện pháp hình thức để
chứng tỏ một bài toán tối thiểu cũng khó bằng một bài toán khác, qua một
thừa số thời gian đa thức. Đó là, nếu L
1

p L
2
, thì L
1
là không khó hơn một
thừa số đa thức L
2
, là lí do tại sao “nhỏ hơn hoặc bằng” cho phép rút gọn
mang tính gợi 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 trong NP.
Một ngôn ngữ L

⊆ {0, 1}* là NP-đầy đủ nếu :
(1) L ∈ NP


(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 nhất 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ụng
quyết định khi P=NP?
___________________
NPC 19 Trình bày: nhóm 5
Định lý 4:
Nếu có một bài toán NP-đầy đủ nào giải được trong thời gian đa thức thì P
= NP.Nếu có một bài toán trong NP nào mà không giải được trong thời gian
đa thức thì tất cả các bài toán NP-đầy đủ đều không giải được trong thời gian
đa thứ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 có L’ ∈ P, theo chứng minh phát biểu thứ nhất của định lý đó.
Để chứng tỏ phát biểu thứ hai, giả sử tồn tại sự mâu thuẫn với phát biểu
thứ nhất.
Chính vì lý do này mà cuộc nghiên cứu vào câu hỏi P ≠ NP xoay quanh
các bài toán chính NP-đầy đủ. Hầu hết các nhà hoa học máy tính lý thuyết tin
rằng P ≠ 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ột thuật toán thời gian đa thức cho một bài toán NP-đầy đủ, vì thế chứng tỏ
rằng P=NP.
Tuy nhiên, chưa có thuật toán thời gian đa thức nào cho bất kỳ bài toán
NP-đầy đủ được tìm ra, nên chứng minh cho rằng một bài toán là NP-đầy đủ
sẽ cung cấp một 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 mãn mạch (Circuit Satisfiability):
Chúng ta đã định nghĩa khái niệm của một bài toán NP-đầy đủ, nhưng
với quan điểm này chúng ta chưa thực tế chứng minh rằng bất kỳ một bài toán
là NP đầy đủ. Một khi chúng ta chứng minh có ít nhất một bài toán là NP-đầy
đủ, chúng ta có thể sử dụng khả năng rút gọn thời gian đa thức làm một công
cụ để chứng minh NP-đầy đủ của các bài toán khác. Vì thế bây giờ chúng ta
tập trung vào việc chứng minh sự tồn tại của một bài toán NP đầy đủ : bài
toán thỏa mãn mạch.
___________________
NPC 20 Trình bày: nhóm 5
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 tài liệu này. Thay vì thế
chúng ta sẽ mô tả không chính thức 1 một chứng minh dựa trên sự hiểu biết
cơ bản về các mạch tổ hợp bool.
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ác giá 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 mãn
mạch tí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).
Chúng ta có thể tổng quát hóa các cổng AND và OR để lấy hơn 2 dữ liệu
và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ược lạ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ào củ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ệu ra của một phần tử đến dữ liệu vào của một phần tử khác, bằng cách
___________________
NPC 21 Trình bày: nhóm 5
cung cấp giá trị dữ liệu cho phần tử đầu tiên sẽ cho ra giá trị dữ liệu vào của
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ác nhau chỉ một cổng. Phần (a) của hình cũng chỉ giá trị trên các dây riêng
lẻ, 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ều hơn một phần tử kết nối dữ liệu ra đã kết nối với nó, nó có thể dẫn vài
phầ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ết nố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ên ngoà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 ta giớ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.
Hình 8. Hai trường hợp của bài toán thỏa được mạch. Hình (a), chỉ định (x
1
=1, x
2
=1, x
3
=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.
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ói rằ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 < x
1
=1, x

2
=1, x
3
=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 x
1
, x
2
và x
3
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.
Bài toán thỏa được mạch là “Cho một mạch kết hợp boolean bao gồm
các cổng AND, OR, NOT, nó 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. Một phép có thể đặt một đồ thị mã hóa mà ánh xạ bất kỳ cho
___________________
NPC 22 Trình bày: nhóm 5
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) có tầm quan trọng lớn
trong lĩnh vực tối ưu hóa phần cứng nhờ máy tính hỗ trợ. 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 làm kết
xuất của nó. Nó sẽ giúp ích cho mộ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 xem nó có thỏa mãn
được bằng cách kiểm tra tất cả các phép gán khả dĩ cho các đầu vào hay
không. Tuy nhiên, nếu có k dữ liệu vào, có 2
k
các phép gán khả dĩ. Khi kích
cỡ của C là đa thức trong k, việc kiểm tra mất thời gian Ω(2
k
), 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,
không tồn tại thuật toán thời gian đa thức giải quyết bài toán thỏa mãn mạch
vì thỏa mãn mạch là NP-đầy đủ. Chúng ta tách phần chứng minh sự kiện này
thành hai phần, dựa trên hai phần của định nghĩa về tính NP-đầy đủ.
Bổ đề 5: Bài toán thỏa mãn mạch (circuit-satisfiability) thuộc lớp NP.
Chứng minh :
Chúng ta sẽ cung cấp một thuật toán thời gian đa thức, 2 đầu vào, A, có
thể chứng minh CIRCUIT-SAT. Một trong các đầu vào cho A (một phép mã
hóa chuẩn) của một mạch tổ hợp bool C. Đầu vào khác là một chứng nhận
(cirtificate) tương ứng với một phép gán các giá trị boolean cho các dây dẫn
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 giá trị đã cung cấp trên dây dẫn ra là hoàn toàn đúng đắn dưới dạng
một hàm các giá trị trên các dây dẫn đầu vào. Sau đó, nếu kết xuất của toàn bộ
mạch là 1, thuật toán kết xuất 1, khi các giá trị đã gán đến các đầu vào của C
cung cấp một phép gán thỏa được. Trái lại, A dữ liệu ra là 0.
Khi đầu vào là một mạch thỏa mãn được C cho 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 và khiến có 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 rằng mạch đó có thể thỏa được. Một thuật toán A chạy với
thời gian đa thức: với một sự thi hành tốt, thỏa được thời gian tuyến tính. Như
vậy, CIRCUIT-SAT có thể được xác minh trong thời gian đa thức và

CIRCUIT-SAT ∈ NP.
Phần thứ 2 để chứng minh rằng CIRCUIT-SAT là NP-đầy đủ là chứng tỏ
ngôn ngữ là NP-khó. Nghĩa là, ta phải chứng tỏ rằng mọi ngôn ngữ trong NP
có thể rút gọn theo thời gian đa thức thành CIRCUIT-SAT. Bằng chứng thực
sự của sự kiện này là quá nhiều các phức tạp và vì thế chúng ta sẽ tạm thời
bằng lòng với sự phác thảo của phần chứng minh dựa trên một số hiểu biết
của các hoạt động của phần cứng máy tính.
___________________
NPC 23 Trình bày: nhóm 5

×