Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 14

HỌC TẬP VÌ NGÀY MAI KIẾM ĂN

B. 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)
HỌC TẬP VÌ NGÀY MAI KIẾM ĂN

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)
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)
HỌC TẬP VÌ NGÀY MAI KIẾM ĂN

O(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)
HỌC TẬP VÌ NGÀY MAI KIẾM ĂN

O(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)
HỌC TẬP VÌ NGÀY MAI KIẾM ĂN

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) = (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ừ )
HỌC TẬP VÌ NGÀY MAI KIẾM ĂN

Tí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)
HỌC TẬP VÌ NGÀY MAI KIẾM ĂN

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)
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)
HỌC TẬP VÌ NGÀY MAI KIẾM ĂN

Tí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)
HỌC TẬP VÌ NGÀY MAI KIẾM ĂN

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)
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)
HỌC TẬP VÌ NGÀY MAI KIẾM ĂN

O(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)
HỌC TẬP VÌ NGÀY MAI KIẾM ĂN

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)
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 đó:
HỌC TẬP VÌ NGÀY MAI KIẾM ĂN

Q = {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)
HỌC TẬP VÌ NGÀY MAI KIẾM ĂN

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 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))
HỌC TẬP VÌ NGÀY MAI KIẾM ĂN

O(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))

You might also like