You are on page 1of 45

Bảo mật và độ phức tạp thuật

toán
Máy Turing
Ngôn ngữ và hàm tính được
Nội dung
 Ngôn ngữ đoán nhận bởi máy Turing
 Ngôn ngữ và hàm tính được - khả tính
2/ Ngôn ngữ đoán nhận bởi máy
Turing (tiếp)
Ngôn ngữ đoán nhận bởi máy Turing
 Ngôn ngữ đoán nhận bởi máy Turing
 Ngôn ngữ được chấp nhận bởi máy Turing
tập hợp các xâu đoán nhận bởi máy Turing
L(M) ∗ ∗ ∗
 Ngôn ngữ đoán nhận bởi máy T được gọi là ngôn ngữ đệ quy liệt kê
(recursively enumerable - RE) => lớp ngôn ngữ đệ quy liệt kê
 Lớp ngôn ngữ đệ quy liệt kê chứa lớp ngôn ngữ phi ngữ cảnh (CFL)

 Nếu L(M) đoán nhận bởi máy Turing M thì


• máy TM dừng (kết thúc) với mọi đầu vào (input) w  L
• nhưng có thể không dừng trên một số đầu vào (input) z  L
 Lớp con của RE: RS - recursive sets - ngôn ngữ đệ quy
• nếu ngôn ngữ L  RS thì L đoán nhận bởi (ít nhất) một máy Turing mà dừng trên
mọi đầu vào input
3/ Hàm tính được (bởi máy Turing)
(T-khả tính)
Hàm T-tính được
 Xét máy Turing đơn định (hàm chuyển đơn định)
 Máy Turing M trên bảng chữ 
Nói M xác định hàm bộ phận ∗ ∗
:
+ miền xđ: ngôn ngữ đoán nhận bởi M - L(M)
+ với từ ∗
, có một phép tính hợp lệ tối đa từ hình trạng
đến :

khi đó là kết quả của phép tính của máy M với xâu vào f
Nói M tính hàm
f g h
q0 qi
 Định nghĩa: Hàm bộ phận ∗ ∗
được gọi là T-tính được (Turing
computable) nếu tồn tại máy Turing M đơn định tính được
 Ví dụ: Xây dựng/thiết kế máy Turing tính hàm F(n) = n+1, nN
số n biểu diễn: nhị phân 5=B101. 100 => 101; 101 => 110
ý tưởng:
B1/ dịch phải đến ký tự cuối (khác trắng)
B2/ nếu 0: ghi 1 và kết thúc
B3/ nếu 1: ghi 0, dịch trái
B4/ lặp lại B3 đến khi gặp 0, hoặc gặp B

 Ví dụ: Xây dựng/thiết kế máy Turing tính hàm F(n) = n+1, nN
số n biểu diễn: nhị phân 5=B101. 100 => 101; 101 => 110

101 => 01 => 10 1 => 101


=> 10 1 => 1 00 => 110 !
 Ví dụ: như trên, nếu n biểu diễn nhất phân: n=n số 0
Xây dựng thế nào ?
Máy Turing tính hàm nguyên
 Có thể thấy với quy ước biểu diễn đối số n,
máy Turing trên tính hàm nguyên một đối số
 Hàm k đối số ?
 quy ước:
hệ nhất phân, mỗi số nguyên a = a số 0; các đối số phân cách bởi số 1
đầu vào là xâu dạng: 0..010..010..0B
Nếu máy M dừng (có thể không chấp nhận input nào đó) với băng có giá trị
thì có kết quả:
 Hàm f tính bởi máy M, dừng với mọi bộ đối số - gọi là hàm đệ quy toàn bộ.
 Hàm f tính bởi máy M, không dừng với một số bộ đối số - gọi là hàm đệ quy
bộ phận
 Ví dụ: xây dựng máy Turing M tính cho hàm trừ riêng

input: , output: \

ý tưởng:
• lặp lại:
(1) thay thế 0 ở nửa trái bằng B,
(2) trượt sang phải qua ký tự 1 tìm 0 trái nhất của nửa bên phải, thay bằng 1
(3) trượt sang trái (đến B-dịch phải) để gặp 0 đầu tiên - lặp
• dừng khi:
(2) trượt phải tìm 0 của nửa bên phải thì gặp B =>đã thay hết nửa phải => chuyển các số 1 thành B !
(3) trượt trái đến B không gặp 0 => m số 0 đã xóa thành B => thay tất cả 0 và 1 còn lại thành B !
 Kết quả ...
