5. Các thuật toán xấp xỉ cho các bài toán NP-Hard
Một trong các cách để giải quyết một bài toán tối ưu nhưng lại bị NP-hard là thiết kế một thuật toán xấp xỉ cho nó. Đối với các bài toán này, có một trade-off về mặt bản chất giữa chất lượng lời giải và thời gian tìm ra lời giải. Nếu muốn tìm lời giải tối ưu thì ta phải dùng hơn poly-time. Nếu muốn chạy trong poly-time thì buộc phải thỏa mãn với lời giải không nhất thiết là tối ưu.
Định nghĩa: Một thuật toán chạy trong poly-time và cho ra lời giải với giá nằm trong khoảng
lần giá tối ưu thì được gọi là một
-approximation algorithm của bài toán đang xét. Con số
gọi là approximation ratio của thuật toán.
Ví dụ 1: trong bài toán Vertex Cover, cho một đồ thị , ta cần tìm một số ít đỉnh nhất để “cover” tất cả các cạnh. (Một đỉnh “covers” một cạnh nếu nó kề cạnh đó.) Bài toán này là NP-Hard. Một
-approximation algorithm cho bài này có thể thiết kế như sau:
- Tìm một maximal matching
của
. (Chú ý rằng maximal khác với maximum. Mặc dù dùng maximum cũng được. Ngoài ra
là ký hiệu tập các cạnh của matching.)
- Output tất cả các đỉnh (có
đỉnh) của matching này.
Dĩ nhiên bất kỳ cạnh nào của
cũng kề với một đỉnh nào đó trong matching, vì nếu không thì có thể thêm
vào matching và do đó nó không còn là maximal nữa. Một Vertex Cover bất kỳ nào cũng phải chứa ít nhất một đỉnh cho mỗi cạnh của
. Do đó, kích thước
của Vertex Cover tối ưu cũng phải ít nhất là
. Vì thế,
tổng số đỉnh thuật toán outputs
Chúng ta vừa chứng minh rằng thuật toán đơn giản trên là -approximation algorithm cho bài Vertex Cover. Một bài toán mở rất quan trọng trong lý thuyết thuật toán xấp xỉ là có tồn tại một
-approximation algorithm cho bài toán Vertex Cover hay không? (
là một hằng số dương tùy ý!)
Ví dụ 2: trong bài toán Max-E3SAT, cho một công thức E3-CNF , nghĩa là một công thức CNF mà mỗi clause có đúng 3 literals, cần tìm một truth assignment thỏa mãn nhiều clauses nhất. Bài toán này dĩ nhiên là NP-hard. Xét thuật toán ngẫy nhiên hóa sau đây: gán mỗi biến giá trị TRUE/FALSE với xác suất
. Xác suất một clause tùy ý được thỏa mãn là
. Do đó, do linearity of expectation, giá trị kỳ vọng của số các clauses được thỏa mãn là
tổng số clauses. Mà
tổng số clauses thì ít nhất là
tổng số tối đa các clauses có thể được thỏa mãn cùng một lúc.
Chúng ta vừa thiết kế một -randomized approximation algorithm cho bài Max-E3SAT. Thuật toán này có thể được de-randomized dùng phương pháp conditional expectation, dẫn đến một thuật toán xấp xỉ với approximation ratio
cho bài toán Max-E3SAT.
Hai ví dụ trên chỉ để minh họa khái niệm approximation algorithm. Chúng được chọn vì có lời giải cực ngắn, một đại diện cho các bài toán tối thiểu hóa, một tối đa hóa. Đa số các approximation algorithms không ngắn gọn như thế. Thiết kế approximation algorithms là một nhánh nghiên cứu khá trưởng thành của thuật toán, có nhiều kỹ thuật tuyệt vời (dùng LP, SDP, hoặc randomization cộng derandomization chẳng hạn), và có liên hệ mật thiết đến complexity theory và PCP. Trong chuỗi bài này, chúng ta sẽ không nói về các kỹ thuật thiết kế thuật toán xấp xỉ. Các bạn đọc nên tham khảo 4 quyển sách (kinh điển) sau để biết sơ khởi về approximation algorithms:
- Vijay Vazirani, Approximation Algorithms Springer-Verlag, 397 pages hardcover, ISBN: 3-540-65367-8, published 2001.
- Rajeev Motwani and Prabhakar Raghavan, Randomized Algorithms, 492 pages, Cambridge University Press (August 25, 1995).
- Dorit Hochbaum (Editor), Approximation Algorithms for NP-Hard Problems, 624 pages ; Brooks/Cole Pub Co; ISBN: 0534949681; 1st edition (July 26, 1996)
- Mark Jerrum, Counting, Sampling and Integrating: Algorithms and Complexity (Lectures in Mathematics. ETH Zürich), Birkhäuser Basel; 1 edition (April 28, 2003)
6. Xấp xỉ một bài NP-hard cũng có thể bị … NP-hard
Có tồn tại một thuật toán xấp xỉ cho bài Vertex Cover với tỉ lệ xấp xỉ không? Có tồn tại một thuật toán xấp xỉ cho bài Max-E3SAT với tỉ lệ
không? Làm thế nào để trả lời các câu hỏi loại này? (Dành cho các bạn nóng lòng: câu trả lời là không biết cho câu hỏi thứ nhất, và không, trừ phi P=NP cho câu hỏi thứ hai.)
Để trả lời các câu hỏi về hardness of approximation như trên, chúng ta cần một khái niệm mới: gap-version của một bài toán tối ưu. Để đơn giản, chúng ta sẽ dùng Max-E3SAT làm ví dụ.
Định nghĩa: cho trước hai số
.
Input của bài toán là một công thức E3-CNF
với
clauses. (Hai số
có thể phụ thuộc vào kích thước của
.) Gọi
là tỉ lệ tối đa các clauses của
có thể được thỏa mãn bới một truth assignment. (Nghĩa là, nếu tổng số tối đa các clauses có thể thỏa mãn được bới một truth assignment là
thì
.) Chúng ta biết trước rằng hoặc
hoặc
. (Đây là một loại promise problem.)
Output của bài toán là YES hoặc NO. YES nếu
còn NO nếu
.
Bài tập. Chứng minh rằng Gap-Max-E3SAT là NP-Hard, trong đó
là tổng số clauses của input formula.
Lý do mà chúng ta cần khái niệm “gap problems” được giải thích trong bổ đề sau.
Bổ Đề: Nếu bài toán Gap-Max-E3SAT
là NP-Hard với các số
— không tồn tại thuật toán xấp xỉ cho bài toán Max-E3SAT đến tỉ lệ
, trừ phi P=NP. Cụ thể hơn, việc xấp xỉ bài toán đến tỉ lệ đó là NP-Hard.
Chứng minh. Giả sử tồn tại thuật toán xấp xỉ cho Max-E3SAT đến tỉ lệ
. Chúng ta có thể dùng thuật toán này để giải bài toán NP-Hard Gap-Max-E3SAT
trong poly-time như sau:
- Cho một input
của bài toán Gap-Max-E3SAT
- Cung cấp input này cho thuật toán
; nó sẽ output một truth assignment thỏa mãn
clauses.
- Nếu
thì output YES.
- Nếu
thì output NO.
Do là
-approximation algorithm, chúng ta biết rằng
. Vì thế, nếu
là một YES-instance thì
và vì thế
. Còn nếu
là một NO-instance thì
. Khi đó
.
Thế những thứ trên thì liên quan gì đến định lý PCP? Xem định lý sau đây.
Định lý. Định lý PCP tương đương với phát biểu sau đây: “tồn tại một hằng số
sao cho bài toán Gap-Max-E3SAT
là bài toán NP-Hard.”
Chứng minh.
Cho chiều thuận, giả sử định lý PCP là đúng. Để chứng minh rằng Gap-Max-E3SAT là bài toán NP-Hard với một hẳng số
nào đó, chúng ta tìm một reduction từ một bài toán NPC về nó. Xét một bài toán NP-Complete bất kỳ nào đó. Gọi nó là bài toán
. Chúng ta sẽ reduce từ
về Gap-Max-E3SAT
; giá trị cụ thể của
sẽ được chỉ ra sau.
Từ định lý PCP, ta biết rằng tồn tại một -restricted verifier
cho
, trong đó
và
,
là các hằng số dương. Xét một input
bất kỳ của bài toán
, chúng ta sẽ dùng
để xây dựng trong poly-time một công thức
là input của Gap-Max-E3SAT
thỏa mãn hai điều kiện của một NP-Hard reduction:
(1) Nếu là YES-instance của
thì
(hay nói cách khác
là YES-instance của Gap-Max-E3SAT
)
(2) Nếu là NO-instance của
thì
(hay nói cách khác
là NO-instance của Gap-Max-E3SAT
)
Trước hết, chú ý rằng cái chứng minh mà prover cung cấp cho
chỉ cần có độ dài tối đa
, tại vì mới mỗi random bit string với
random bits,
chỉ truy cập
vị trí trong chứng minh
. Do đó, chiều dài tối đa của chứng minh
chỉ là
poly
. Tạo
biến Boolean
. Mỗi biến tương đương với một bit trong chứng minh
. Một truth assignment cho các biến này tương đương với một chứng minh
. Chúng ta sẽ tạo công thức
sao cho việc thỏa mãn tất cả các clauses của
thì cũng giống như việc verifier
chấp nhận
.
Đến đây, với mỗi random string với chiều dài
, chúng ta có thể chạy
và “đút” cho
tất cả
tổ hợp của các câu trả lời ở
vị trí mà
truy cập
. (Xem hình dưới đây lần nữa.) Phần còn lại điền
vào là xong.

