Tải bản đầy đủ (.doc) (20 trang)

Lý thuyết về máy Turning không đơn định, vạn năng và bài tập về kỹ thuật dịch chuyển RASP (TIỂU LUẬN LÝ THUYẾT TÍNH TOÁN)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (259.04 KB, 20 trang )

ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA CÔNG NGHỆ THÔNG TIN
Tel. (84-511) 736 949, Fax. (84-511) 842 771
Website: E-mail:

BÀI TẬP LỚN MÔN
LÝ THUYẾT TÍNH TOÁN
Đề tài: Lý thuyết về máy Turning không đơn định,
vạn năng và bài tập về kỹ thuật dịch chuyển RASP
HỌC VIÊN : TẠ THỊ ÁI NHI
ĐỖ PHÚ DUY
LÊ THANH TÙNG
LỚP : KHMT K12
CBHD : PGS.TS. PHAN HUY KHÁNH
ĐÀ NẴNG, 05/2010
Mục lục
LÝ THUYẾT 1
.I Máy Turning không đơn định 1
.II Máy Turning vạn năng 7
BÀI TẬP ỨNG DỤNG 12
.I Thuật toán 12
.II Chương trình máy RASP 12
TÀI LIỆU THAM KHẢO 15
LỜI MỞ ĐẦU
Lý thuyết tính toán là là các từ được sinh ra bởi một văn phạm, tức tập các quy
tắc để sinh ra ngôn ngữ. Lý thuyết tính toán không sử dụng các lệnh gán biến và
không gây ra hiệu ứng phụ như vẫn gặp trong lập trình mệnh lệnh. Nguyên cứu
những phương pháp lập trình này giúp ích rất nhiều cho việc nghiên cứu về kỹ
thuật lập trình trong các lĩnh vực trí tuệ nhân tạo, giao tiếp hệ thống, xử lý ký
hiệu, tính toán hình thức,…v.v


Vận dụng những kiến thức thu nhận trong quá trình học tập, tiểu luận này đề
cập đến các vấn đề lý thuyết về “Máy Turning không đơn định và máy Turning
vạn năng” và giải quyết bài tập về “Kỹ thuật dịch chuyển RASP”.
Chúng tôi chân thành cảm ơn Thầy PGS.TS Phan Huy Khánh đã cung cấp
những kiến thức quí báu và hướng dẫn chúng tôi hoàn thành đề tài này. Với kiến
thức và kinh nghiệm còn hạn hẹp của cho nên việc trình bày đề tài còn nhiều thiết
sót, rất mong nhận được sự góp ý của Thầy và các anh chị trong lớp.
Nhóm tác giả
BẢNG PHÂN CÔNG CÔNG VIỆC
STT Công việc Người thực hiện
1 Máy Turning không đơn định Nhi
2 Máy Turning vạn năng Duy
3 Bài tập ứng dụng Tùng
4 Tổng hợp Nhi
Bài tập lớn – Môn: Lý thuyết tính toán
CHƯƠNG 1
LÝ THUYẾT
.I Máy Turning không đơn định
Hình thức không đơn định đóng những vai trò khác nhau trong hai mô hình tính toán
đơn giản mà ta đã học ở các chương trước. Nó thuận tiện nhưng không hiệu quả trong
trường hợp của các ôtômat đơn định (FAs) và ngôn ngữ pal là một ví dụ của ngôn ngữ
phi ngữ cảnh và ngôn ngữ này không thể được thừa nhận bởi một ôtômat đẩy xuống đơn
định (Deterministic PDA). Các máy Turning vẫn có đủ khả năng tính toán khi các ôtômat
không đơn định thất bại trong việc xử lý. Bất kỳ ngôn ngữ được thừa nhận bởi máy
Turning không đơn định thì có thể được thừa nhận bởi một máy Turning đơn định.
Những vấn đề chúng ta nghiên cứu ở chương này thì phức tạp hơn chương trước. Tuy
nhiên, nền tảng của vấn đề ở đây là bằng chứng cho khả năng của máy Turning trong việc
thực hiện các thuật toán phức tạp được xây dựng từ các hoạt động mà chúng ta đã khảo
sát trước đó.
Một máy Turning không đơn định (NTM) T = (Q, ∑, Г, q

0,
δ) được định nghĩa giống
như một máy Turning đơn định ngoại trừ các giá trị của hàm dịch chuyển δ là các tập hợp
của các phần tử đơn của tập hợp (Q ∪ {h
a
,h
r
}) x (Г ∪ {∆}) x {L, R, S}. Ta không cần nói
rằng δ là một hàm cơ bản bởi vì bây giờ δ(q,a) được phép nhận giá trị ø.
Diễn giải cho hình trạng máy Turning cũng không thay đổi.
(p, xay) |-
T
(q, wbz) có nghĩa là từ hình trạng đầu tiên, có ít nhất một dịch chuyển đến
hình trạng thứ hai. Tương tự, ta có (p, xay) |-
T
* (q, wbz) nghĩa là có ít nhất một dịch
chuyển rỗng hoặc nhiều dịch chuyển thông qua T từ hình trạng thứ nhất đến hình trạng
thứ hai. Với định nghĩa này, ta có thể nói rằng một xâu x

∑* được thừa nhận bởi T nếu
tồn tại a

Γ∪{∆} và tồn tại y, z

(Γ∪{∆})* sao cho (q
0,


x) |-
T