4/ Lớp các hàm T-tính được
Hàm đơn giản
 Xây dựng một số máy Turing tính các hàm đơn giản G*  G*
G: bảng chữ không chứa ký tự trắng B
Bộ n phần tử (n tuple) - các phần tử phân cách bởi 1 ký tự B/
 các Hàm hằng
∗ ∗

input: bộ n từ của G*: ( )


output: giá trị ∗

Ví dụ:
cho G={0,1}, n=2, hàm có thể chọn như sau
input: output: 101
ý tưởng:
xóa từ gặp # - xóa xong
xóa từ gặp # - xóa xong
ghi ra băng từ 101
 Hàm chiếu
,

input: bộ n từ của G* output: từ thứ i của bộ


Ví dụ: xây dựng máy Turing thực hiện hàm chiếu ,

Ý tưởng
xóa phần tử 1 - đến khi gặp #
trượt qua phần tử 2
xóa phần tử 3, 4 - dừng
Hợp thành
Máy được tiêu chuẩn hóa - standardized
 Khái niệm: máy M là được tiêu chuẩn hóa nếu sau khi tính xong, đầu đọc ở ký
tự khác B trái nhất
B a

qf
 Mệnh đề (4.1):
Cho máy Turing M, có thể xây dựng từ M máy M' được tiêu chuẩn hóa, thực hiện
chức năng tính toán như M - tương đương M
ý tưởng:
Máy được tiêu chuẩn hóa - standardized
 Mệnh đề (4.2):
Có thể luôn giả thiết đc rằng trạng thái đầu không nằm trong vế phải của bất kỳ quy
tắc chuyển nào.
Tức là không tồn tại quy tắc chuyển dạng , là trạng thái đầu
Ý tưởng:

Có thể tách trạng thái đầu ra khỏi phần còn lại (đặt là ), mô tả:
q1
Máy được chuẩn hóa - normalized
 Khái niệm: máy M là được chuẩn hóa nếu có tập con các trạng thái
thỏa
(1) Không có trạng thái nào thuộc A nằm ở vế trái của mọi quy tắc chuyển
(2) : tồn tại quy tắc chuyển có (q,x) ở vế trái
 Nói cách khác: một phép tính dừng khi và chỉ khi máy M rơi vào trạng thái
, trạng thái của A được gọi là trạng thái dừng

x
q A

Q
Máy được chuẩn hóa - normalized
 Mệnh đề (4.3):
Cho máy M, có thể xây dựng từ M máy M' được chuẩn hóa, thực hiện cùng chức năng
như M
Ý tưởng:
 Có thể xem máy M: có 1 trạng thái mở đầu, 1 trạng thái dừng

q1 qh

 Từ máy M, có thể xây dựng máy M' được tiêu chuẩn hóa (standardized) và
chuẩn hóa (normalized) có cùng chức năng như M
Tổ hợp các máy Turing: ghép nối tiếp
 Cho máy Turing T được chuẩn hóa (normalized) có trạng thái dừng duy nhất
, máy T'
Máy Turing tổ hợp từ T và T' theo cách ghép nối tiếp, ký hiệu T next T':
+ đánh số lại các trạng thái của T' để không trùng với trạng thái của T
+ lấy làm trạng thái khởi đầu của T'

q1 qh

T next T’
Tổ hợp các máy Turing
q1 qh

T next T’
 Nếu T' được tiêu chuẩn hóa (chuẩn hóa) thì T next T' cũng được tiêu chuẩn
hóa (chuẩn hóa)
 Nếu
• T được tiêu chuẩn hóa, thực hiện hàm f,
• T' thực hiện hàm g,
thì máy T next T' thực hiện hàm g(f)
Tổ hợp các máy Turing: ghép rẽ nhánh
 Cho máy Turing T được chuẩn hóa (normalized), dừng ở các trạng thái

Và k máy Turing
 Phép tổ hợp ghép nối rẽ nhánh T ra là

+ Đánh số lại các trạng thái của để không trùng


+ Trạng thái dừng của máy T là trạng thái đầu cho máy
k=2: cấu trúc if then else h1 1

q1
h2
2

T next if h1:T1 , if h2:T2


Lệnh lặp while
 Máy T được chuẩn hóa có 2 trạng thái dừng
 Máy T' được chuẩn hóa có 1 trạng thái dừng
 Máy Turing: while T do : T'
