Mỗi ngành khoa học đều có cơ sở lý thuyết của nó. Khoa học máy tính (Tin học) cũng vậy: cơ sở lý thuyết của khoa học máy tính là lý thuyết oâtoâmat. Lý thuyết oâtoâmat nghiên cứu về các mô hình toán học cho các thiết bị tính toán (các máy tính toán), trên cơ sở đó cho phép chúng ta xác định những khả năng tính toán của chúng, nghĩa là xác định những gì chúng có thể tính được và những gì chúng không thể tính được. Nói cách khác, trên cơ sở các mô hình toán học cho các thiết bị tính toán, chúng ta có thể biết được những bài toán nào giải được bằng máy tính và những bài toán nào không giải được. Đi xa hơn, chúng ta có thể xác định ranh giới giữa những bài toán có thể tính được một cách thực tế (có thể xây dựng được các chương trình máy tính để giải) với những bài toán về nguyên tắc có thể tính được nhưng không thực tế (các bài toán nan giải, intractable problem) vì mất quá nhiều thời gian, ngoại trừ một số tình huống cụ thể có kích thước nhỏ. Lĩnh vực nghiên cứu lý thú này được gọi là Lý thuyết độ phức tạp tính toán (computational complexity theory).
Trang 1LỜI NÓI ĐẦU
Mỗi ngành khoa học đều có cơ sở lý thuyết của nó Khoa học máy tính (Tin học) cũng vậy: cơ sở lý thuyết của khoa học máy tính là lý thuyết oâtoâmat
Lý thuyết oâtoâmat nghiên cứu về các mô hình toán học cho các thiết bị tính toán (các máy tính toán), trên cơ sở đó cho phép chúng ta xác định những khả năng tính toán của chúng, nghĩa là xác định những gì chúng có thể tính được và những gì chúng không thể tính được Nói cách khác, trên cơ sở các mô hình toán học cho các thiết bị tính toán, chúng ta có thể biết được những bài toán nào giải được bằng máy tính và những bài toán nào không giải được Đi
xa hơn, chúng ta có thể xác định ranh giới giữa những bài toán có thể tính được một cách thực tế (có thể xây dựng được các chương trình máy tính để giải) với những bài toán về nguyên tắc có thể tính được nhưng không thực tế (các bài toán nan giải, intractable problem) vì mất quá nhiều thời gian, ngoại trừ một số tình huống cụ thể có kích thước nhỏ Lĩnh vực nghiên cứu lý thú
này được gọi là Lý thuyết độ phức tạp tính toán (computational complexity theory).
Một cách trực quan, Thuật toán là một dãy hữu hạn các bước cho ta cách giải bài toán Ta có thể hình dung cụ thể hơn: Thuật toán là một chương trình máy tính được viết bằng một ngôn ngữ lập trình nào đấy Một cách toán học, Thuật toán là một máy Turing đơn định, viết tắt là DTM (Deterministic Turing
Machine) Tập L gồm các Input được M chấp nhận (Yes) gọi là ngôn ngữ chấp nhận bởi máy M, kí hiệu L(M)
Khi giải một bài toán cụ thể, không những ta chỉ cố gắng tìm một thuật
toán giải được bài toán đã cho, mà còn muốn tìm một thuật toán “tốt nhất” Trong nhiều trường hợp tốt nhất được hiểu là “nhanh nhất” , và ta đi đến khái
niệm về độ phức tạp thời gian
Độ phức tạp của thuật toán chính là yếu tố cơ sở để phân loại các bài
toán Các bài toán mà thuật toán giải nó có độ phức tạp thời gian cấp từ đa thức trở xuống được gọi là thuộc lớp P Các bài toán mà thuật toán giải nó là thuật toán không đơn định và có độ phức tạp thời gian là đa thức được gọi là thuộc lớp NP
Tìm hiểu về lớp các bài toán P và NP là điều cần thiết khi nghiên cứu về
Lý thuyết oâtoâmat, trong khuôn khổ một tiểu luận chúng tôi xin được trình
bày Các lớp P và NP và các bài toán NP đầy đủ.
Trang 2Với thời gian có hạn không sao tránh khỏi sơ xuất, kính mong quý Thầy
Cô và các anh chị học viên góp yù để tiểu luận hoàn chỉnh hơn Xin chân thành cám ơn
2
Trang 3I MÁY TURING:
1 Khái quát về máy Turing:
Khi thiết kế và cài đặt một phần mềm tin học cho một vấn đề nào đĩ ta cần phải đưa ra phương pháp để giải quyết mà thực chất đĩ là thuật tốn giải quyết vấn đề này Vì vậy, thuật tốn là khái niệm nền tảng của hầu hết các lĩnh vực của tin học
Trong những năm 30 của thế kỷ trước khi khoa học cơng nghệ phát triển, cĩ nhiều bài tốn vẫn khơng tìm thấy thuật tốn để giải Năm 1936
A Turing đã đưa ra một công cụ để mô tả thuật toán gọi là máy Turing
Máy Turing là một máy giả định với bộ nhớ ngồi cĩ dung lượng được xem như là vơ hạn Trong bộ nhớ ngồi các giá trị được bố trí sao cho cĩ thể truy cập đọc và sửa đổi được Ta cĩ thể xem máy Turing như là máy đốn nhậân một ngơn ngữ hình thức gọi là ngơn ngữ đếm được đệ quy Đồng thời
nĩ được sử dụng để mơ tả một lớp hàm quan trọng gọi là các hàm cĩ thể tính được
Cũng như mọi mơ hình tính tốn của ta, máy Turing làm việc theo thời gian rời rạc Ơû mỗi thời điểm, nĩ ở một trạng thái (nhớ) cụ thể mà số tất cả các trạng thái cĩ thể là hữu hạn Một đầu đọc-viết đọc các kí tự trên một băng, mỗi thời điểm một kí tự Một cặp (q,a) xác định một bộ ba (q’, a’, m) mà q là trạng thái, a là kí tự và m (dịch chuyển) Điều đó có nghĩa là sau khi đọc kí tự a ở trạng thái q, máy chuyển sang trạng thái q’, viết a’ ở vị trí của a (có thể a’= a, nghĩa là không thay đổi) và dịch chuyển đầu đọc-viết tùy theo m
Nếu đầu đọc-viết sắp “rơi khỏi“ băng tức là một dịch chuyển trái (tương ứng phải) được chỉ thị khi máy đang đọc ô trái nhất (tương ứng phải nhất) của băng thì một ô trống mới được tự động thêm vào ở đầu mút tương ứng Khả năng mở rộng vô hạn bộ nhớ ngoài có thể được xem như một đặc trưng phần cứng có sẵn của mỗi máy Turing
Dạng vào-ra của một máy Turing được đặc tả như sau : máy bắt đầu tính tốn bằng cách đọc kí tự trái nhất của một từ vào cho trước ở một trạng thái bắt đầu đặc biệt Thơng tin vào được chấp nhận nếu tính tốn đạt đến một trạng thái kết thúc đặc biệt Nếu máy được xem như một máy dịch chứ khơng phải một máy chấp nhận thì từ trên băng, sau khi máy đã đạt đến trạng thái kết
Trang 4thúc, lập thành đường ra đối với từ vào đã cho Khi đĩ một số kí tự nào đĩ trên băng cĩ thể bỏ qua
Như vậy, băng cĩ thể được xem vừa như kênh vào-ra vừa như bộ nhớ
vơ hạn tiềm năng Những khác nhau cơ bản giữa các máy Turing và các loại ôtômát khác đĩ là, một ôtômát hữu hạn chỉ cĩ bộ nhớ trong được xác định bởi tập trạng thái hữu hạn của nĩ, băng vào khơng được dùng như bộ nhớù bổ sung, một ôtômát hữu hạn chỉ đọc thơng tin vào bằng cách quét
từ trái sang phải Trong một ôtômát tuyến tính giới nội, bộ nhớ ngồi bị giới hạn trên bởi kích thước của từ vào Do đĩ, rõ ràng máy Turing tổng quát hơn các mơ hình tính tốn khác, mỗi thuật tốn cĩ thể được thực hiện bởi một máy Turing
Thực chất, máy Turing là một mơ hình máy Nĩ phân tồn bộ quá trình hoạt độâng ra thành các bước thao tác rất đơn giản Bản thân máy Turing là một mơ hình khái quát và đơn giản cĩ thể mơ hình hố một quá trình tính tốn bất kỳ Trong phần này ta chỉ xét đến máy Turing đa băng Máy Turing là một
cơ cấu bao gồm:
• Đầu chỉ huy (cĩ thể thay đổi trạng thái)
• k băng được giới hạn về phía trái và vơ hạn về phía phải (k là số tự nhiên)
• Trên băng chia thành ô, mỗi ô được ghi vào một ký tự của bộ chữ ngồi T nào đĩ (bộ chữ hữu hạn)
• Đầu chỉ huy cĩ k đầu đọc viết tương ứng với k băng để đọc-viết Đầu chỉ huy đọc một ô ở k băng một ký tự của bộ chữ T sau khi viết xong nĩ cĩ thể dịch chuyển sang phải hoặc sang trái ô nĩ đang đứng Sau đĩ đầu chỉ huy cĩ thể chuyển sang trạng thái mới Tập các trạng thái là hữu hạn ký hiệu là Q
Bước tính tốn: Máy Turing (đầu chỉ huy) đang ở trạng thái q nào đĩ và chỉ
vào các kí tự X1, X2, …., Xk rồi thay thế chúng bằng các kí tự Y1, Y2, … , Yk
vào đúng các ô tương ứng (Yi là kí tự của bộ chữ T) Sau đĩ các đầu đọc viết chuyển sang vị trí trái (hoặc phải, hoặc dừng) và trạng thái của đầu chỉ huy chuyển sang q’ Đĩ là một bước tính tốn
Ta cĩ thể mơ tả qua hình vẽ sau:
Ban đầu máy ở trạng thái :
4
X1
X2
Xk
q Đầu chỉ huy
Băng 1
Băng 2
…………
Băng k
Trang 5Sau một bước tính tốn máy ở trạng thái:
2/ Máy Turing đơn định đa băng:
2.1 Định nghĩa 1:
∑ = {X1, X2, …., Xn} được gọi là một bảng chữ nếu nĩ hữu hạn và khơng rỗng Mỗi phần tử của nĩ được gọi là kí tự Một xâu trên bảng chữ ∑ là một dãy hữu hạn các ký tự được xếp liền nhau
Ví dụ : α = Xi1……Xit Xij ∑
|α| = t là kí hiệu dộ dài xâu
α1, α2 là 2 xâu, ta cĩ thể cĩ α3 = α1α2 cũng là 1 xâu trên bảng chữ ∑
Ta kí hiệu 1 xâu rỗng là cĩ tính chất | | = 0 và = =
Máy Turing là một cơng cụ để xử lí các xâu trên bảng chữ nào đĩ
2.2 Định nghĩa 2:
Ngơn ngữ trên bảng chữ :
Giả sử cĩ ∑ = {X1, X2, …., Xn} là một bảng chữ
Kí hiệu ∑’={ : là một xâu trên ∑ bao gồm cả xâu rỗng} Khi đĩ L được gọi là ngơn ngữ trên bảng chữ ∑ nếu L ⊆ ∑’, cĩ nghĩa là L là tập con của ∑’
2.3 Định nghĩa 3:
Y1
Y2
Y
k
q Đầu chỉ huy
Băng 1
Băng 2
…………
Băng k
Trang 6Máy Turing đơn định đa băng là một bộ bảy M = (Q, ∑, ∆, δ, B, qo, qf) trong đĩ:
• Q là tập trạng thái hữu hạn khác rỗng, qo, qf Q
• ∑ là bảng chữ ngồi
• ∆ là tập con của ∑ và gọi là bảng chữ trong
• δ là hàm chuyển, δ:
•
• với di và i= 1…k L, R, S tương ứng cĩ nghĩa là chuyển sang trái, sang phải, dừng Chú ý rằng hàm chuyển cĩ thể là hàm bộ phận
• , B là kí tự trắng
• qo là trạng thái đầu
• qf là trạng thái kết thúc
Khi thiết lập máy Turing, quan trọng nhất là xây dựng hàm chuyển.
2.4 Hoạt động nhận biết xâu của máy Turing :
Đầu tiên xâu α = a1…an thuộc bảng chữ trong được nằm bên trái băng thứ nhất, các băng cịn lại chứa ký tự trắng Đầu chỉ huy ở trạng thái qo và các đầu đọc viết đều ở mép trái Do hàm tác động vào qo :
khi đĩ trạng thái q’ được xác lập
- Ở băng một được thay a1 bởi a1’ và d1 để hướng hoạt động sau đĩ sạng trái (L), sang phải (R), hay dừng (S)
- Ở băng 2 được thay B bởi và d2 là hướng hoạt động
………
- Ở băng k được thay B bởi và dk là hướng hoạt động
Ta cĩ thể minh họa bằng hình vẽ sau:
Ban đầu của máy ở trạng thái :
6
a3
ε
q Đầu chỉ huy
Băng 1
Băng 2
…………
Băng k
a1 a
ε ε …
ε ε ε …
Trang 7Sau đó nhờ hàm chuyển máy có thể chuyển sang trạng thái sau nếu
d1= R, d2= R, d3=S, …., dK= S
Một xâu vào (thuộc bảng chữ trong ) được gọi là nhận biết được bởi máy Turing M nếu xuất phát từ các đầu đọc viết đều ở mép trái của băng và máy ở trạng thái qo hoạt động đạt trạng thái kết thúc qf
Tập các xâu như vậy được gọi là ngôn ngữ nhận biết bởi máy Turing M
2.5 Định nghĩa 4:
Quá trình tính toán của máy Turing :
Chúng ta định nghĩa hình trạng của máy Turing đơn định đa băng
• Hình trạng là một dãy xâu ,…, thuộc bảng chữ với (i= 1,2,…,k), = xiqyi và xiyi là một xâu nằm trên băng thứ i Hình trạng đầu là (qoα, qo, qo, …, qo)
• Ký hiệu dãy xâu ( ,…, ) là D1 thì một bước thực hiện của máy Turing là quá trình chuyển từ hình trạng D1 sang D2 và ký hiệu
D1 D2
• Nếu có chỉ số t mà có D1 D2 …… Dt, viết là
D1 Dt
• Quá trình chuyển D1 sang Dt gọi là một quá trình tính toán của máy Turing M
a3
a’2
q Đầu chỉ huy
Băng 1
Băng 2
…………
Băng k
ε ε …
Trang 8f Định nghĩa 5:
Xâu được nhận biết bởi máy Turing M
Giả sử M = , là một xâu trong bảng chữ ( bảng chữ trong)
Khi đó ta nói M nhận biết nếu (qoa1… an, qo, …, qo) ( ) với điều kiện thì
Đặt L (M) = {α: α ∈∆* và α nhận biết bởi M}, khi đó L(M) được gọi là ngôn ngữ nhận biết bởi máy Turing M
Ví dụ:
Nếu β = a1….at, ta đặt β-1= atat-1…a1, α là xâu đối xứng trên bảng chữ {0, 1} neáu α∈ {ββ-1, β1β-1, β0β-1}
Ta xây dựng máy Turing M = (Q, ∑, ∆, δ, ε, qo, qf) hai băng với:
Q = {qo, q1, q2, q3, q4, q5}, ∑ = {ε, X, 0, 1}, qf = q5, ∆ = {0, 1}
Hàm δ thực hiện theo bảng sau:
Trạng thái
cũ
mới
qo
q1
q2
q4
Với xâu vào α = 01110, hình trạng ban đầu (qo01110, qo), ta có dãy các hình trạng sau:
+ (q101110, Xq1)
+ (0q11110, X0q1)
+ (01q1110, X01q1)
+ (011q110, X011q1)
8
Trang 9+ (0111q10, X0111q1)
+ (01110q1, X01110q1)
+ (01110q2, X0111q20)
+ (01110q2, X011q210)
+ (01110q2, X01q2110)
+ (01110q2, X0q21110)
+ (01110q2, Xq201110)
+ (01110q2, q2X01110)
+ (0111q30, Xq301110)
+ (0111q40, X0q41110)
+ (011q310, X0q31110)
+ (011q410, X01q4110)
+ (01q3110, X01q3110)
+ (01q4110, X011q410)
+ (0q31110, X011q310)
+ (0q41110, X0111q40)
+ (q301110, X0111q30)
+ (q401110, X01110q4)
+ (q501110, X01110q5)
Vậy máy Turing M xây dựng như trên nhận biết được xâu α Ta có thể chứng minh máy Turing trên nhận biết tất cả các xâu đối xứng trên bảng chữ {0, 1}
Trang 102.6 Định nghĩa 6:
Độ phức tạp tính toán thời gian của máy turing M là hàm T(n) nếu với mọi xâu w có độ dài n thì đều tồn tại một dãy hình trạng có nhiều nhất là T(n) bước nhận biết w (T(n) là số nguyên dương) Nếu có một xâu vào có
độ dài n mà máy M không dừng thì đối với n đó T(n) không xác định
2.7 Định nghĩa 7:
Độ phức tạp dung lượng nhớ của máy Turing M là hàm nguyên dương S(n) nếu mọi xâu có độ dài n và với mọi băng thì S(n) là khoảng cách lớn nhất ( tính theo đơn vị oâ) kể từ mép trái các băng mà các đầu đọc –viết phải di chuyển Nếu có một xâu vào có độ dài n mà một đầu đọc-viết nào
đó không xác định được thì S(n) không xác định
3 Máy Turing không đơn định đa băng:
3.1 Định nghĩa 8 : Máy Turing không đơn định đa băng
Máy Turing không đơn định đa băng là bộ bảy M = , trong đó :
• là tập trạng thái hữu hạn khác rỗng, qo,qF Q
• là bảng chữ ngoài
• là tập con của và gọi là bảng chữ trong
• , là kí tự trắng
• qo là trạng thái đầu, qF là trạng thái kết thúc
của
3.2 Định nghĩa 9 : Quá trình tính toán của máy Turing không đơn định M.
Chọn một giá trị của giả sử là (r, (y1,d1), (y2,d2),……, (yk,dk)) với di = Như vậy máy chuyển sang trạng thái mới r và xi được thay bằng yi Sau đó nếu di = L thì đầu đọc viết sang trái, di = R thì đầu đọc viết sang phải hoặc di = S thì đầu đọc viết dừng, ở đây i= 1,…,k
Hình trạng của máy Turing không đơn định đa băng tương tự như máy Turing đơn định đa băng
• Ký hiệu dãy xâu ( ,…, ) là D thì một bước thực hiện của máy Turing chính là một quá trình chuyển từ hình trạng D1 sang D2 và ký
• Nếu có D1 D2 … Dt thì ta ghi D1 Dt, quá trình chuyển này được gọi là một quá trình tính toán của máy Turing M ( hay còn gọi
là dẫn xuất)
3.3 Định nghĩa 10 :
10
Trang 11Giả sử M là máy Turing không đơn định đa băng T(n) là độ phức tạp tính toán thời gian của M nếu với mỗi xâu w có độ dài n thì đều tồn tại một dẫn xuất D1 Dt để nhận biết w mà có nhiều nhất là T(n) bước
3.4 Định nghĩa 11:
Giả sử M là máy Turing không đơn định đa băng S(n) là độ phức tạp dung lượng nhớ của M nếu với mọi xâu w có độ dài n thì đều tồn tại một dẫn xuất để nhận biết w mà sử dụng nhiều nhất là S(n) oâ khác nhau trên mỗi băng
4 Sự tương ñương của máy Turing một băng và máy Turing đa băng:
Cần nhớ lại rằng các ngôn ngữ kể được đệ quy được định nghĩa là những ngôn ngữ được kiểm nhận bởi máy Turing một băng Chắc chắn rằng máy Turing đa băng đều kiểm nhãn tất cả các ngôn ngữ kể được đệ quy vì máy một băng chính là máy đa băng Tuy nhiên liệu có những ngôn ngữ không phải kể được đệ quy nhưng được máy đa băng kiểm nhận hay không? Câu trả lời là không, và chúng ta sẽ chứng minh điều này bằng cách chỉ ra cách mô phỏng một máy Turing đa băng bằng một máy một băng
Định lý: Mỗi ngôn ngữ được kiểm nhận bằng một máy Turing đa băng
đều là kể được đệ quy
Chứng minh: chứng minh này được gợi tả trong hình sau:
X
X
Giả sử ngôn ngữ L được kiểm nhận bởi một máy Turing M k-băng Chúng ta mô phỏng M bằng một máy Turing N một băng nhưng băng này
có thể được xem như có 2k rãnh Nửa số rãnh giữ các băng của M và nửa còn lại mỗi rãnh giữ một dấu ghi chỉ ra vị trí đầu đọc-ghi hiện tại trên băng tương ứng của M Theo hình trên, giả sử k=2, các rãnh thứ 2 và thứ 4 giữ nội dung của các băng thứ nhất và thứ 2 của M, rãnh 1 giữ vị trí của đầu đọc-ghi cho băng 1, rãnh 3 giữ vị trí đầu đọc ghi của băng 2 của M
Trang 12Để mơ phỏng một bước chuyển của M, đầu đọc-ghi của N phải thăm k dấu ghi Vì thế để N khơng bị lạc, lúc nào nĩ cũng phải ghi nhớ cĩ bao nhiêu dấu ghi ở bên trái của nĩ; con số đếm đĩ được cát như một thành phần trong bộ phận điều khiển hữu hạn của N Sau khi thăm mỗi dấu ghi và lưu ký hiệu được quét trong một thành phần của bộ phận điều khiển hữu hạn, N biết được nhữngký hiệu nào đang được quét bởi mỗi đầu đọc-ghi của M N cũng biết được trạng thái của M vì nĩ được lưu trong bộ phận điều khiển của N, vì thế N biết được M sẽ thực hiện bước chuyển nào
N bây giờ sẽ thăm lại mỗi dấu ghi trên băng của nĩ, thay đổi ký hiệu trong rãnh biểu diễn cho băng tương ứng của M và di chuyển dấu ghi sang phải hoặc sang trái nếu cần Cuối cùng N thay đổi trạng thái của M như được ghi trong bộ phận điều khiển của riêng nĩ Đến điểm này, N đã mơ phỏng xong một bước chuyển của M
Chúng ta chọn cho làm kiểm trạng của N tất cả những trạng thái tương ứng với một trong những kiểm trạng của M Vì thế mỗi khi M kiểm nhận, N cũng kiểm nhận và N khơng kiểm nhận gì khác với M
Về tính hữu hạn: Một sai lầm thường gặp là lẫn lộn một giá trị luơn hữu
hạn tại một thời điểm bất kỳ với một tập giá trị hữu hạn Phép xây dựng máy đa băng thành một băng cĩ thể giúp chúng ta định rõ sự khác biệt này Trong phép xây dựng đĩ, chúng ta đã dùng các rãnh trên băng để ghi nhận
vị trí của các đầu đọc-ghi Vì sao chúng ta khơng thể lưu những vì trí này như các số nguyên trong bộ phận điều khiển hữu hạn? Người ta cĩ thể lập luận một cách vơ ý rằng sau n bước chuyển, máy Turing cĩ thể cĩ các vị trí đầu đọc-ghi ở bên trong n vị trí của các vị trí đầu đọc-ghi ban đầu, và vì thế chỉ phải lưu các số nguyên cho đến n
Vấn đề là mặc dù các vị trí luơn hữu hạn, tồn bộ tập vị trí luơn vơ hạn Nếu dùng trạng thái để lưu một vị trí đầu đọc-ghi nào đĩ thì phải cĩ một thành phần dữ liệu của trạng thái lưu một số nguyên làm giá trị Thành phần này buộc tập trạng thái phải vơ hạn, ngay cả nếu chỉ cĩ một số hữu hạn trong chúng cĩ thể dược dùng tại một thời điểm bất kỳ Định nghĩa của một máy Turing địi hỏi rằng tập trạng thái phải hữu hạn Vì thế chúng ta khơng được phép lưu một vị trí đàu đọc-ghi trong bộ phận điều khiển hữu hạn
Sự khác biệt giữa máy Turing đa băng và máy Turing đơn băng là máy Turing đơn băng chỉ cĩ một băng cho phép vơ hạn hai đầu, cĩ tập trạng thái kết thúc và khơng cĩ tình trạng dừng của đầu đọc viết ( khơng cĩ S) Tuy vậy người ta cũng chỉ ra rằng những khác biệt này khơng làm thay đổi lớp ngơn ngữ được nhận biết bởi máy Turing Vì vậy khi xây dựng máy Turing,
ta cĩ thể chọn loại nào cũng được
12