* (h
a,
y

a

z)
Ý tưởng của output sẽ không được hữu dụng trong trường hợp không đơn định bởi vì
một máy Turning không đơn định đã cho, có thể là một tập hợp đơn định của các output
có thể. Các máy Turning không đơn định tạo ra output như trong Bài tập 9.29 sẽ được
dùng chủ yếu như là các thành phần của các máy lớn hơn. Khi so sánh giữa các máy
Turning không đơn định và đơn định, ta sẽ ràng buộc để các máy được dùng như bộ đoán
nhận ngôn ngữ.
Bởi vì mỗi máy Turning có thể được thông dịch như mà một máy Turning không đơn
định hay nói chung một ngôn ngữ được chấp nhận bởi một máy Turning thì có thể được
chấp nhận bởi một máy Turning không đơn định. Điều ngược lại là cái chúng ta cần đề
cập.
Định lý 9.2:
Gọi T
1
= (Q
1,
∑, Г
1
, q
1,
δ
1
) là một máy Turning không đơn định, thì tồn tại một máy
Turning đơn định T

2
= (Q
2,
∑, Г
2
, q2
,
δ2) sao cho L(T
2
) = L(T
1
).
Nhóm 11 - Lớp: Khoa học máy tính – Khóa 12 1
Bài tập lớn – Môn: Lý thuyết tính toán
Chứng minh
Máy Turning T
2
mà chúng ta đang tìm sẽ có tính chất sao cho bất kỳ x

∑*, T
2
thừa
nhận x nếu và chỉ nếu có một vài dịch chuyển của T
1
với đầu vào x được chấp nhận.
Chiến lược cho việc xây dựng T
2
chỉ đơn giản là với mỗi thứ tự của các dịch chuyển của
T
1

, thì tại một thời điểm dịch chuyển được chấp nhận nếu và chỉ nếu nó tìm thấy một
đường đi làm cho T
1
bị dừng ở trạng thái chấp nhận.
Mặc dù có thể có nhiều hình trạng mà T
1
lựa chọn khi dịch chuyển, nhưng một giới
hạn trên của số lựa chọn tối đa có thể có cần cố định. Ta giả định rằng giá trị lớn nhất là
2. Trong chứng minh, ta thấy rằng trường hợp này sẽ được tạo một cách dễ dàng. Vì
không có nhiều hơn các giả thiết, nên chúng ta đánh nhãn là 0 và 1 (Thứ tự tùy ý và nó có
khả năng cho cả hai với cùng một dịch chuyển)
Với bất kỳ một xâu x, chúng ta có thể dùng một cây tính toán như Hình 9.15 để thể
hiện các bước của việc dịch chuyển T
1
có thể có với x. Các nút trên cây thể hiện các hình
trạng của T
1
. Nút gốc là trạng thái khởi tạo tương ứng với xâu x và các nút con N tương
ứng với các hình trạng của T
1
có thể dẫn đến hình trạng N tiếp theo. Mỗi nút thì có 2 nút
con và một nút lá thể hiện hình trạng dừng.
Hình 9.15. Cây tính toán cho máy Turning không đơn định
Ta có thể xem rằng nhiệm vụ của T
2
như là một cây tìm kiếm các hình trạng chấp
nhận. Bởi vì cây có thể là vô hạn, với chiến lược tìm kiếm breath-first thì T
2
sẽ thử với tất
cả các khả năng của một dịch chuyển, tất cả các khả năng của 2 dịch chuyển, 3 dịch

chuyển và v.v Máy Turning mà ta xây dựng sẽ không hiệu quả bởi vì với n+1 bước thì sẽ
lặp lại n bước trước đó. Thậm chí nếu cây là hữu hạn (nghĩa là với một vài n, mỗi hình
trạng có thể có trong T
1
từ xâu x sẽ dẫn đến trạng thái dừng), thì T
2
sẽ lặp vô tận nếu T
1
không bao giờ chấp nhận: Nó sẽ cố gắng để thử tất cả các dịch chuyển và hiệu quả sẽ có
nếu nó kết thúc việc lặp các dịch chuyển giống nhau với cùng thứ tự và cứ thế. Tuy
Nhóm 11 - Lớp: Khoa học máy tính – Khóa 12 2
1
0
1
0
1
0
0 1


Bài tập lớn – Môn: Lý thuyết tính toán
nhiên, nếu x

L(T
1
) thì với mỗi n, có một thứ tự của n dịch chuyển làm T
1
thừa nhận x và
T
2

sẽ quay vòng việc xử lý thứ tự đó.
Ta sẽ lấy ưu điểm của Định lý 9.1 bằng việc đưa ra T
2
với 3 băng. Băng đầu tiên được
dùng cho việc lưu trữ xâu ban đầu và nội dung của nó không được thay đổi. Băng thứ hai
được dùng cho việc lưu giữ thứ tự của các dịch chuyển của T
1
mà T
1
đang cố gắng để
thực thi. Băng thứ ba là băng làm việc tương ứng với băng của T
1
nơi mà T
2
bằng các
bước xác định bởi xâu hiện tại trên băng thứ 2. Mỗi lần T
2
bắt đầu với một dịch chuyển
mới, băng thứ 3 được xóa và dữ liệu vào sẽ được sao chép lại từ băng T
1
.
Các thứ tự dịch chuyển được biểu diễn bằng một xâu nhị phân. Ví dụ xâu 001 thể
hiện các dịch chuyển sau: Đầu tiên, dịch chuyển thứ nhất (ví dụ dịch chuyển thứ 0) có 2
lựa chọn, từ hình trạng đầu C
0
chuyển đến hình trạng C
1
bởi T
1
. Kế tiếp, từ C