làm trạng thái khởi đầu của T',
trạng thái dừng của T' trở thành trạng thái khởi đầu của T
Các kỹ thuật xây dựng máy Turing
Bộ điều khiển có ô nhớ tạm
 Máy Turing
• Bộ điều khiển: có hữu hạn ô nhớ để lưu thông tin
• Trạng thái mở rộng: là bộ [q,#,#,...] q - trạng thái, # - ô nhớ
• hàm chuyển - tập các quy tắc chuyển ([q, a], b)  ([q', x], y, m)
a

[ q , B, B ]

 Ví dụ: xây dựng máy Turing tìm xem ký tự đầu tiên trên băng có còn xuất
hiện ở phía sau hay không ?
 Ví dụ: xây dựng máy Turing tìm xem ký tự đầu tiên trên băng có còn xuất
hiện ở phía sau hay không ?
• Đọc ký tự đầu, lưu vào ô nhớ tạm 0 1 1 B
• ([q1,B],0)  ([q2,0],0,R)
• ([q1,B],1)  ([q2,1],1,R) [q,B ]

• Dịch phải 0 1 1 B
• nếu đọc đc ký tự khác trong ô nhớ tạm => dịch phải
• đến khi đọc được B => kết thúc - ký tự không xuất hiện [q,0 ]

• ([q2,0],1)  ([q2,0],1,R)
• ([q2,1],0)  ([q2,1],0,R)
• ([q2,0],B)  ([qf,B],B,R) ([q2,1],B)  ([qf,B],B,R)
• Nếu đọc đc ký tự giống trong ô nhớ tạm => dừng/halt - ký tự xuất hiện
• ([q2,0],0) ([q2,1],1)
 Ví dụ: dịch phải xâu trên băng đi 1 ô nhớ
• bảng chữ: 0,1,#
• điều khiển: [q,B]
• đọc ký tự đầu => lưu ô nhớ tạm trong bộ điều khiển, ghi #, dịch phải
• bắt đầu lưu và dịch: [q,a] đọc được ký tự tiếp x,
lưu x vào ô nhớ tạm ; ghi a xuống băng (vị trí của x), dịch phải
• tiếp tục đến khi đọc được ký tự # thì: ghi nốt ký tự từ ô nhớ tạm xuống & dừng

0 1 1 B B B 1 1 B B B 0 1 B B B 0 1 1 B
1 B
[q,B] [q,0] [q,1] [q,B]
Máy Turing nhiều rãnh
 Máy Turing:
• băng nhớ chia thành k phần (hữu hạn)

• Ví dụ: kiểm tra số n (biểu diễn nhị phân) có chia hết cho k < n không => kiểm tra n
có phải số nguyên số
 Máy Turing nhiều rãnh
• Ví dụ: kiểm tra số n (biểu diễn nhị phân) có chia hết cho k < n không => kiểm tra n
có phải số nguyên số
• Ý tưởng:
sử dụng máy có 3 rãnh
+ rãnh 1: chứa số n nằm giữa ký tự phân cách đầu, cuối: ,$
+ rãnh 2: chưa số k
+ rãnh 3: ban đầu copy giá trị n; sau đó trừ (liên tiếp) số ở rãnh 2, đến khi
1 0 1 1 $ B 1 0 1 1 $ B 1 0 1 1 $ B
B B B B B B B B B B 1 0 B B B B B 1 0 B B
B B B B B B B B 1 0 1 1 B B B 1 0 0 1 B B
Chương trình con
 Máy T có thể vận hành như chương trình con
• ý tưởng:
• Máy M có
• 1 trạng thái khởi đầu
• 1 trạng thái dừng => không có quy tắc chuyển tiếp theo => trạng thái trở về
• Từ trạng thái trở về có thể
• trạng thái của máy T khác - chương trình lớn
• trạng thái khởi đầu máy T khác - gọi tiếp chương trình khác
Ƭ

Ƭ’
 Ví dụ: thiết kế máy T thực hiện phép nhân số nguyên m*n
• input: output: ∗

ý tưởng
• đặt ký tự 1 ở bên phải
• lặp lại m lần việc copy n số 0 tới bên phải
• mỗi lần "đánh dấu" một ký tự 0 của

• Thủ tục copy n số 0 tới bên phải


Một số biến thể của máy Turing
 Máy Turing với băng vô hạn hai chiều
 Máy Turing với nhiều băng vô hạn hai chiều
 Máy Turing không đơn định
 ...
Mô phỏng máy Turing
Mô phỏng máy Turing bởi máy Turing khác:
 Định nghĩa: máy T được mô phỏng bởi máy T' nếu
• có đơn ánh f ứng mỗi cấu hình của M  cấu hình của M' sao cho
nếu có phép toán trong M thì cũng có phép toán trong M'
• Máy M' dừng từ cấu hình xuất phát khi và chỉ khi máy M dừng từ cấu hình c
Mô phỏng máy Turing bởi máy Turing khác:
 Nếu máy T' mô phỏng cho máy T' thì:
từ hàm F' thực hiện bởi T' có thể tìm lại hàm F thực hiện bởi T qua phép biểu diễn
đối tượng dữ liệu, kết quả :
Máy thực hiện phép đơn ánh: từ một dữ liệu của máy T trả lại một dữ liệu máy T'
(dữ liệu máy T được mã hóa)
Máy thực hiện đơn ánh ngược lại: từ một kết quả của máy T' trả lại một kết quả
cho máy T (dữ liệu được giải mã)
Máy next T' next thực hiện cùng hàm với máy T
Máy Turing với băng nhớ vô hạn 2 phía/chiều
 Máy Turing băng nhớ vô hạn 2 chiều
• băng nhớ không bị giới hạn (phía trái)
• mở rộng hàm chuyển cho trường hợp ở cận trái:

α α
B x B B y B

q q

α
B B B

q
 Máy Turing với băng nhớ vô hạn 2 chiều:
• Nếu ngôn ngữ L đoán nhận bởi máy M1 có băng vô hạn 2 phía
• thì L cũng đoán nhận bởi máy M2 có băng vô hạn 1 phía

• Ý tưởng:
• M2 có 2 rãnh,
• rãnh trên - biểu diễn nửa băng bên phải (từ vị trí ban đầu) của M1,
• rãnh dưới - biểu diễn nửa băng bên trái

#
M2
• Trạng thái: Q2 : trạng thái là bộ [q,{U,D}] với q: trạng thái thuộc Q1 , U/D: rãnh
up/down
• Bảng chữ: :
• Trạng thái kết thúc:
• Hàm chuyển
• lần đầu
• nếu M1 dịch phải: thì M2 có

• nếu M1 dịch trái: thì M2 có

• tiếp theo
• nếu M1 đang làm việc phía phải ô đầu: M2 thao tác với rãnh trên, R/L cùng
hướng

nếu M đang làm việc phía trái ô đầu: M thao tác với rãnh dưới, R/L ngược
Máy Turing nhiều băng, vô hạn 2 phía
 Máy Turing nhiều băng, vô hạn 2 phía
• có k băng nhớ (vô hạn 2 phía)
• có k đầu đọc ghi
• hàm chuyển:
• (q1 , a , b , c,...)  (q2 , x , m1 , y , m2 , z , m3 ,...); mi {R,L}

q q

B x B x ..

B x B .. y

 Mệnh đề B x B z
Máy Turing offline
 Máy Turing có băng vào
• có nhiều băng, trong đó có
• một băng mà đầu đọc ghi chỉ đọc => gọi là đầu đọc
• băng này - băng vào/băng nhập

 Máy Turing off-line -


• có (k+1) băng
• băng vào với đầu đọc chỉ di chuyển theo 1 chiều
 Máy Turing có băng ra
• có nhiều băng, trong đó:
• một băng mà:
• ban đầu các ô chứa ký tự trắng B
• đầu đọc/ghi di chuyển theo 1 chiều, ghi ký tự ra ô của băng ra
Máy Turing offline
 Máy Turing có băng vào và băng ra
• có nhiều băng
• có 1 băng vào
• có 1 băng ra
• các băng làm việc
Máy Turing không đơn định
 Máy Turing trong mô hình đầu - đơn định
• Trong phép chuyển - xác định (1 trạng thái kế tiếp, ký tự ghi xuống, hướng dịch
chuyển đầu đọc)
 Máy Turing không đơn định:
• Trong phép chuyển: có thể lựa chọn 1 trong số hữu hạn trạng thái kế tiếp, lựa chọn
ký tự ghi xuống, lựa chọn hướng dịch chuyển đầu đọ

 L chấp nhận bởi máy không đơn định M1 thì cũng chấp nhận bởi máy đơn
định M2 nào đó.

You might also like