1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Lý thuyết độ phức tạp tính toán baitap 2 (KMA)

14 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Bài tập về máy Turing
Chuyên ngành Lý thuyết độ phức tạp tính toán
Thể loại Bài tập
Định dạng
Số trang 14
Dung lượng 677,65 KB

Nội dung

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 1

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)

Trang 2

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)

Trang 3

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)

Trang 4

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)

Trang 5

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ừ )

Trang 6

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)

Trang 7

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)

Trang 8

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)

Trang 9

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)

Trang 10

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)

Trang 11

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 đó:

Trang 12

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)

Trang 13

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

Trang 14

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

Ngày đăng: 23/04/2024, 15:39

w