vị trí mà
truy cập tương đương với
biến
nào đó. Một số truth assignments vào các biến này làm
chấp nhận
, các truth assignments khác thì không. Chúng ta có thể dễ dàng viết ra một công thức CNF
trên các biến
sao cho truth assignment thỏa mãn
cũng chính là truth assignment làm
chấp nhận input
và ngược lại. Chú ý rằng
có nhiều nhất là
clauses, và
là một hằng số. Dùng cái mẹo chuẩn (của Karp), ta dễ dàng chuyển được
thành một công thức tương đương
ở dạng E3-CNF. Chỉ hơi khác là
có thể có đến
clauses, thay vì chỉ có
clauses như
.
Cuối cùng, định nghĩa — conjunction của tất cả các công thức
. Rõ ràng là
là một công thức ở dạng E3-CNF.
Ta chứng minh (1) trước. Nếu là một YES-instance của
thì tồn tại một chứng minh
sao cho Prob
YES
, nghĩa là
luôn luôn chấp nhận
, bất kể random string
là gì. Rõ ràng là
cũng là một truth assignment thỏa mãn toàn bộ các clauses của
.
Bây giờ đến (2). Vì là NO-instance của
, xác suất mà verifier
chấp nhận
nhiều nhất là
, bất kể chứng minh
là gì. Có nghĩa là, có nhiều nhất là một nửa số random strings
có thể làm cho verifier chấp nhận
, bất kể chứng minh
là gì. Nói cách khác, bất kể truth assignment là gì thì cũng có một nửa số công thức
không hoàn toàn được thỏa mãn. Do đó, tổng số các clauses không được thoả mãn ít nhất là
. (Mỗi công thức
không được thỏa mãn phải có ít nhất một clause không được thỏa mãn.) Mà, tổng số clauses
của
nhiều nhất là
. Do đó, tỉ lệ các clauses không được thỏa mãn bởi một truth assignment bất kỳ ít nhất là
. Vì thế,
. Chúng ta vì thế chọn
.
Cho chiều nghịch, giả sử tồn tại một hằng số sao cho bài toán Gap-Max-E3SAT
là bài toán NP-Hard. Chúng ta chỉ cần thiết kế một
-restricted verifier cho chính bài toán này là xong! (Bài tập: tại sao?) Verifier này làm việc như sau: cho một input
của bài toán Gap-Max-E3SAT
, verifier chọn một clause ngẫu nhiên của
, query chứng minh
ở
vị trí tương ứng với các literals trong clause vừa chọn, và chấp nhận input nếu cái clause này được thỏa mãn. Nếu
thì dĩ nhiên là tồn tại một chứng minh
(tương ứng với truth assignment thỏa mãn toàn bộ
) làm cho xác suất verifier chấp nhận bằng
. Nếu chỉ có một tỉ lệ
của tổng số các clauses có thể thỏa mãn được thì, bất kể chứng minh
là gì, xác suất mà verifier chấp nhận input
nhiều nhất là
(nếu nó “chẳng may” chọn phải các clauses được thỏa mãn bởi
). Để giảm soundness từ
xuống
, ta có thể chạy verifier này
lần độc lập, và chỉ output YES khi tất cả mọi lần chạy đều output YES. Tổng số random bits nhiều nhất là
và tổng số query bits nhiều nhất là
. Verifier của chúng ta đúng là
-restricted.
Như vậy, chứng minh định lý PCP “chẳng qua” là chứng minh một bài toán nhất định là NP-Hard. Vậy mà tại sao định lý PCP lại là một crowned jewel của TCS trong vòng 20 năm qua? Lý do là các NP-Hard reduction thông thường không thể tạo một cái “gap” là hằng số như ta cần. Để “khuếch đại” cái gap, ta cần một vài kỹ thuật cực kỳ thú vị từ coding theory và algebraic graph theory. Sẽ nói về chứng minh định lý PCP sau. Trong bài tới, chúng ta nói thêm về các cách chứng minh hardness of approximations. Sẽ cần đến các kỹ thuật như phân tích Fourier của các hàm Bool, dùng expander graphs, vân vân. Chúng ta cũng sẽ nói đến một conjecture đang cực kỳ nổi cộm trong TCS là Unique Games Conjecture.