1
sẽ chuyển
đến C
2
. Bởi vì các dịch chuyển 0 và 1 có thể như nhau vì thể có một vài chuỗi số mô tả
các bước dịch chuyển giống nhau. Cũng có thể các chuỗi số không tương ứng với thứ tự
của sự dịch chuyển bởi vì một vài dịch chuyển đầu tiên làm T
1
dừng. Khi T
1
gặp một số
không thích hợp để thực hiện việc dịch chuyển, nó sẽ bỏ qua chuỗi đó.
Ta sẽ dùng thứ tự canonical của {0,1}* thì các xâu được sắp xếp như thứ tự
Λ, 0, 1, 00, 01, 10, 11, 000, 001, …, 111, 0000, …
(Với 2 xâu có chiều dài khác nhau thì xâu ngắn hơn xử lý trước và thứ tự của 2 xâu có
cùng chiều dài được đánh số). Cho một xâu α thể hiện các trạng thái dịch chuyển, T
2
tạo
ra xâu tiếp theo với thứ tự này bằng việc tích hợp α như xâu nhị phân bằng việc cộng
thêm 1. Nếu không α = 1
k
với xâu kế tiếp là 0
k+1
.
Thật dễ để mô tả cấu trúc chung của T
2
bây giờ. Nó bao gồm 5 máy Turning nhỏ hơn
gọi là InitializeTapes2&3, CopyInput, Execute, EraseTape2 và NextSequence trong Hình
9.16
Hình 9.16. Mô phỏng máy Turning không đơn định bởi máy Turning có 3 băng

InitalizeTapes2&2 ghi ký hiệu 0 vào ô thứ 1 của băng 2 để thể hiện thứ tự di chuyển
trước và thay thế ký hiệu # vào ô thứ 0 của băng 3. Sự đánh dấu này cho phép T
2
phát
hiện và phục hồi khi T
1
chuyển đến đầu của băng. CopyInput sao chép xâu ban đầu x từ
băng 1 đến băng 3, vì thế băng 2 có nội dung là #∆

x. Execute (chúng ta sẽ thảo luận chi
tiết sau) là một máy Turning thực sự mô phỏng hành động của T
1
bằng việc thực hiện các
dịch chuyển hiện tại trên băng 2. Tính năng quyết định là nó hoàn thành một ký hiệu s
trong ô hiện tại của băng 3 and s = * nếu và chỉ nếu các dịch chuyển được chấp nhận bởi
Nhóm 11 - Lớp: Khoa học máy tính – Khóa 12 3
(─,─, *)
h
a
(─,─, S)
S ≠*
InitializeTapes2&3 CopyInput Execute
EraseTape3
NextSequence
Bài tập lớn – Môn: Lý thuyết tính toán
T
1
. Trong trường hợp này thì T
2
chấp nhận và ngược lại nó tiếp tục với EraseTape3.

EraseTape3 lưu trữ băng 3 với hình trạng #∆ . Nó có thể hoàn thành hoạt động này bởi vì
chiều dài của xâu trên băng 2 giới hạn ký hiệu bên phải nhất không được là ký tự không
trống trên băng 3. Cuối cùng, NextSequence là thành phần đã sẵn sàng được đề cập để
cập nhật chuỗi số trên băng 2 bằng việc thêm 1 vào chuỗi nhị phân. Hình 9.17 thể hiện
một băng của máy Turning thực hiện sự chuyển hóa này với một xâu vào chứa 0 và 1;
NextSequence là máy Turning thứ ba mang dịch chuyển đến băng 2, bỏ qua băng 1 và 3.
Hình 9.17. Phiên bản một băng của NextSequence
Vấn đề của việc xây dựng T
2
được giảm bằng việc xây dựng thành phần Execute,
thành phần này cần mô phỏng các dịch chuyển của T
1
từ chuỗi của các số trên băng 2.
Để mô tả thành phần này một cách cụ thể thì khó, vì thế thay vì làm việc đó, ta xem xét
một phần nhỏ của sơ đồ dịch chuyển cho T
1
như Hình 9.18a và đưa ra sơ đồ cho Execute
tương ứng như Hình 9.18b. Các trạng thái của Execute bao gồm các trạng thái của T
1

những thứ khác. Ta tiếp tục giả định số sự lựa chọn lớn nhất tại bất kỳ vị trí nào của T
1

2. Ta đơn giản hóa mọi thứ bằng việc giả định rằng Г
1
= {a} vì thế a và ∆ chỉ là các ký tự
trên băng của T
1
. Cuối cùng, vì băng 1 được bỏ qua bởi Execute, nên chúng ta chỉ biểu
diễn máy này như là máy 2 băng trong Hình 9.18b.

