1
Chương 4. TÍNH TOÁN KHÔNG TIỀN ĐỊNH
NỘI DUNG
4.1 Các khái niệm về độ phức tạp tính toán
4.2 Tính toán hẹp
4.3 Độ phức tạp của các bài toán NP
4.4 Một bài toán NP đầy đủ: bài toán sắp xếp
TÀI LIỆU THAM KHẢO
1. Bài giảng về cơ sở tính toán tại địa chỉ
2. Dexter C. Kozen. Theory of Computation. Springer, 2006
3. Michael Sipser , Introduction to the Theory of Computation, 2nd edition,
Couse technology 2005
4. Nguyễn Văn Ba. Lý thuyết ngôn ngữ và tính toán. NXB ĐHQG Hà nội, 2006.
5. Phan Đình Diệu. Lý thuyết ô tô mát và thuật toán. NXB ĐH & THCN, 1977.
2
4.1. Các khái niệm về độ phức tạp tính toán
4.1.1 Độ phức tạp với máy Turing
Tiêu chuẩn đánh giá độ phức tạp: Xét máy Turing M với bảng chữ .
- Thời gian tính toán: x
*
quá trình tính toán trên x thực hiện bởi M:
x
0
=q
0
x x
1
… x
k
(1)
thời gian tính toán x là T
M
(x) = k. Nếu không có (1) thì T
M
(x) không xác định
- Không gian tính toán (số ô cần dùng trên băng – dung lượng bộ nhớ ngoài): Hàm
phức tạp theo không gian của M là L
M
(x) = Max{ x
i
, 1 i k}.
Định nghĩa các hàm phức tạp
-Hàm phức tạp theo thời gian của M là
T
M
(n) = Max{kx
*
, x=n và quá trình tính toán của M trên x gồm k bước}.
- Hàm phức tạp theo không gian của M là
L
M
(n) = Max{ L
M
(x) x
*
, x=n và M tính được x}.
- M có độ phức tạp tính toán đa thức tồn tại đa thức p(n) sao cho T
M
(n) p(n) với
mọi n 0.
- M có độ phức tạp không gian đa thức tồn tại đa thức p(n) sao cho L
M
(n) p(n)
với mọi n 0.
3
Ví dụ: Cho = {0, 1}. Xâu x
*
gọi là đối xúng nếu đọc x từ trái sang phải
và từ phải sang trái là như nhau. Hàm f:
*
*
với f(x) = 1 nếu x đối xứng và f(x) =
0 nếu x không đối xứng. Xây dựng máy Turing M có bảng chữ {0, 1} và tập các trạng
thái { q
1
, q
2
, q
3
, q
4
, q
5
, q
6
, q
7
}, trong đó q
1
là trạng thái đầu, q
7
là trạng thái cuối. Bảng
hàm chuyển:
0
1
B
q
0
(q
1
, B, R)
(q
2
, B, R)
(q
9
, 1, R)
q
1
(q
1
, 0, R)
(q
1
, 1, R)
(q
3
, B, L)
q
2
(q
2
, 0, R)
(q
2
, 1, R)
(q
4
, B, L)
q
3
(q
5
, B, L)
(q
7
, 0, L)
q
4
(q
8
, 0, L)
(q
6
, B, L)
q
5
(q
5
, 0, L)
(q
5
, 1, L)
(q
0
, B, R)
q
6
(q
6
, 0, L)
(q
6
, 1, L)
(q
0
, B, R)
q
7
(q
7
, B, L)
(q
7
, B, L)
(q
9
, B, R)
q
8
(q
8
, B, L)
(q
8
, B, L)
(q
9
, B, R)
q
9
Có T
M
(n) n + n + (n-2) + (n-2) + < n
2
/2 + O(n
2
);
L
M
(n) = n + 1.
4
4.1.2 Lớp P
Lớp P là lớp các bài toán (ngôn ngữ) quyết định bởi một máy Turing đa thức.
Một hàm f tính được với thời gian đa thức nếu có một máy Turing đa thức tính f.
Luận đề Cook-Karp: Bài toán từ đối với ngôn ngữ L (x L?) là quyết định được
hiệu dụng L P.
Cho hai bài toán L
1
1
và L
2
2
.
- L
1
gọi là rút gọn về L
2
ký hiệu L
1
L
2
nếu tồn tại hàm f :
*
*
sao cho f là tính
được theo thời gian đa thức và f(x) L
2
xL
1
(Hình 1).
- Nếu L
1
L
2
thì L
2
P L
1
P, L
1
P L
2
P.
- Nếu L
1
L
2
và L
2
L
3
thì L
1
L
3
.
- L
1
, L
2
tương đương đa thức, ký hiệu L
1
P
L
2
L
1
L
2
và L
2
L
1
Hình 1: L
1
rút gọn về L
2
5
4.1.3 Lớp NP
Lớp NP là lớp các bài toán (ngôn ngữ) được thừa nhận bởi một máy Turing không tiền định
đa thức.
Định lý: Cho ngôn ngữ L NP. Tồn tại một máy Turing tiền định M và đa thức p(n) sao
cho M quyết định L với hàm phức tạp theo thời gian bị chặn bởi 2
p(n)
.
Cấu trúc của lớp NP:
- Lớp tương đương đa thức C
1
là ở dưới lớp tương đương C
2
, ký hiệu C
1
C
2
nếu tồn tại một
biến đổi đa thức từ mọi ngôn ngữ trong C
1
về mọi ngôn ngữ trong C
2
.
- P NP
- Với mọi L
1
P và mọi L
2
L
1
L
2
- Một bài toán L là NP-khó nếu với mọi bài toán L’ NP L’ L.
- Một bài toán L là NP-đầy đủ nếu L NP và L là NP khó (Hình 2).
Hình 2: Mô tả các lớp bài toán
6
4.2. Ví dụ về tính toán hẹp
4.2.1. Tìm hàm ngược
Xét hàm P-thời gian F. Để thuận tiện, giả thiết F(x) = x (điều này thường
thỏa mãn nếu F(x), x đều được giới hạn bởi đa thức). Hàm ngược của F nghĩa là,
tìm được x F
-1
(y), tức là F(x) = y. Có thể có nhiều hơn 1 nghiệm nếu F là hàm nhiều-
một, nhưng chỉ cần tìm 1 lời giải.
Cần thử tất cả x chấp nhận được đối với F(x) = y. Giả sử hàm F được tính trong thời
gian tuyến tính bởi một máy con trỏ. Chi phí cho việc tính hàm ngược của F là bao
nhiêu?
Không gian cần sử dụng là x + y + không-gian
F(x)
= O(x ), nhưng
thời gian tính toán là O(x 2
x
) nên chắc chắn không thể thực hiện được. Hiện thời
không có phương pháp được chứng minh trong trường hợp xấu nhất. Cũng không thể
chứng minh bài toán ngược chỉ yêu cầu thời gian siêu tuyến tính.
7
Ví dụ bài toán phân tích thừa số. Cho F(x
1
, x
2
) = x
1
x
2
là tích của hai số nguyên x
1
,
x
2
, với x
1
= x
2
. F(x) gần như bằng x. Để đơn giản, giả thiết x
1
và x
2
là các
số nguyên tố. Tính hàm ngược của F có nghĩa là phân tích F(x) ra thừa số. Cần phải
kiểm tra bao nhiêu số nguyên tố? Mật độ của các số nguyên tố n-bit xấp xỉ là 1/(n ln2).
Tuy nhiên, bài toán phân tích thừa số bằng phương pháp tìm kiếm vét cạn sẽ đòi hỏi
thời gian hàm mũ. Trong thực tế, thuật toán tốt nhất được biết cho đến nay đối với bài
toán kinh điển này chạy với thời gian khoảng
y
2
, mặc dù có rất nhiều cố gắng trong
hàng trăm năm của nhiều thế hệ các nhà khoa học tài giỏi.
Hàm một chiều: Hàm x
F
y mà (x y) tính toán dễ, còn (y x) tính toán khó
với phần lớn x gọi là hàm một chiều. Tình trạng của chúng một phần do cảm tính ngây
thơ trong lý thuyết tính toán. Nhiều hàm có vẻ như một chiều nhưng chưa được kiểm
chứng. Tuy nhiên, một vài hàm đã được chứng tỏ là hàm một chiều. Nhiều vấn đề lý
thuyết và ứng dụng dựa trên những hiện tượng có tính giả thuyết.
8
4.2.2. Bài toán tìm kiếm và bài toán NP
Bài toán tìm kiếm: Cho trước x, tìm u thỏa mãn tân từ P(x, u) trong một thời gian
x
O(1)
.
Bài toán hàm ngược Bài toán tìm kiếm
Ví dụ: Bài toán tìm chu trình Hamilton C trong đồ thị G có thể coi như bài toán tìm
hàm ngược của hàm f(G, C) với kết quả G, 0…0 nếu thực sự tồn tại chu trình C. Nói
cách khác f(G, C) = 0…0.
Bài toán tìm kiếm có thể gồm hai phần:
(a) Bài toán quyết định: xem xét (đưa ra các chứng cớ) về sự tồn tại
(b) Bài toán xây dựng: tìm thực tế w.
Hai dạng bài toán trên sẽ có thời gian giới nội như nhau. Giả sử thuật toán A(x) tìm
w thỏa mãn P(x, w) (nếu w tồn tại). Nếu A không thể tìm được w trong khoảng thời
gian cho phép thì coi w không tồn tại. Tuy nhiên, cũng có thể sử dụng những chứng cớ
của thuật toán để giải quyết bài toán quyết định.
Theo một hướng khác, mỗi tân từ P có thể mở rộng thành P’((x, y), w) = P(x, w) &
(w <y) đối với mỗi thuật toán quyết định nếu các chứng cớ tồn tại có thể sử dụng để
tìm chúng (bằng tìm kiếm nhị phân với độ lặp w). Đáng tiếc là, đối với nhiều bài
toán, thuật toán không biết được tồn tại hay không.
9
Ngôn ngữ của bài toán là tập các input thừa nhận được. Đối với bài toán tìm hàm
ngược, đó chính là phạm vi (tập xác định) của f. Đối với bài toán tìm kiếm, đó chính
là tập tất cả các x mà P(x, w) có ảnh hưởng đến một vài w. Ngôn ngữ NP là tập hợp tất
cả các input thừa nhận bởi một máy Turing P-thời gian không tiền định. Toàn bộ 3 lớp
ngôn ngữ - tìm kiếm, hàm ngược và NP- là đồng nhất. Tại sao một máy NP thừa nhận x
nếu bài toán tìm kiếm với input x và tân từ P là giải được? Một cách đơn giản, máy có
dấu nhắc điều khiển các chữ số của w và khiểm tra P(x, w). Ngược lại, với P nào sẽ
phù hợp TM không tiền định M? P(x, w) kiểm tra chính xác nếu M thừa nhận x, khi bộ
điều khiển lựa chọn trạng thái tương ứng chữ số của w.
Rất thú vị là, các TM tiền định và không tiền định giới nội với không gian đa thưc là
tương đương sức mạnh. Do đó sẽ cải tiến TM có hình trạng thừa nhận được đơn nhất.
Mỗi xâu thừ nhận được sẽ được thừa nhận trong khoản thời gian s2
s
, trong đó s là giới
hạn không gian. Tiếp theo, cần kiểm tra A(x, w, s, k): TM có thể điều khiển từ hình
trạng x đến hình trạng w trong khoảng thời gian < 2
k
và không gian s. Để làm được
điều đó, đối với mỗi z, cần kiểm tra A(x, z, s, k-1) và A(z, w, s, k-1) với thời gian t
k
t
k-1
+ z. Như vậy, t
k
= O(sk) = O(s
2
).
Bài toán tìm kiếm là trò chơi với qui tắc chuyển P-thời gian và cùng một khoảng
thời gian dịch chuyển. Một hệ thống lớn các bài toán giải được từ các dịch chuyển cho
phép và/hoặc độ phức tạp khác giới nội đối với các qui tắc chuyển.
10
4.3. Độ phức tạp của các bài toán NP
4.3.1. Thế nào là bài toán NP
Đã chứng tỏ rằng, các bài toán tìm kiếm, tìm hàm ngược, và kiểu NP là tương đương nhau.
Không ai biết được rằng, liệu tất cả các bài toán đó có giải được trong P-thời gian hay không?
Đó là câu hỏi (gọi là P=?NP) có lẽ là một trong các câu hỏi thú vị nhất trong lý thuyết khoa học
máy tính. Các bài toán giải được với thời gian hàm mũ nhưng liệu có tồn tại hay không một thuật
toán tốt hơn? Đối với mỗi bài toán, vấn đề tìm một thuật toán hữu hiệu có thể giống như một sự
tuyệt vọng, trong khi đó các bài toán tương tự hoặc giảm bớt không đáng kể các điều kiện lại có
thể giải được.
Các ví dụ:
1. Bài toán qui hoạch tuyến tính: Tìm min C
T
x, với điều kiện Ax b, trong đó A
là ma trận cấp mxn.
- Thuật toán đơn hình của Dantzig tìm được x nhanh với phần lớn A. Tuy
nhiên, với một số A thì lại có độ phức tạp tính toán hàm mũ.
- Bài toán trên có thuật toán P-thời gian nhờ phương pháp Elipsoid của
Yudin Nemirovsky (1970).
2. Bài toán kiểm tra tính nguyên tố: Xác định một số nguyên p cho trước có phải là
số nguyên tố hay không?
- Trong trường hợp xấu nhất, thuật toán thử tất cả các ước có thể có của p có
độ phức tạp hàm mũ thời gian 2
p
.
- Có các thuật toán nhanh hơn để giải bài toán này (sẽ xét trong 5.1).
11
3. Bài toán các đồ thị đẳng cấu: Cho hai đồ thị G
1
và G
2
. Liệu G
1
và G
2
có đẳng
cấu với nhau hay không?
- Kiểm tra tất cả n!
- Luks (1980) đã chỉ ra thuật toán với O(n
d
) để giải bài toán với O(n
d
) bước,
trong đó d là bậc của đồ thị. Thuật toán đó sẽ là P-thời gian nếu d = O(1).
4. Bài toán các cạnh độc lập (Bộ ghép): Tìm số lượng (lớn nhất) các cạnh độc lập
trong một đồ thị đã cho.
- Có thể sử dụng thuật toán luồng cực đại để giải trong trường hợp
- Trong trường hợp tổng quát có thể sử dụng thuật toán của J. Edmonds.
Nhiều bài toán tranh cãi trong nhiều thập niên hoặc hàng thế kỷ, cuối cùng cũng tìm được
lời giải. Một vài cải tiến đối với các bài toán trên cho đến nay vẫn chưa có lời giải:
1. Bài toán qui hoạch tuyến tính: Chưa tìm được lời giải với x là số nguyên.
2. Bài toán thừa số: Có thể giải với
n
n
thời gian. Chưa tìm được lời gải tốt hơn.
3. Bài toán đồ thị con đẳng cấu: trong trường hợp tổng quát, một đồ thị có thể đẳng
cấu với đồ thị con của một đồ thị khác. Chưa tìm được lời giải P-thời gian.
4. Bài toán các đỉnh độc lập: Tìm số lượng các đỉnh độc lập (không có cạnh chung)
trong một đồ thị đã cho. Chưa có lời giải P-thời gian.
Đã chứng minh rằng, trò chơi cờ tuyến tính và một số trò chơi khác có độ phức
tạp hàm mũ. Tuy nhiên, không có bài toán nào trong số các bài toán nêu trên hoặc
bài toán tìm kiếm/tìm hàm ngược/NP được chứng tỏ có yêu cầu siêu-P-thời gian.
12
4.3.2. Bài toán NP-đầy đủ
Lý thuyết NP-đầy đủ là một thử nghiệm để trả lời câu hỏi trên.
Hàm P-thời gian f rút gọn một NP-tân từ p
1
(x) thành p
2
(x) p
1
(x) = p
2
(f(x))., với
mọi x.
p
2
là NP-đầy đủ tất cả các NP bài toán p
1
đều có thể thu về p
2
.
Thực chất là mỗi bài toán NP-đầy đủ như là trường hợp tồi tệ nhất của tất cả các NP
bài toán khác. Điều đó là một gợi ý tốt cho việc phải xây dựng thuật toán nhanh để
giải bài toán NP-đầy đủ.
Mỗi P-thuật toán cho một bài toán NP-đầy đủ có thể cung cấp lời giải cho tất cả
các NP bài toán khác.
Tại sao phải đối mặt với bài toán NP-đầy đủ? Có thể trình bày lại bài toán, tìm một
bài toán tương tự dễ giải hơn và cung cấp những thông tin mong muốn hoặc cho
những ý nghĩa mạnh hơn.
13
4.4. Một bài toán NP đầy đủ: bài toán xếp ngói
4.4.1. Phát biểu
Bài toán NP-đầy đủ xếp ngói: Hàm ngược của hàm cho trên các viên ngói vuông,
có giá trị là dòng đầu tiên của mỗi viên ngói và danh sách các viên ngói đã sử
dụng. Mỗi viên ngói là một trong 26
4
hình vuông chấp nhận có chứa các chữ cái
Latinh thường ở 4 góc. Hai viên ngói có thể xếp kề nhau nếu các chữ cái của một
trong các cạnh hình vuông của cả hai viên có các chữ cái như nhau (Hình 1)
Hình 1: Các viên ngói có thể xếp kề nhau
Mục đích: Tiến hành rút gọn mỗi bài toán NP/tìm kiếm P về bài toán xếp ngói.
Nhắc lại: Bài toán tìm kiếm là: cho trước x, hãy tìm w thỏa mãn một tính chất P(x,
w) tính được với P-thời gian. Trạng thái thực của w là một NP bài toán vì w có thể
đoán nhận một cách không tiền định và xác thực trong khoảng P-thời gian.
14
Các lập luận trung gian: Trước hết cần rút gọn bài toán trên về một bài toán NP
chuẩn. Ứng cử viên tự nhiên là bài toán [Có hay không? w: U(v, w)], trong đó U là
máy Turing phổ dụng mô phỏng P(x, w) đối với v = px. Có khó khăn nẩy sinh là U
không chạy với P-thời gian. Cần phải hạn chế U tới u phải dừng với giới hạn P-thời
gian nào đó. Làm thế nào để tạo được bậc cố định phù hợp đối với đa thức mô
phỏng ( thậm chí bậc cao) thời gian P? Hãy lấy TM u(v, w) đối với v = 00…0 mô
phỏng vào khoảng u
2
bước của U(px, w) (thực chất là P(x, w)). Nếu số lượng o
trung gian trong v đủ dài thì u sẽ có thời gian cho phép để mô phỏng P, mặc dù u
chạy với thời gian bình phương, mặc dù thời gian của P tối thiểu có thể là lập
phương (với xâu ngắn không có trung gian). Do đó, bài toán NP P(x, w) được rút
gọn về u(v, w) bằng ánh xạ x thành f(x) = 0…01px = v với v xác định bởi thời
gian hạn chế đối với P. Chú ý là, chương trình p của P(x, w) là cố định.
Tuy nhiên, nếu bài toán NP không thể giải được trong P-thời gian thì u-bài toán
cũng không thể. Một cách tương đương, bài toán [Có hay không? w: U(v, w)] giải
được trong P-thời gian thì bài toán tìm kiếm cũng vậy. Không biết sự lựa chọn trên
là đúng hay không. Cần phải rút gọn bài toán tìm kiếm u về bài toán xếp ngói.
15
4.4.2. Rút gọn
Tính u(v, w) (trong đó v = 00…01px) bằng TM hoạt động như một mảng tế bào ô
tô mát 1-con trỏ, chạy v
2
bước và ngừng nếu w không giải tân từ P. Một cách
khác, đưa vào một vòng lặp vô hạn. Trạng thái thực x giải được nếu u(v, w) chạy
về phía trước đối với w và v = 00…01px. Hình 2 là lược đồ không-thời gian tính
u(v, w):
Hình 2: lược đồ không-thời gian tính u(v, w):
Tạo n là thời gian (không gian) của u là v
2
. Mỗi dòng của bảng biểu diễn một
cấu hình của u trong các thời điểm khác nhau. Quá trình giải u là điền vào sau các
dấu “?” tại bước thứ hai.
16
Giả sử ai đó điền vào bảng sai, mà không thể thực hiện tính toán hiện thời tương
ứng. Yêu cầu mỗi một bảng sai có 4 hình vuông liền kề không thể chấp nhận xuất
hiện trong tính toán với u trong mỗi input (Hình 3).
Hình 3: Một phần bảng sai
17
4.4.3. Chứng minh tính NP
Do input v và lời giải đoán nhận w là như nhau trong cả hai bảng nên hai
dòng đầu tiên là được chấp nhận. Quá trình tính toán hiện thời bắt đầu trong
vào đường thẳng thứ ba (hình 2). Một cách tự nhiên, trong một phần đầu của
đường thẳng chuyển vị của một vài ô từ các ô trước của đường thẳng bị sai. Có
việc thăm từ trạng thái trong cả hai đường thẳng và ô trỏ vào giải một tổ hợp 4
ô kề nhau (hình 3).
Đối với x đã chọn, trạng thái thực của w thỏa mãn P(x, w) là tương đưong với
trạng thái thực của bảng với mô tả dòng 1, không có trạng thái dừng, và hình
mẫu chấp nhận được của 4 ô liền kề.
Chuyển bảng thành bài toán xếp ngói:
- Mỗi hình vuông của bảng được tách rời bởi dấu “-”, mỗi biên ngói được
tách rời bởi bởi “…”; bẻ mỗi hình vuông thành 4 mảnh, mỗi mảnh biểu thị
một góc của viên ngói. Nếu 4 hình vuông liền kề trong bảng là chấp nhận
được thì hình vuông cũng là viên ngói chấp nhận được.
- Tuy nhiên, mỗi thuật toán P-thời gian được nới rộng dòng thứ nhất đã cho
thành bảng có thể giải tất cả các bài toán NP bằng biến đổi chúng thành bài
toán xếp ngói như đã nêu.
18
Nhiệm vụ về nhà:
Tham khảo tài liệu 4 các vấn đề sau:
Xét các công thức với các phép tính mệnh đề. Bài toán thỏa được là: Có
hay không một hàm làm cho công thức mệnh đề là đúng (SAT). Chứng
minh SAT là NP-đầy đủ.
Chứng minh bài toán phủ các đỉnh của một đồ thị (VC) đã cho là NP-đầy
đủ