13 Comments
Ba`i 1: Gap-Max-E3SAT(1, 1-1/m) chinh la 3SAT binh thuong nen no la NP-Hard.
Ba`i 2: Vi neu thiet ke duoc mot V nhu vay thi PCP(O(log n), O(1)) se contain lop NP. Bao ham thuc nguoc lai hinh nhu la de dang.
ai co tai lieu lien quan den “thuat toan xap xi tuyet doi ” thi lam on post len day cho minh nha. thanks]
Chi tiet hon ve bai tap so 2: Bao ham thuc nguoc lai (NP contains PCP) chung minh bang cach dua 2^r random bit strings kha di cho V chay, tu do ta se biet duoc xac suat chap nhan bang bao nhieu. Vi 2^r la da thuc n^c nen mot NP-verifier du nang luc de mo phong dieu nay. Nhu vay cai certificate cua NP-verifier o day chinh la q2^r bits trong proof \pi cua PCP-Verifier. Neu co gi sai rat mong anh Hung Ngo chi giao.
@Thinh Nguyen: lời giải của bạn chính xác rồi! Cho cả 2 bài tập.
Anh Hung co the noi ro hon ve derandomization cho bai MAX-3SAT duoc khong a?
Phan expander kho qua, em sap “tau hoa nhap ma” roi.
Hello Thịnh,
phần tử
): nếu ta cần n biến k-wise independent (
) thì ta chỉ cần lấy ngẫu nhiên một đa thức f(x) trong P_k và output f(1),f(2),…,f(n).
phần tử của P_k. Duyệt toàn bộ không gian này là hoàn thành quá trình Derandomization.
Hy vọng anh Hưng sẽ làm một bài về Derandomization với nhiều techniques đa dạng.
Đối với MAX-E3SAT thì khá đơn giản, hồi xưa học master mình được học như sau (tóm tắt):
- Với E3SAT thì điều quan trọng là trong từng Clause một thì 3 biến là độc lập nhau và ngẫu nhiên. Như vậy thay vì phải chọn một không gian với n biến ngẫu nhiên, ta chỉ cần làm việc trên một không gian với n biến không hoàn toàn ngẫu nhiên nhưng khi chọn 3 phần tử thì chúng độc lập nhau và ngẫu nhiên. Một không gian như vậy được gọi là 3-wise independent sample space.
- Xây dựng k-wise independent sample space khá đơn giản. Đối với một trường hữu hạn F (có q phần tử), thì tập P_k gồm tất cả các đa thức bậc nhỏ hơn k trong F sẽ sẽ cho ta cách tạo một k-wise independent sample space. (Khi k = 3 thì P_3 bao gồm
- Không gian q^n chuỗi n phần tử ngẫu nhiên đã được thu hẹp về
coquille: thay (
) bằng (
).
@anh Hưng: blog có thể cài chế độ preview để trước khi post đọc lại 1 lần không?
Hi RongChoi,
Ừ, để tôi tìm preview plugin xem sao.
Về derandomization thì đúng là cần một chuỗi bài khác. Phương pháp dùng 3-wise ind. dist. như RongChoi nói cũng được; trong bài tôi nhắc đến phương pháp conditional expectation để derandomize max-e3sat; p.p. này khác với p.p. dùng limited independence.
Đại khái,
. Do đó chắc chắn một trong hai biểu thức
hoặc
là
. Cả hai biểu thức này đều tính được trong poly-time. Ta gán
giá trị làm cho biểu thức tương ứng
. Rồi, recursively gán
.
P.P. dùng conditional expectation vẫn tìm qua uniform distribution trên toàn bộ
chứ không cần tạo 3-wise ind. dist. như p.p kia.
Em thấy có bài báo cua Karloff và Zwick, họ chưa chứng minh (mới chỉ có strong evidence) rằng thuật toán của họ là
-approximation algorithm cho MAX-3SAT.
Về phương pháp conditional expectation trong slide năm 2008 của anh Hưng, em thấy rằng các expected value được tính toán đều là các giá trị cố định theo input hết. Như vậy thuật toán của ta là hoàn toàn tất định (đương nhiên vì ta đang derandomize) nhưng như vậy em không thấy có liên quan gì giữa các giá trị
được tính toán và số clauses rốt cuộc được satisfied. Nói cách khác, em không nghĩ là ta có thể chứng minh được thuật toán dựa trên conditional expectation là 7/8-approximation algorithm.
Về phương pháp 3-wise independent sample space em chưa hiểu nên chưa comment được.
@Thịnh,
Zwick có bài năm 2002 hoàn tất cái evidence đó rồi.
Về conditional expectation method thì Thịnh cứ nghĩ tiếp. Khi nào xong chuỗi bài này tôi sẽ quay lại với derandomization. Dĩ nhiên là slides của tôi … đúng
Vâng ạ
Hi Thịnh,
![E[ C= \neg x_1 \vee x_2 \vee x_3 \ | \ x_1=1] = \frac34 E[ C= \neg x_1 \vee x_2 \vee x_3 \ | \ x_1=1] = \frac34](http://s.wordpress.com/latex.php?latex=E%5B%20C%3D%20%5Cneg%20x_1%20%5Cvee%20x_2%20%5Cvee%20x_3%20%20%5C%20%7C%20%5C%20x_1%3D1%5D%20%3D%20%5Cfrac34&bg=ffffff&fg=000000&s=0)
PS: Ngoài lề tí, không biết đã rong chơi đâu đó gặp Thịnh chưa nhỉ?
Hi RC huynh,
Chắc là chưa ạ, em chưa tham dự VietCRYPT, RIVF hay các conf. tương tự như thế bao giờ?
Chắc chắn em sẽ còn phải học hỏi nhiều.
Lẽ ra cũng có thể tham dự RIVF một hai lần nhưng em không theo hướng nghiên cứu dynamical systems rời rạc của “our common relation” nữa nên đành thôi…