Giả sử rằng Hình 9.18a thể hiện tất cả các dịch chuyển từ trạng thái p. Vì thế, nếu ký
tự trên băng hiện tại là a, thì có 2 dịch chuyển. Dịch chuyển chấp nhận được là dịch
chuyển 0 và dịch chuyển 1. Nếu ký tự hiện hành là ∆, T
1
sẽ đẩy ra. Việc dịch chuyển
không dừng với ký tự a trên băng còn bị đẩy ra khi nó có dịch chuyển về bên trái đầu đọc
của băng. Bởi vì Execute không nên đẩy ra, nên chúng ta cần xác định 5 dịch chuyển từ
trạng thái p và 1 cho sự kết hợp của 3 ký tự có thể có trên băng 2 (0, 1 và ∆) và 2 trên
Nhóm 11 - Lớp: Khoa học máy tính – Khóa 12 4
0/0, L
1/1, L
1/0, L
0/1, L
1/0, L
∆/∆, R
0/0, R
∆/∆, L∆/∆, R
0/0, R
1/1, R
∆/0, L
0/0, L
h
a
0/1, L ∆/∆, S
∆/∆, S
Bài tập lớn – Môn: Lý thuyết tính toán
băng 3 (Ký hiệu # cũng xuất hiện trên băng 3 nhưng nó sẽ không xuất hiện như là ký hiệu
hiện hành trong trạng thái p)
Hình 9.18. Một phần cở bản của Execute
Dịch chuyển được tạo bởi Execute mô phỏng việc dịch chuyển chấp nhận của T

1
bỏ đi
ký hiệu * tại vị trí hiện tại trên băng 3 và làm Execute chấp nhận. Đây là các dịch chuyển
đầu tiên được thể hiện từ p đến h trong Hình 9.18b. Chú ý rắng nó loại bỏ các chỉ lệnh để
chuyển đầu đọc trên băng 3 sang phải với giả thiết rằng nếu T
1
bị hóc tại vị trí hiện tại
trên băng là bất hợp lệ. Hai trạng thái kế tiếp từ p đến h tương ứng với các chuyển tiếp
làm T
1
đẩy ra. Hai trạng thái cuối cùng dành cho tình huống khi ký tự trên băng 2 là ∆,
xác định rằng dịch chuyển hiện tại được mô phỏng hoàn toàn.
Một dịch chuyển khác từ trạng thái p trong Execute là dịch chuyển tương ứng với sự
lựa chọn 1. Điều này xuất hiện khi số hiện tại trên băng 2 là 1 và ký hiệu trên băng 2 là a.
Lý do dịch chuyển này không trực tiếp chuyển sang trạng thái q là Execute cần kiểm tra
trước liệu dịch chuyển này có khả năng với T
1
không. Nó thực hiện bằng việc dịch đầu
đọc trên băng 3 sang trái và chuyển đến trạng thái tạm. Từ trạng thái này, bất kỳ ký tự
nào trên băng 3 khác # thì xác định rằng T
1
đã dịch chuyển an toàn và Execute có thể
chuyển đến trạng thái q ngay khi T
1
có vị trí đầu tiên. Ký hiệu # xác định một va chạm
bởi T
1
và Execute dừng bình thường sau khi trả đầu đọc về ô bên phải của #.
Mặc dù ví dụ nhỏ này không chỉ ra từng tình huống có thể xuất hiện nhưng nó giúp
cho việc chứng mình rằng toàn bộ sơ đồ trạng thái cho T1 có thể được đổi thành một sơ

đồ tương ứng cho Execute. Kết luận là T
2
có thể mô phỏng các dịch chuyển xác định có
thể có của T
1
.
Nhóm 11 - Lớp: Khoa học máy tính – Khóa 12 5
h
a

p
a/∆, R

q
(0)
a/a, L
(1)
h
a

p
(0, a)/(0, *), (R,S)
temp
(0, ∆)/(0, ∆), (R,S)
(1, ∆)/(1, ∆), (R,S)
(∆, a)/(∆, a), (S,S)
(∆, ∆)/(∆, ∆), (S,S)
(1, a)/(1, a), (R,L)

q

