Tổng hợp những câu hỏi cần thiết và quan trọng của môn Lý thuyết độ phức tạp tính toán (KMA). Tài liệu này giúp các bạn sinh viên có thể vượt qua các bài kiểm tra giữa kỳ, cuối kỳ và đạt kết quả cao nhất. Xin cảm ơn các bạn đã xem và tải tài liệu.
Trang 1B Bài tập
Câu 1 Xây dựng máy Turing 1 băng đoán nhận ngôn ngữ { 0i1j với điều kiện nào
đó của i, j, ví dụ i>j, i<j, i=j+1, j=i+1}
Câu 2 Xây dựng máy Turing 1 băng tính hàm f(n,m) = n*m-n, n*m-m, n*m+n, n*m+m (với n>=m)
Câu 3 Xây dựng máy Turing 2 băng đoán nhận ngôn ngữ {w#wR , w ∈ {0,1}+}, hoặc ngôn ngữ {w#w, w ∈ {0,1}+}
GIẢI
*Chú thích*:
Vì có nhiều ký tự đặc biệt nên tao quy ước lại để gõ cho nhanh, ae để ý thích nghi nha ^.^
q0 = q0 …, q0’ = q0’, qy = qy, qn = qn
∅ = trống
𝛿 = O
Câu 1
Điều kiện: i<j
Máy Turing 1 băng đoán nhận ngôn ngữ { 0i1j với i<j} được xác định như sau:
M = {Q, {0,1}, {0,1,∅}, 𝛿, q0, qy, qn}
Trong đó:
Q = {q0, q0’, q1, q2, q3, q4, qy, qn}
Hàm chuyển được xác định như sau:
O(q0, trống) = (qn, trống, S) O(q0, 1) = (qn, 1, S)
O(q0, 0) = (q1, trống, R) O(q1, trống) = (qn, trống, S) O(q1, 0) = (q1, 0, R)
Trang 2O(q1, 1) = (q2, 1, R) O(q2, 0) = (qn, 0, S) O(q2, 1) = (q2, 1, R) O(q2, trống) = (q3, trống, L) O(q3, 1) = (q4, trống, L) O(q4, 1) = (q4, 1, L) O(q4, 0) = (q4, 0, L) O(q4, trống) = (q0’, trống, R) O(q0’, 0) = (q1, trống, R) O(q0’, trống) = (qn, trống, S) O(q0’, 1) = (qy, 1, S)
Điều kiện i>j
Máy Turing đoán nhận ngôn ngữ có dang {0i1j với i>j} được xác định như sau:
M = (Q, {0,1}, {0, 1, trống}, O, q0, qy, qn)
Trong đó:
Q = {q0, q0’, q1, q2, q3, q4, q5, qy, qn}
Hàm chuyển được xác định như sau:
O(q0, trống) = (qn, trống, S) O(q0, 1) = (qn, 1, S)
O(q0, 0) = (q1, trống, R) O(q1, trống) = (qy, trống, S) O(q1, 0) = (q1, 0, R)
O(q1, 1) = (q2, 1, R) O(q2, 1) = (q2, 1, R)
Trang 3O(q2, 0) = (qn, 0, S) O(q2, trống) = (q3, trống, L) O(q3, 1) = (q4, trống, L) O(q4, 1) = (q4, 1, L) O(q4, 0) = (q4, 0, L) O(q4, trống) = (q0’, trống, R) O(q0’, 0) = (q1, trống, R) O(q0’, trống) = (qn, trống, S)
Điều kiện i = j+1
Máy Turing 1 băng đoán nhận ngôn ngữ {0i1j với i=j+1} được xác định như sau:
M = {Q, {0,1}, {0,1,trống}
Trong đó:
Q = {q0, q0’, q1, q2, q3, q4, q5, q6, qy, qn}
Hàm chuyển được xác định như sau:
O(q0, trống) = (qn, trống, S) O(q0, 1) = (qn, 1, S)
O(q0, 0) = (q1, trống, R) O(q1, 0) = (q1, 0, R) O(q1, 1) = (q2, 1, R) O(q2, 0) = (qn, 0, S) O(q2, 1) = (q2, 1, R) O(q2, trống) = (q3, trống, L) O(q3, 1) = (q4, trống, L) O(q4, 1) = (q4, 1, L) O(q4, 0) = (q4, 0, L)
Trang 4O(q4, trống) = (q0’, trống, R) O(q0’, 1) = (qn, 1, S)
O(q0’, 0) = (q1, trống, R) O(q1, trống) = (q5, trống, L) O(q5, 0) = (q6, 0, L)
O(q6, 0) = (qn, 0, S) O(q6, trống) = (qy, trống, R)
Điều kiện j = i+1
Máy Turing 1 băng đoán nhận ngôn ngữ {0i1j với j = i+1} được xác định như sau:
M = {Q, {0,1}, {0,1,trống}, O, q0, qy, qn}
Trong đó:
Q = {q0, q0’, q1, q2, q3, q4, q5, qy, qn}
Hàm chuyển được xác định như sau:
O(q0, trống) = (qn, trống, S) O(q0, 1) = (qn, 1, S)
O(q0, 0) = (q1, trống, R)
O(q1, trống) = (qn, trống, S)
O(q1, 0) = (q1, 0, R) O(q1, 1) = (q2, 1, R) O(q2, 0) = (qn, 0, S) O(q2, 1) = (q2, 1, R) O(q2, trống) = (q3, trống, L) O(q3, 1) = (q4, trống, L) O(q4, 1) = (q4, 1, L)
O(q4, 0) = (q4, 0, S)
Trang 5O(q4, trống) = (q0’, trống, R) O(q0’, 0) = (q1, trống, R) O(q0’, trống) = (qn, trống, S) O(q0’, 1) = (q5, 1, R)
O(q5, 1) = (qn, 1, S) O(q5, trống) = (qy, trống, L)
Câu 2
* Thêm chú thích:
Dấu Omega: omg
Dấu x khoanh tròn bên ngoài: x
( nói sơ qua ý tưởng về tính hàm kiểu này như sau:
- Đối với bài này thì mặc định dấu Omega được thêm vào đầu xâu, các
anh em không cần quan tâm đến nó cho tới khi thực hiện phép cộng hoặc trừ
- Đầu tiên là thực hiện phép nhân:
o Ví dụ 2x3 thì xâu vào có dạng 001000, nghĩa là bao nhiêu chữ
số 0 thì tượng trưng cho số đó, còn số 1 tượng trưng cho dấu nhân
o Trước tiên thêm # ở cuối xâu coi như ngăn cách xâu với kết quả
o Lấy 1 ngăn cách ở giữa, chia xâu ra làm 2 vế Duyệt tuần tự vế
trái, cứ mỗi số 0 ở vế trái thì lại bê toàn bộ 0 ở vế phải sang kết quả
Ví dụ: 001000#
Duyệt số 0 đầu tiên: x01000#000
Duyệt số 0 thứ 2: xx1000#000000
- Sau khi thực hiện xong phép nhân, kết quả có dạng như
001000#000000
o Lại thực hiện duyệt tuần tự vế trái Cứ mỗi số 0 ở vế trái thì thì
thêm một số 0 vào phần kết quả ( đối với phép cộng ) hoặc bớt một số 0 ở phần kết quả ( đối với phép trừ )
Trang 6Tính hàm F(n,m) = n*m-n
Máy Turing 1 băng tính hàm f(n,m)=n*m-n được định nghĩa như sau:
M = {Q, {0,1}, {0,1,trống, x, #, omg}, O, q0, qy, qn}
Trong đó:
Q = {q0, q0’, q1, q2, q3,q4, q5, q6, q7, q8, q9, q10, q11, q12, q13, q14, q15,
qy, qn}
Hàm chuyển được xác định như sau:
O(q0, trống) = (qn, trống, S) O(q0, 1) = (qn, 1, S)
O(q0, 0) = (q1, x, R) O(q1, trống) = (qn, trống, S) O(q1, 0) = (q1, 0, R)
O(q1, 1) = (q2, 1, R) O(q2, 0) = (q3, 0, R) O(q2, 1) = (qn, 1, S) O(q2, trống) = (qn, trống, S) O(q3, 0) = (q3, 0, R)
O(q3, 1) = (qn, 1, S) O(q3, trống) = (q4, #, L) O(q4, 0) = (q4, 0, L) O(q4, 1) = (q5, 1, R) O(q5, 0) = (q6, x, R) O(q6, 0) = (q6, 0, R) O(q6, #) = (q6, #, R) O(q6, trống) = (q4, 0, L) O(q5, x) = (q5, x, R)
Trang 7O(q5, #) = (q7, #, L) O(q7, x) = (q7, 0, L) O(q7, 1) = (q8, 1, L) O(q8, 0) = (q8, 0, L) O(q8, x) = (q0’, x, R) O(q0’, 0) = (q9, x, R) O(q9, 0) = (q9, 0, R) O(q9, 1) = (q5, 1, R) O(q0’, 1) = (q10, 1, L) O(q10, x) = (q10, 0, L) O(q10, omg) = (q11, trống, R) O(q11, 0) = (q12, trống, R) O(q12, 0) = (q12, 0, R) O(q12, 1) = (q12, 1, R) O(q12, #) = (q12, #, R) O(q12, trống) = (q13, trống, L)
- Phần in nghiêng này là thực hiện phép trừ Xem phần in đậm phía dưới để thấy sự khác biệt đối với phép cộng -
O(q13, 0) = (q14, trống, L) O(q14, 0) = (q14, 0, L) O(q14, #) = (q14, #, L) O(q14, 1) = (q14, 1, L) O(q14, trống) = (q11, trống, R)
O(q11, 1) = (q15, trống, R) O(q15, 0) = (q15, trống, R) O(q15, #) = (qy, #, R)
Trang 8Tính hàm F(n,m) = n*m+n
(Tương tự như tính f(n,m)=n*m-n, chỉ khác chỗ được tô đậm
dưới phần hàm chuyển)
Máy Turing 1 băng tính hàm f(n,m) = n*m+n được định nghĩa như sau:
M = {Q, {0,1}, {0,1,trống, x, omg, #}, O, q0, qy, qn}
Trong đó:
Q = {q0, q0’, q1, q2, q3,q4, q5, q6, q7, q8, q9, q10, q11, q12, q13, q14, q15,
qy, qn}
Hàm chuyển được xác định như sau:
O(q0, trống) = (qn, trống, S) O(q0, 1) = (qn, 1, S)
O(q0, 0) = (q1, x, R) O(q1, trống) = (qn, trống, S) O(q1, 0) = (q1, 0, R)
O(q1, 1) = (q2, 1, R) O(q2, 0) = (q3, 0, R) O(q2, 1) = (qn, 1, S) O(q2, trống) = (qn, trống, S) O(q3, 0) = (q3, 0, R)
O(q3, 1) = (qn, 1, S) O(q3, trống) = (q4, #, L) O(q4, 0) = (q4, 0, L) O(q4, 1) = (q5, 1, R) O(q5, 0) = (q6, x, R) O(q6, 0) = (q6, 0, R) O(q6, #) = (q6, #, R)
Trang 9O(q6, trống) = (q4, 0, L) O(q5, x) = (q5, x, R) O(q5, #) = (q7, #, L) O(q7, x) = (q7, 0, L) O(q7, 1) = (q8, 1, L) O(q8, 0) = (q8, 0, L) O(q8, x) = (q0’, x, R) O(q0’, 0) = (q9, x, R) O(q9, 0) = (q9, 0, R) O(q9, 1) = (q5, 1, R) O(q0’, 1) = (q10, 1, L) O(q10, x) = (q10, 0, L) O(q10, omg) = (q11, trống, R) O(q11, 0) = (q12, trống, R) O(q12, 0) = (q12, 0, R) O(q12, 1) = (q12, 1, R) O(q12, #) = (q12, #, R)
- Phần in đậm này là thực hiện phép cộng - O(q12, trống) = (q13, 0, L)
O(q13, 0) = (q13, 0, L) O(q13, #) = (q13, #, L) O(q13, 1) = (q13, 1, L) O(q13, trống) = (q11, trống, R)
O(q11, 1) = (q15, trống, R) O(q15, 0) = (q15, trống, R)
Trang 10O(q15, #) = (qy, #, R)
Tính hàm F(n,m) = n*m-m
*Chú ý: phần +-m thì không cần xét đến Omega ở đầu xâu, tức là không cần thêm
Omega vào*
Máy Turing 1 băng tính hàm f(n,m) = n*m-m được định nghĩa như sau:
M = {Q, {0,1}, {0,1,trống, #, x}, O, q0, qy, qn}
Trong đó:
Q = {q0, q0’, q1, q2, q3, q4, q5, q6, q7, q8, q9, q10, q11, q12, q13, qy, qn} Hàm chuyển được xác định như sau:
O(q0, trống) = (qn, trống, S) O(q0, 1) = (qn, 1, S)
O(q0, 0) = (q1, trống, R) O(q1, trống) = (qn, trống, S) O(q1, 0) = (q1, 0, R)
O(q1, 1) = (q2, 1, R) O(q2, 0) = (q3, 0, R) O(q2, 1) = (qn, 1, S) O(q2, trống) = (qn, trống, S) O(q3, 0) = (q3, 0, R)
O(q3, 1) = (qn, 1, S) O(q3, trống) = (q4, #, L) O(q4, 0) = (q4, 0, L) O(q4, 1) = (q5, 1, R) O(q5, 0) = (q6, x, R) O(q6, 0) = (q6, 0, R) O(q6, #) = (q6, #, R)
Trang 11O(q6, trống) = (q4, 0, L) O(q5, x) = (q5, x, R) O(q5, #) = (q7, #, L) O(q7, x) = (q7, 0, L) O(q7, 1) = (q8, 1, L) O(q8, 0) = (q8, 0, L) O(q8, trống) = (q0’, trống, R) O(q0’, 0) = (q9, trống, R) O(q9, 0) = (q9, 0, R) O(q9, 1) = (q5, 1, R) - Phần in nghiêng là thực hiện phép –m ( những phần còn lại thì làm
y hịt cho bài +m bên dưới -
O(q0’, 1) = (q10, trống, R) O(q10, 0) = (q11, trống, R) O(q11, 0) = (q11, 0, R) O(q11, #) = (q11, #, R) O(q11, trống) = (q12, trống, L) O(q12, 0) = (q13, trống, L) O(q13, 0) = (q13, 0, L) O(q13, #) = (q13, #, L) O(q13, trống) = (q10, trống, R)
O(q10, #) = (qy, trống, R)
Tính hàm F(n,m) = n*m+m
Máy Turing 1 băng tính hàm f(n,m) = n*m+m được định nghĩa như sau:
M = {Q, {0,1}, {0,1,#,trống,x}, O, q0, qy, qn}
Trong đó:
Trang 12Q = {q0, q0’, q1, q2, q3, q4, q5, q6, q7, q8, q9, q10, q11, q12, qy, qn} Hàm chuyển được xác định như sau:
O(q0, trống) = (qn, trống, S) O(q0, 1) = (qn, 1, S)
O(q0, 0) = (q1, trống, R) O(q1, trống) = (qn, trống, S) O(q1, 0) = (q1, 0, R)
O(q1, 1) = (q2, 1, R) O(q2, 0) = (q3, 0, R) O(q2, 1) = (qn, 1, S) O(q2, trống) = (qn, trống, S) O(q3, 0) = (q3, 0, R)
O(q3, 1) = (qn, 1, S) O(q3, trống) = (q4, #, L) O(q4, 0) = (q4, 0, L) O(q4, 1) = (q5, 1, R) O(q5, 0) = (q6, x, R) O(q6, 0) = (q6, 0, R) O(q6, #) = (q6, #, R) O(q6, trống) = (q4, 0, L) O(q5, x) = (q5, x, R) O(q5, #) = (q7, #, L) O(q7, x) = (q7, 0, L) O(q7, 1) = (q8, 1, L) O(q8, 0) = (q8, 0, L)
Trang 13O(q8, trống) = (q0’, trống, R) O(q0’, 0) = (q9, trống, R) O(q9, 0) = (q9, 0, R) O(q9, 1) = (q5, 1, R) - Phần tô đậm là thực hiện phép +m -
O(q0’, 1) = (q10, trống, R) O(q10, 0) = (q11, trống, R) O(q11, 0) = (q11, 0, R) O(q11, #) = (q11, #, R) O(q11, trống) = (q12, 0, L) O(q12, 0) = (q12, 0, L) O(q12, #) = (q12, #, L) O(q12, trống) = (q10, trống, R)
O(q10, #) = (qy, trống, R)
Câu 3
Máy Turing 2 băng đoán nhận ngôn ngữ w#w với w thuộc {0,1}+ được xác định như sau:
M(2) = {Q, {0,1}, {0,1,trống,#}, q0, qy, qn}
Trong đó:
Q = {q0, q1, q2, qy, qn}
Hàm chuyển được xác định như sau:
O(q0, (trống,trống)) = (qn, (trống,trống), (S,S))
O(q0, (1,trống)) = (qn, (1,trống), (S,S))
O(q0, (0,trống)) = (q1, (0,#), (S,R))
O(q1, (0,trống)) = (q1, (0,0), (R,R))
O(q1, (1,trống)) = (q2, (1,trống), (S,L))
Trang 14O(q2, (0,0)) = (qn, (0,0), (S,S))
O(q2, (1,0)) = (q2, (1,0), (R,R))
O(q2, (1,#)) = (qn, (1,#), (S,S))
O(q2, (trống,0)) = (qn, (trống,0), (S,S)) O(q2, (trống,#)) = (qy, (trống,#), (S,S))