CH NG 19ƯƠ
CÁC BÀI TOÁN NP – KHÓ VÀ NP - Đ Y Đ
Chúng ta đã bi t nhi u bài toán, đi n hình bài toán ng i bánế ườ
hàng, bài toán balô, bài toán chu trình Hamilton, Các thu t toán t t nh t
đ gi i quy t các i toán này đ u th i gian ch y không ph i th i ế
gian đa th c, ch ng h n thu t toán quy ho ch đ ng cho bài toán ng i ườ
bán hàng th i gian ch y O(n 22n), Cho t i nay ch a ai tìm ra đ c ư ượ
thu t toán th i gian đa th c cho b t kỳ bài toán nào trong l p các bài toán
trên. V n đ đ t ra t n t i hay không thu t toán th i gian ch y đa
th c cho các bài toán trên?
Các v n đ thuy t đ c trình bày trong ch ng này không kh ng ế ượ ươ
đ nh r ng, không t n t i thu t toán th i gian đa th c cho các bài toán trên.
Đi u các nhà nghiên c u đã làm đ c ch ra r ng, nhi u bài toán ượ
ch a thu t toán gi i trong th i gian đa th c liên quan v i nhau vư
m t tính toán. C th là, chúng ta s thi t l p hai l p: l p các bài toán NP ế
khó (NP-hard) l p các bài toán NP- đ y đ (NP complete). M t bài
toán NP y đ tính ch t r ng, th gi i đ c trong th i gian ượ
đa th c n u ch n u t t c các bài toán NP-đ y đ khác gi i đ c ế ế ư
trong th i gian đa th c. N u m t bài toán NP- khó gi i đ c trong th i ế ượ
gian đa th c thì t t c các bài toàn NP y đ gi i đ c trong th i gian đa ượ
th c. Ng i ta đã ch ra r ng, l p NP-đ y đ là l p con c a l p NP – khó, ườ
nh ng có bài toán là NP – khó nh ng không ph i là NP-đ y đ .ư ư
Các l p bài toán NP–khó NP - đ y đ r t giàu có. T t c các
bài toán n i ti ng ta đã quen bi t (bài toán ng i bán hàng, bài toán ế ế ườ
chi c balô, r t nhi u bài toán t h p, các bài toán c a thuy t đ thế ế
…) đ u là NP – khó.
245
Các l p NP khó NP - đ y đ liên quan t i s tính toán không
đ n đ nh (nondeterministic computations). Không th th c hi n đ c sơ ượ
tính toán không n đ nh trong th c t , b i v y v m t tr c quan, chúng ta ế
th ph ng đoán (ch a ch ng minh đ c) r ng, các bài toán NP - đ y ư ượ
đ ho c NP – khó không gi i đ c trong th i gian đa th c. ượ
Chúng ta s c g ng trình bày các v n đ đã nêu trên m t cách đ n ơ
gi n, không hình th c, không đi sâu vào các ch ng minh ph c t p.
19.1 THU T TOÁN KHÔNG Đ N Đ NH Ơ
Khái ni m thu t toán chúng ta s d ng cho đ n nay tính ch t ế
r ng, k t qu th c hi n m i phép toán đ c xác đ nh duy nh t. Thu t ế ượ
toán v i tính ch t này đ c g i ượ thu t toán đ n đ nh ơ (deterministic
algorithm).
Đ nh nghĩa 1. L p P bao g m t t c các bài toán gi i đ c b i ượ
thu t toán đ n đ nh trong th i gian đa th c (t c t n t i thu t toán gi i ơ
quy t nó v i th i gian ch y đa th c).ế
Đ xác đ nh l p NP các bài toán, chúng ta c n ph i đ a vào khái ư
ni m thu t toán không đ n đ nh ơ (nondeterministic algorithm). S m
r ng khái ni m thu t toán đ n đ nh thành khái ni m thu t toán không đ n ơ ơ
đ nh cũng hoàn toàn t ng t nh khi ta m r ng khái niêm otomat h u ươ ư
h n đ n đ nh thành otomat h u h n không đ n đ nh. Trong các thu t toán ơ ơ
không đ n đ nh chúng ta đ c phép đ a vào các phép toán mà k t qu c aơ ượ ư ế
không ph i m t giá tr đ c xác đ nh duy nh t m t t p h u ượ
h n các giá tr . Các phép toán đó đ c bi u di n b i hàm l a ch n: ượ
choice(S)
Đây hàm đa tr , giá tr c a các ph n t c a t p h u h n S. Ngoài
hàm choice, đ t các thu t toán không đ n đ nh chúng ta đ a vào hai ơ ư
l nh:
246
success
failure
Các l nh này các l nh d ng, hi u qu c a chúng s đ c t d i ượ ướ
đây.
Các thu t toán không đ n đ nh đ c th c hi n nh th nào? Đ ơ ượ ư ế
th c hi n thu t toán không đ n đ nh, chúng ta c n th c hi n các tính toán ơ
theo dòng đi u khi n đ c quy đ nh b i các câu l nh nh khi ta th c hi n ượ ư
thu t toán đ n đ nh, ch m t đi u khác bi t so v i thu t toán đ n đ nh ơ ơ
là, khi g p hàm l a ch n choice(S) thì s tính toán đ c phân thành nhi u ượ
nhánh, m i nhánh t ng ng v i m t giá tr đ c ch n ra t t p S, t t c ươ ượ
các nhánh này s làm vi c đ ng th i đ c l p v i nhau. M i nhánh tính
toán đó khi g p m t hàm l a ch n khác choice(S’) l i đ c phân thành ượ
nhi u nhánh tính toán khác. nh v y, khi th c hi n thu t toán không ư
đ n đ nh, chúng ta c n ph i th c hi n đ ng th i đ c l p nhi u đ ngơ ườ
tính toán (đ c t o thành t các nhánh t ng ng v i các l a ch n). Doượ ươ
đó, ta th quan ni m r ng, thu t toán không đ n đ nh t s tính ơ
toán song song không h n ch . Khi m t đ ng tính toán g p l nh ế ườ
success, thì nghĩa đ ng tính toán đó đã đ c t o thành t các l aườ ượ
ch n đúng đ n đã thành công cho ra nghi m c a bài toán, khi đó t t c
các đ ng tính toán đ u d ng làm vi c. Còn n u m t đ ng tính toán g pườ ế ườ
l nh failure, thì nghĩa đ ng tính toán này đã th t b i, không cho ra ườ
nghi m c a bài toán, ch riêng đ ng này d ng làm vi c. Máy kh ườ
năng th c hi n thu t toán không đ n đ nh s đ c g i ơ ượ máy không đ nơ
đ nh (nondeterministic machine). Không t n t i các máy không đ n đ nh ơ
trong th c t . Sau đây chúng ta s đ a ra m t vài d v thu t toán ế ư
không đ n đ nh.ơ
d 1. Xét bài toán tìm xem ph n t x trong m ng A[0 n -
1], n 1, hay không ? N u ta c n in ra ch s i A[i] = x, n u khôngế ế
thì in ra n. Thu t toán không đ n đ nh là nh sau: ơ ư
247
Search (x, A, n)
// Tìm x trong m ng A[0… n - 1].
{
i = choice( 0: n – 1);
if (A[i] = = x)
{
print(i);
success;
}
else {
print(n);
failure ;
}
}
Chú ý r ng, l nh gán i = choice( 0 : n 1) cho k t qu bi n i ế ế
đ c gán m t trong các giá tr trong đo n [0 … n - 1].ượ
d 2. Chúng ta đ a ra thu t toán không đ n đ nh đ s p x pư ơ ế
m ng A[0 n 1] theo th t không gi m. Trong thu t toán ta s d ng
m ng ph B[0 … n - 1].
Sort (A, n)
// S p x p m ng A[0 … n - 1], n ế 1.
{
(1) for ( i = 0 ; i < n ; i + + )
B[i] = ;
(2) for ( i = 0 ; i < n ; i + +)
{
(3) k = choice( 0 : n – 1);
(4) if (B[k] )
248
failure ;
else
B[k] = A[i] ;
}
(5) for ( i = 0 ; i < n-1 ; i + +)
if (B[i] > B[i + 1])
failure;
(6) print (B);
// in ra m ng B đã đ c s p theo th t không gi m. ượ
(7) success;
}
L nh l p (1) kh i t o m ng B ch a m t giá tr khác v i t t c các
giá tr trong m ng A. L nh l p (2) th c hi n đ t m i giá tr A[i] trong
m ng A vào m ng B t i ch s k, v i k đ c l a ch n không đ n đ nh b i ượ ơ
l nh (3). L nh (4) ki m tra xem B[k] đã ch a m t giá tr trong m ng A
hay ch a. Sau khi th c hi n l nh l p (2), nhánh tính toán không g p l như
failure s cho k t qu m ng B ch a các giá tr hoán v c a các giá tr ế
trong m ng A. L nh (5) ki m tra các giá tr trong m ng Btho mãn th
t không gi m hay không.
Bây gi chúng ta xác đ nh th i gian th c hi n thu t toán không đ n ơ
đ nh. Th i gian này đ c xác đ nh th i gian th c hi n đ ng tính toán ượ ườ
ng n nh t d n t i s k t thúc thành công (l nh success). Khi đánh giá th i ế
gian ch y c a thu t toán không đ n đ nh, chúng ta th s d ng các k ơ
thu t đánh giá th i gian ch y c a thu t toán đ n đ nh đã trình bày trong ơ
ch ng 15, ch c n l u ý r ng, th i gian th c hi n hàm choice(S) cácươ ư
l nh success failure O(1). Ch ng h n, d dàng th y r ng, thu t toán
không đ n đ nh tìm ph n t x trong m ng A[0 n - 1] (ví d 1) th iơ
gian ch yO(1), trong khi đó thu t toán đ n đ nh (tìm ki m tu n t ) c n ơ ế
th i gian O(n).
249