(─, a)/ (─, a), (S,S)
(─, ∆)/(─, ∆), (S,S)
(─, #)/(─, #), (S,R)
(a) (b)
Bài tập lớn – Môn: Lý thuyết tính toán
Một ví dụ đơn giản của không đơn định
Xem xét máy Turning Double làm việc như sau. Việc dùng máy Turning Copy trong
ví dụ 9.7 chỉnh sửa một ký hiệu trong ký tự vào, nó tạo ra một bản sao của đầu vào là số.
Sau khi xóa các tự trống trong đầu vào ban đầu từ bản sao và trả lại đầu đọc về ô số 0.
Giống như tên của nó, nó gấp đôi giá trị của đầu vào.
Hình 9.19. Một máy Turning không đơn định đoán nhận xâu có chiều dài 2
i
Bây giờ hãy xem xét máy Turning không đơn định T trong Hình 9.19. T dịch chuyển
qua xâu vào, thay thế 1 trên băng, tách riêng các ký tự vào bởi ký tự trống và sau đó đặt
đầu đọc tại ký tự trống, thự thi Double 0 hoặc nhiều lần trước khi trả đầu đọc về ô thứ 0.
Cuối cùng, nó thực thi TM Equal và máy TM này làm việc như sau: Bắt đầu với nội
dung trên băng ∆

x∆

y nơi mà x và y là xâu chứa 1, Equal thừa nhận nếu và chỉ nếu x=y
(xem ví dụ 9.9)
Tính không đơn định trong T sản sinh ra số lần Double không xác định được thực thi.
Khi Equal được thực thi hoàn toàn, xâu kế tiếp sau đầu vào trên băng là bội số của 2. Nếu
xâu ban đầu là bội số của 2 (2
i
) thì một thứ tự của các lựa chọn mà T có thể tạo ra sẽ làm
xâu đó được thừa nhận, Double được thực hiện chính xác i lần. Mặc khác, nếu xâu vào
không phải là bội số của 2, nó sẽ không được thừa nhận bởi vì tại bước cuối cùng nó
được so sánh với một chuỗi là bội số của 2. Kết luận là T thừa nhận ngôn ngữ {1

2
i
| i≥0}
Ta không cần tính không đơn định để thừa nhận ngôn ngữ này (Tính không đơn định
không bao giờ cần thiết như mô tả ở Định lý 9.2), nó chỉ đơn thuần làm đơn giản hóa sự
mô tả. Một cách đơn định để kiểm tra một số nguyên có là lũy thừa của 2 là kiểm tra số
nguyên trước xem nó có bằng một hay không, nếu không thực hiện dãy các phép chia hai.
Nếu tại bất kỳ bước nào trước khi kết quả là 1, ta có kết quả phần dư khác không, thì ta
kết luận là sai. Nếu thương cuối cùng là một mà không có phép chia nào tạo ra phần dư,
ta kết luận đúng. Ta thường làm như thế, tuy nhiên phép nhân cho 2 thì dễ hơn phép chia
2. Theo hướng dễ dàng hơn, ta bắt đầu từ 1 và thực hiện một dãy các phép nhân cho 2. Ta
có thể so sánh kết quả các phép nhân với giá trị ban đầu, ta thừa nhận nếu số đó bằng với
kết quả, hoặc loại bỏ nếu số này lớn hơn số vào hoặc đơn giản tiếp tục vòng lặp vô tận.
Cách giải quyết T không đơn định trong Hình 9.19 thì gần với hướng tiếp cận thứ hai
ngoại trừ thay vì so sánh đầu vào với các số 2
i
, nó đoán giá trị của i và kiểm tra chỉ giá trị
đó. Việc khử tính không đơn định nghĩa là thay thế việc đoán nhận bởi một vòng lặp với
tất cả các giá trị được kiểm tra, một máy Turning đơn định đã làm sẽ là đơn giản là một
phiên bản hiệu quả hơn của máy Turning vì thế Định lý 9.2 kiểm tra tất cả các dãy có thể
của các dịch chuyển của T.
Nhóm 11 - Lớp: Khoa học máy tính – Khóa 12 6
∆/∆, R∆/∆, R
1/1, R
∆/1, L
Double
∆/∆, L
1/1, L
Equal


Bài tập lớn – Môn: Lý thuyết tính toán
.II Máy Turning vạn năng
Cho đến nay trong các cuộc thảo luận của chúng ta, một máy Turing được tạo ra để
thực hiện một thuật toán cụ thể. Nếu chúng ta có một máy Turing được dùng chỉ để tính
toán cho một hàm thì khi ta cần tính toán một hàm khác hoặc thực hiện một số tính toán
khác thì cần có một máy Turning khác. Ban đầu, máy tính điện tử cũng bị giới hạn một
cách tương tự như vậy, và thay đổi các tính toán sẽ được thực hiện bằng việc mắc lại
máy.
Một bài báo năm 1936 của Turing, với các máy tính với các chương trình được lưu
trữ (stored-program) mà bạn quen thuộc. Mặc dù một máy tính hiện đại vẫn còn được gắn
cứng (hard-wired), nhưng nó khá mềm dẻo để thực hiện các chỉ lệnh được lưu trữ trong
bộ nhớ và chúng có thể hiện được bằng bất kỳ thuật toán có khả năng. Turning đã mô tả
một máy Turning vạn năng như sau. Nó là một TM T
u
mà đầu vào bao gồm chủ yếu của
chương trình và tập hợp dữ liệu cần thiết để cho chương trình xử lý. Chương trình lấy các
từ của một chuỗi được xác định bới TM T
1
, và tập hợp dữ liệu là chuỗi thứ hai z được
xem là đầu vào cho T
1
. T
u
sau đó mô phỏng quá trình đoán nhận z bởi T
1
. Trong phần này
chúng tôi sẽ mô máy Turning vạn năng T
u
.
Bước đầu tiên là xây dựng một hệ thống ký hiệu để mã hóa một TM tùy ý T

1
và một
chuỗi đầu vào z trên một bảng chữ cái với các chuỗi e(T
1
) và e(z) trên bảng chữ cái cho
trước. Theo quan điểm mã hóa thì nó không được mất bất kỳ thông tin nào và từ các
chuỗi e(T
1
) và e(z) ta có thể tái tạo lại TM T
1
và chuỗi z . Ta sử dụng bảng chữ cái (0,1),
mặc dù TM ta đang mã hóa có thể xử lý một bảng chữ cái lớn hơn nhiều. Ta bắt đầu bằng
cách gán các số nguyên dương cho từng trạng thái, từng ký tự trên băng và ba hướng S,
L, và R trong TM T
1
mà ta muốn mã hóa.
Tại thời điểm này, một vấn đề kỹ thuật nhỏ phát sinh. Chúng tôi muốn các chức năng
mã hóa e cho kết quả duy nhất (one-one) để một chuỗi 0 và 1 mã hóa nhiều nhất một TM.
Hãy xem xét hai TMs T
1
và T
2
mà là giống hệt nhau, ngoại trừ biểu tượng băng của T
1

a, b và của T
2
là a và c. Nếu chúng ta thực sự muốn gọi hai TMs

khác nhau và để đảm

bảo rằng mã hóa của chúng khác nhau, chúng ta phải đảm bảo rằng các số nguyên được
gán cho b và c là khác nhau. Để đáp bất kỳ TM và vẫn đảm bảo rằng mã hóa là một-một,
chúng tôi phải sửa chữa nó bằng cách nào đó để không có bất kỳ biểu tượng trong bảng
chữ cái của TM nhận được cùng một số với bất kỳ biểu tượng khác trong bảng chữ cái
bất kỳ TM khác. Cách dễ nhất để xử lý vấn đề này là để sửa một lần và liệt kê tất cả các
bộ biểu tượng có thể được sử dụng bởi TM và đánh số các biểu tượng này lúc ban đầu.
Đây là lý do.
Quy ước: Ta giả định từ thời điểm này với hai tập vô hạn được xác định Q = {q
1
, q
2
, }
và S = {a
1
, a
2
, } vì thế với bất kỳ máy Turing T = (Q, Σ, Г, q
0
, δ), ta có Q⊆Q và Г⊆ S.
Rõ ràng rằng, giả định này về các trạng thái không phải là một hạn chế ở tất cả, bởi vì
các gán cho các trạng thái của một TM là không thích hợp. Hơn nữa, S chứa tất cả các
chữ cái, chữ số, và các ký hiệu khác mà ta đặt vào bảng chữ cái đầu vào của, giả thiết
khác cũng tương tự (không có hạn chế hơn, ví dụ giới hạn tập ký tự là 256 ký tự) . Một
khi ta có một subscript được gán vào một trạng thái có thể và biểu tượng trên băng, chúng
tôi có thể biểu diễn một trạng thái hoặc một biểu tượng bởi một dãy số 0 với độ dài phù
hợp; dãy số 1 được sử dụng như những phần phân cách.
Nhóm 11 - Lớp: Khoa học máy tính – Khóa 12 7
Bài tập lớn – Môn: Lý thuyết tính toán
Định nghĩa 9.5: Hàm mã hóa e
Trước tiên chúng ta kết hợp với từng biểu tượng băng (bao gồm cả Δ), từng trạng thái

(bao gồm h
a
và h
r
) và ba hướng một dãy các số 0.
Đặt:
s (Δ) = 0
s (a
i
) = 0
i

+1
(đối với mỗi a
i
∈ S)
s (h
a
) = 0
s (h
r
) = 00
s (q
i
) = 0
i+2
(đối với từng q
i
∈Q)
s (S) = 0

s (L) = 00
s (R) = 000
Mỗi dịch chuyển m của một TM được mô tả bởi công thức
δ (p, a) = (q, b, D)
được mã hoá bằng chuỗi
e (m) = s (p)1s (a)1s(q)1s(b)1s(D)1
và cho bất kỳ T TM, với q trạng ban đầu, T được mã hoá bằng chuỗi
e (T) = s (q)1e(m
1
)1e(m
2
)1 e (m
k
) 1
với m
1
, m
2
, , m
k
là những dịch chuyển riêng biệt của T với một thứ tự tùy ý. Lưu ý rằng
việc mã hóa s(a) của ký tự a

S khác với việc mã hóa e(a) của xâu a. Bởi vì các dịch
chuyển của TM T có thể xuất hiện trong xâu e(T) với thứ tự bất kỳ vì thế có nhiều cách
để mã hóa T. Tuy nhiên với chuỗi 0 và 1 thì mã hóa nhiều nhất là một TM.
Ví dụ: Mã hóa một máy Turning đơn giản
Xem xét TM trong Hình 9.20 biến đổi một chuỗi đầu vào của a và b của bằng cách
thay đổi tận cùng bên trái a, nếu có b. Hãy đơn giản hóa những biểu tượng trên băng a và
b bằng các số 1 và 2 để s(a)=00 và s(b)=000 và các trạng thái q

0,
p và r bằng các số 1, 2
và 3 tương ứng. Nếu chúng ta có sáu dichj chuyển theo thứ tự chúng xuất hiện, từ trái
sang phải, thì dịch chuyển đầu tiên δ (q
0
, Δ) = (p, Δ, R) được mã hoá bằng chuỗi
0
3
10
1
10
4
10
1
10
3
1 = 00010100001010001
và toàn bộ TM mã hóa bởi chuỗi
0001 000101000010100011 00001000100001000100011 0000100100000100010011
0000101000001010011 000001000100000100010011 000001010101011
Hình 9.20. Mã hóa một máy Turning đơn giản
Nhóm 11 - Lớp: Khoa học máy tính – Khóa 12 8
q
0
a/b, L
∆/∆, L
p
∆/∆, R
b/b, R
r

∆/∆, S
b/b, L
h
a
Bài tập lớn – Môn: Lý thuyết tính toán
Hãy nhớ rằng phần đầu tiên của chuỗi, trong trường hợp này 0001 xác định trạng thái
ban đầu của TM này. Việc di chuyển còn lại của chuỗi được phân cách bằng các khoảng
trắng cho dễ đọc.
Đầu vào của một máy Turning vạn năng T
u
sẽ bao gồm một chuỗi dạng e(T)e (z),
trong đó T là một TM và z là một chuỗi trên bảng chữ cái đầu vào của T. Trong ví dụ 9.11
nếu chuỗi đầu vào của T là baa thì chuỗi đầu vào tương ứng với T
u
sẽ bao gồm chuỗi các
e (T) đưa ra trong ví dụ theo sau là 10001001001. Trên bất kỳ chuỗi đầu vào có dạng e(T)
e(z), ta muốn T
u
chấp nhận khi và chỉ khi T chấp nhận đầu vào z và trong trường hợp này
ta muốn đầu ra từ T
u
là hình thức được mã hóa của đầu ra được tạo ra bởi T với đầu vào z.
Bây giờ chúng tôi đã sẵn sàng để xây dựng T
u
. Nó sẽ được thuận tiện để đưa ra ba
băng. Theo quy ước với nhiều TM, băng đầu tiên sẽ là băng vào và băng ra. Ban đầu, nó
sẽ chứa chứa chuỗi e(T)e(z). Băng thứ hai sẽ là băng làm việc trong các mô phỏng của T,
và băng thứ ba sẽ chứa các mã hoá của T ở trạng thái hiện tại.
Bước đầu tiên của T
u

là di chuyển chuỗi e(z) (trừ khởi tạo là 1) từ cuối băng 1 sang
băng 2 bắt đầu từ ô thứ 3. Vì T bắt đầu với ô trống tận cùng bên trái, T
u
sẽ ghi 01 (vì 0 =
s(∆)) vào ô 1 và 2 của băng 2, ô 0 được để trống và đầu đọc được đặt tại ô 1. Bước tiếp
theo, T
u
sao chép phần mã hóa của trạng thái khởi tạo của T từ bắt đầu băng 1 vào băng 3
bắt đầu tại ô 1 và xóa nó khỏi băng 1.
Sau các bước khởi đầu, T
u
đã sẵn sàng để bắt đầu mô phỏng hoạt động của T (được
mã hóa trên băng 1) trên chuỗi đầu vào (được mã hóa trên băng 2). Khi mô phỏng bắt
đầu, các đầu đọc của ba băng đều đặt tại ô số. Dịch chuyển tiếp theo của T tại bất kỳ điểm
nào được xác định bởi trạng thái của T (được mã hóa trên băng 3) và ký hiệu hiện tại trên
băng của T, mà mã hóa bắt đầu ở vị trí hiện tại trên băng 2. Để mô phỏng dịch chuyển
này, T
u
phải tìm kiếm băng 1 cho 5-tuple có hai phần đầu tiên đánh dấu trạng thái kết hợp
với đầu vào. Trừu tượng hóa bởi mô hình so khớp, một TM được biểu diễn như hình
9.21. Vì hoạt động tìm kiếm không bao giờ thay đổi bất kỳ các ký hiệu trên băng, vì thế
ta đơn giản hóa như sau:
(a, b, c), (D
1
, D
2
, D
3
)
Tìm kiếm việc di chuyển sang phải trên băng 1 thường được viết là

(a, b, c) / (a, b, c), (D
1
, D
2
, D
3
)
Một khi các tuple-5 thích hợp được tìm thấy, ba phần cuối nói cho T
u
làm thế nào để
mô phỏng sự di chuyển. Để minh họa, giả sử rằng trước khi tìm kiếm, ba băng của T
u
như
sau:
Δ00010100001010001100001001000001000100110001
Δ010010010001Δ
Δ0000Δ
Băng tương ứng của T sẽ là
ΔaabΔ
Nhóm 11 - Lớp: Khoa học máy tính – Khóa 12 9
Bài tập lớn – Môn: Lý thuyết tính toán
(0,-,-),(R,S,S)
(0,-,-),(R,S,S)
(0,-,0),(R,S,R)
(1,-,-),(R,S,S)
(1,-,-),(R,S,S)
(-,-, ),(S,S,R)
(-,-,0),(S,S,L)
(1,-, ),(R,S,L)
(0,-,1),(R,S,L)

(1,-,0),(R,S,L)
(0,-,0),(R,S,R)
(-,-,0),(S,S,L)
(-,0,-),(S,L,S)
(-,-, ),(S,S,R)
(-,1,-),(S,R,S)
(-, ,-),(S,R,S)
(1,1,-),(R,L,S)
(0,0,-),(R,R,S)
(0,1,-),(R,L,S)
(1,0,-),(R,L,S)
(-,0,-),(S,L,S)
(-, ,-),(S,R,S)
(-,1,-),(S,R,S)
h
a
Hình 9.21. Tìm kiếm dịch chuyển sang phải trên băng 1
Giả sử các ký hiệu đánh số 1 và 2 là a và b, tương ứng, và T ở trạng thái 2 (với mã
hóa 0000). Sau khi tìm kiếm băng 1, các băng sẽ như sau:
Δ00010100001010001100001001000001000100110001
Δ010010010001Δ
Δ0000Δ
5-tuple trên băng 1 xác định rằng ký hiệu hiện tại của T nên được thay đổi thành b, đầu
đọc nên dịch sang trái và trạng thái chuyển sang trạng thái. Những hoạt động này có thể
được thực hiện bởi T
u
trong một cách khá đơn giản vì thế ta bỏ qua các chi tiết. Kết quả
cuối cùng là:

Δ00010100001010001100001001000001000100110001

Δ0100100010001Δ
Δ00000Δ
Và bây giờ T
u
đã sẵn sàng để mô phỏng các trạng thái tiếp theo.
Có một số cách làm quá trình này dừng lại. T có thể bị dừng một cách bất thường bởi
vì ở đó không có dịch chuyển xác định hoặc là dịch chuyển làm đầu đọc di chuyển ra
khỏi băng. Trong trường hợp đầu tiên, các hoạt động tìm kiếm hình trong Hình 9.21 cũng
tạm dừng bất thường (mặc dù di chuyển đến h
r
không được hiển thị rõ ràng), bởi vì khi
qua 5-tuple cuối cùng trên băng 1 đã thực hiện không thành công, thứ hai của 1 ở cuối
Nhóm 11 - Lớp: Khoa học máy tính – Khóa 12 10
Bài tập lớn – Môn: Lý thuyết tính toán
cùng làm máy trở lại tình trạng ban đầu, và không có di chuyển từ trạng thái đó với 1 trên
băng 1. Chúng ta có thể dễ dàng sắp xếp cho T
u
để từ chối trong trường hợp thứ hai là tốt,
cuối cùng T có thể chấp nhận. T
u
phát hiện điều này khi nó xử lý một 5-tuple trên băng 1
có một phần thứ ba là 0. Trong trường hợp này, sau khi T
u
đã thay đổi băng 2 một cách
thích hợp, nó xóa băng 1 sao chép băng 2 vào băng 1 và chấp nhận.
CHƯƠNG 2
Nhóm 11 - Lớp: Khoa học máy tính – Khóa 12 11
Bài tập lớn – Môn: Lý thuyết tính toán
BÀI TẬP ỨNG DỤNG
Yêu cầu: Sử dụng kỹ thuật dịch chuyển các địa chỉ thanh ghi của RASP trong bài giảng

lý thuyết, dịch chuyển một trình RASP có một lệnh dạng gián tiếp để tính kết quả :
.I Thuật toán
Xác định bài toán:
- Input: Hai số nguyên a và b
- Output: In ra màn hình giá trị của
b
a
hoặc 1+a
Thuật toán được liệt kê theo các bước sau:
• Bước 1: Nhập hai số nguyên a và b
• Bước 2: Nếu b ≠ 0 thì qua bước 4
• Bước 3: Chia a cho b
• Bước 4: Tăng a lên 1 bằng lệnh gián tiếp
• Bước 5: In kết quả ra màn hình
• Bước 6: Kết thúc
Thuật toán được biểu diễn theo sơ đồ khối bên dưới
.II Chương trình máy RASP
Nhóm 11 - Lớp: Khoa học máy tính – Khóa 12 12
nếu b ≠ 0
1+a nếu b = 0
False
In giá trị ra màn
hình và kết thúc
In giá trị ra màn
hình và kết thúc
1+ a
True
Nhập a và b
b !=0
a/b

Bài tập lớn – Môn: Lý thuyết tính toán
Chương trình RASP xuất phát P Sau khi dịch chuyển thành P’
Nhóm 11 - Lớp: Khoa học máy tính – Khóa 12 13
Bài tập lớn – Môn: Lý thuyết tính toán
Nhãn Lệnh Giải thích Lệnh Giải thích
2
READ R
27
← a READ
3
27 37
4
READ R
28
← b READ
5
28 38
6
LOAD A: ACC←<R
27
> LOAD A:
7
27 37
8
STORE: R
26
← <ACC> STORE:
9
26 36
10

LOAD ACC← <R
28
> LOAD A:
11
28 38
12
JZERO
OC← 18, if <ACC>
= 0
JZERO
13
18 18
14
LOAD A: ACC← <R
27
> LOAD A:
15
27 37
16
DIV ACC← <ACC>/
<R
28
>
DIV
17
28 38
18
LOAD A: ACC← 1 LOAD A:
19
1 1

20
ADD I:
ACC← <ACC>+
<<R
26
>>
STORE
21
26 1
22
WRITE In ra <ACC>
LOAD
23
0
36
24
HALT Dừng
ADD A:
p 25
0
10
P+1 26
27/28 Nội dung 27 hoặc 28
STORE
27
a Chứa giá trị a
31
q 28
b Chứa giá trị b
LOAD

29
1
30
ADD
31
Nội dung thay đổi :
số x
0
Nhóm 11 - Lớp: Khoa học máy tính – Khóa 12 14
Bài tập lớn – Môn: Lý thuyết tính toán
32
WRITE
33
0
34
HALT
P’ 35
0
P’+1 36
37/38 Nội dung 37 hoặc 38
37
a Chứa giá trị a
q +P’-p 38
b Chứa giá trị b
TÀI LIỆU THAM KHẢO
[1] Phan Huy Khánh, Giáo trình Lý thuyết tính toán, ĐH Đà Nẵng 1999.
Nhóm 11 - Lớp: Khoa học máy tính – Khóa 12 15
Bài tập lớn – Môn: Lý thuyết tính toán
[2] Phan Huy Khánh, Lý thuyết ngôn ngữ hình thức và ôtômat, ĐH Đà Nẵng 1997.
[3] J.C. Martin, Introduction to Languages and the Theory of Computation, The

MacGraw-Hill Companies, Inc., 1997.
Nhóm 11 - Lớp: Khoa học máy tính – Khóa 12 16

×