Hình 2: Mô tả một TM Mỗi bước chuyển của máy Turing, phụ thuộc vào ký hiệu do đầu đọc đọc được trên băng và trạng thái của bộ điều khiển, máy sẽ thực hiện các bước sau :... 1 Chuyển trạn
Trang 1Giới thiệu về turing
Turing (đặt theo tên của Alan Turing) là một thuật toán nghiên cứu mã hóa dòng thiết kế Đặc điểm:
- Xử lý nhanh
- Sử dụng ít bộ nhớ trên bộ xử lý nhúng
- Khai thác song song
Turing được thiết kế để đáp ứng nhu cầu của các ứng dụng nhúng như giọng nói mã hóa trong máy điện thoại không dây, …
Turing có bốn thành phần:
- Trọng tải
- Một khóa tuyến tính không lọc
Hình 1: Các thành phần của mật mã dòng turing
I Máy turing và thuật toán
Trang 2Máy Turing có một băng nhớ, dùng để ghi mọi loại dữ liệu (dữ liệu nhập,
dữ liệu dùng cho việc điều khiển tương tự như một chương trình máy tính và các kết quả trung gian khi làm việc) Với một bộ điều khiển chứa một số hữu hạn trạng thái, TM cũng như các ôtômát khác, làm việc theo lối "ngắt quãng" theo từng bước chuyển
1 Mô tả về máy Turing
Máy Turing có rất nhiều mô hình và định nghĩa khác nhau nhưng tất cả chúng đều tương đương nhau Mô hình cơ bản của một máy Turing gồm :
- Một bộ điều khiển hữu hạn
- Một băng được chia thành các ô
- Một đầu đọc-viết, mỗi lần đọc có thể duyệt qua một ô trên băng để đọc
hay viết ký hiệu
Mỗi ô có thể giữ được một ký hiệu trong số hữu hạn các ký hiệu băng (các
ký hiệu được phép viết trên băng) Khởi đầu xem như n ô bên trái của băng (n
≥ 0) giữ chuỗi nhập (input), chuỗi nhập là một chuỗi các ký tự được chọn từ một tập hợp con của tập hợp các ký hiệu băng, tập hợp con này gọi là tập các
ký hiệu nhập Phần còn lại của băng coi như có vô hạn khoảng trống, ký hiệu
B (Blank), B là một ký hiệu đặc biệt của băng nhưng không phải là ký hiệu nhập
Hình 2: Mô tả một TM Mỗi bước chuyển của máy Turing, phụ thuộc vào ký hiệu do đầu đọc đọc được trên băng và trạng thái của bộ điều khiển, máy sẽ thực hiện các bước sau :
Trang 31) Chuyển trạng thái
2) In một ký hiệu trên băng tại ô đang duyệt (nghĩa là thay ký hiệu đọc được trên băng bằng ký hiệu nào đó)
3) Dịch chuyển đầu đọc-viết (sang trái (L), sang phải (R) hoặc đứng yên(∅))
- Các thao tác có thể của một máy Turing:
Đọc (xác định) ký hiệu hiện tại mà đầu đọc đang trỏ tới
Viết một ký hiệu lên ô vuông hiện tại mà đầu đọc đang trỏ tới (sau khi xóa lần đầu tiên ký hiệu vừa được ghi ở đó)
Di chuyển băng sang trái một ô
Di chuyển băng sang phải một ô
Thay đổi trạng thái
- Quá trình thực hiện của máy Turing có thể được mô tả như sau:
Lúc khởi đầu, xâu vào được đặt trên băng (tận cùng bên trái)
Mọi ô khác trên băng đều chứa một ký hiệu đặc biệt, B (blank), được gọi là ký hiệu trống Đầu đọc trỏ vào ô thứ nhất trên băng và máy ở
trạng thái đầu
Cứ mỗi bước trong quá trình thực hiện (xem hình), máy sẽ thực hiện:
o Đọc ký hiệu đối diện đầu đọc,
o Thay ký hiệu đó bằng ký hiệu tính được từ hàm dịch chuyển,
o Dời đầu đọc một ô sang trái hay sang phải theo hướng chỉ định bởi hàm dịch chuyển,
Trang 4o Đổi trạng thái hiện tại thành trạng thái tiếp theo, cho bởi hàm dịch chuyển
Xâu vào là được thừa nhận khi quá trình thực hiện đối với xâu đó đạt đến một trạng thái thừa nhận
Hinh 3:
2 Định nghĩa về máy turing
Một cách hình thức, ta định nghĩa một máy Turing (TM) như sau :
Định nghĩa: TM là một hệ thống M (Q, Σ, Γ, δ, q0, B, F), trong đó:
Q : tập hữu hạn các trạng thái
Σ: bộ ký hiệu nhập
Γ : tập hữu hạn các ký tự được phép viết trên băng
B : ký hiệu thuộc Γ dùng chỉ khoảng trống trên băng (Blank)
δ : hàm chuyển ánh xạ : Q × Γ → Q × Γ × {L, R, L, R, ∅}
(δ có thể không xác định với một vài đối số)
q0 Q là trạng thái bắt đầu
F Q là tập các trạng thái kết thúc
Ví dụ 1 Thiết kế máy Turing chấp nhận ngôn ngữ L = { 0 n 1 n | n ³ 1}
Trang 5Khởi đầu, máy Turing chứa 0n1n bên trái nhất trên băng sau đó là vô hạn khoảng trống Blank Máy Turing lặp lại quá trình sau:
M thay 0 bên trái nhất bằng X rồi chuyển sang phải tới
1 trái nhất, máy Turing thay 1 này bằng Y rồi dịch chuyển về bên trái cho tới khi gặp X phải nhất nó chuyển sang phải một ô (tới 0 trái nhất) rồi tiếp tục lặp một chu trình mới
Nếu trong khi dịch chuyển sang phải để tìm 1 mà máy Turing gặp Blank thì máy Turing dừng và không chấp nhận input Tương tự, khi máy Turing đã thay hết 0 bằng X và kiểm tra còn 1 trên băng thì máy Turing cũng dừng và không chấp nhận input
Máy Turing chấp nhận input nếu như cũng không còn
ký hiệu 1 nào nữa trên băng
Đặt máy Turing M = < Q, , b, , , q0, F> với các thành phần :
Q = {L, R, q0, q1, q2, q3, q4}; ∑= {L, R, 0, 1}; = {L, R, 0, 1, X, Y, B} và F = {L, R, q4}
Ta có thể hình dung mỗi trạng thái là một câu lệnh hoặc một nhóm các câu lệnh trong chương trình Trạng thái q0 là trạng thái khởi đầu và nó làm cho ký hiệu 0 bên trái nhất thay bằng X Trạng thái q1 được dùng để tiến sang phải bỏ qua các số 0 và Y để tìm 1 bên trái nhất Nếu M tìm thấy 1 nó thay 1 bằng Y rồi
đi vào trạng thái q2 Trạng thái q2 đưa M tiến sang trái cho tới X đầu tiên và đi vào trạng thái q0, dịch chuyển sang phải để tới 0 bên trái nhất và tiếp tục một chu trình mới Khi M tiến sang phải trong trạng thái q1, nếu B hoặc X được tìm thấy trước 1 thì input bị loại bỏ (không chấp nhận) vì có chứa nhiều ký hiệu 0 hơn 1 hoặc input không có dạng 0*1*
Trạng thái q0 còn có vai trò khác Nếu trạng thái q2 tìm thấy X bên phải nhất
và ngay sau đó là Y thì các số 0 đã được xét hết, do đó ở trạng thái bắt đầu một chu trình mới q0 không tìm thấy ký hiệu 0 nào để thay thành X mà chỉ gặp Y thì
Trang 6máy Turing đi vào trạng thái q3 duyệt qua các Y để kiểm tra có hay không có ký hiệu 1 còn lại Nếu theo ngay sau các Y là B, nghĩa là trên băng nhập không còn
ký hiệu 1 nào nữa thì máy Turing sẽ đi vào q4 (trạng thái kết thúc) để chấp nhận input Ngược lại input bị loại bỏ
Ta có hàm chuyển được cho trong bảng sau :
Hình 4 Một máy Turing kiểm nhận {0 n 1 n | n>=1}
Các phép chuyển hình thái của máy Turing M trên input 0011 :
q00011 ⊢ Xq1011 ⊢ X0q111 ⊢ X q20Y1 ⊢ q2X0Y1 ⊢ X q00Y1 ⊢ XXq1Y1 ⊢ XXY q11 ⊢ XX q2YY ⊢ X q2XYY ⊢ XX q0YY ⊢ XXYq3Y ⊢ XXYYq3 ⊢ XXYYq4
3 Sơ đồ chuyển vị cho máy turing
Một sơ đồ chuyển vị (transition diagram) bao gồm một tập các nút tương ứng với các trạng thái của máy Turing Một cung từ trạng thái q đến trạng thái p với
nhãn là một hoặc nhiều mục có dạng X/YD, trong đó X và Y là các ký hiệu băng,
D là một hướng (L hoặc R) Điều này có nghĩa là mỗi khi (q, Xi) = (p, Y, D), chúng ta thấy nhãn X/YD trên cung từ q đến p Tuy nhiên, trong sơ đồ của chúng
ta, hướng D được biểu diễn bằng các mũi tên chỉ sang trái ( ) hoặc chỉ sang phải ( )
Giống như các loại sơ đồ chuyển vị khác, chúng ta biểu diễn khởi trạng bằng từ “start” và một mũi tên đi vào trạng thái đó Kiểm trạng được chi ra bằng
Trang 7vòng kép Vì thế thông tin duy nhất của máy Turing không đọc trực tiếp được từ
sơ đồ là ký hiệu được dùng cho ô trống Chúng ta sẽ xem như đó là B trừ khi được nói rõ
Ví dụ: sơ đồ chuyển vị của một máy turing
4 Máy turing biểu diễn thuật toán
Máy Turing là một thành phần rất quan trọng trong nền khoa học của thế kỷ
XX, một phần vì máy Turing đóng vai trò trung tâm trong lý thuyết về tính toán
và khả năng tính toán Đặc biệt, máy Turing không chỉ được quan tâm như là một
bộ chấp nhận ngôn ngữ mà còn cung cấp một định nghĩa nghiêm ngặt về thuộc tính hay phương pháp
Các thuật toán rất cần thiết cho máy tính xử lý thông tin
Thông thường, khi một thuật toán được kết hợp với thông tin xử lý, dữ liệu được đọc từ một nguồn hay thiết bị đầu vào, được viết trên một thiết bị đầu ra, và/ hoặc được lưu trữ cho các xử lý tiếp sau Trong khi đó, một máy Turing có thể được biểu diễn như một hệ thống thực hiện chức năng tự động có khả năng ở một
số hữu hạn các trạng thái bên trong và được hỗ trợ bởi một bộ nhớ bên ngoài vô hạn, gọi là băng (nhập/xuất)
Trang 8Khái niệm máy Turing có thể được sử dụng để đảm bảo mô hình hóa ý tưởng tổng quát của một thuật toán được chính xác với một bảng chữ cái đã cho như sau:
Input của một sự tính toán là tất cả các kí hiệu không trắng
trên băng tại thời điểm khởi đầu
Tại thời điểm kết thúc của sự tính toán, output sẽ là bất kì cái
gì có trên băng
Vậy có thể xem một máy Turing M như là một sự hiện thực của một hàm f được định nghĩa bởi = f(w) trong đó q0w M q f với q f là
một trạng thái kết thúc nào đó
Lúc đó, một hàm f với miền xác định D được gọi là khả tính
toán-Turing hay đơn giản là khả tính toán nếu tồn tại một máy Turing nào đó M = < Q, , b, , , q0, F> sao cho q0w M q f f(w),
q f F, w D.
Ví dụ 4 Xét bài toán cộng hai số nguyên viết ở dạng nhị phân f(x, y) = x + y
Thủ tục thực hiện phép cộng có thể dựa trên phương pháp thông thường là cộng cặp chữ số nhị phân với nhau (có nhớ) để tính tổng của hai số nguyên
Để cộng a và b, trước hết cộng hai bit ở phải cùng của chúng, tức là:
a0 + b0 = c0.2 + s0
Ở đây s0 là bit phải cùng trong khai triển nhị phân của a+b, c0 là số nhớ, nó có thể bằng 0 hoặc 1 Sau đó ta cộng hai bit tiếp theo và số nhớ
Trang 9a1 + b1 + c0 = c1.2 + s1.
Ở đây s1 là bit tiếp theo (tính từ bên phải) trong khai triển nhị phân của a+b và
c1 là số nhớ Tiếp tục quá trình này bằng cách cộng các bit tương ứng trong hai khai triển nhị phân và số nhớ để xác định bit tiếp sau tính từ bên phải trong khai triển nhị phân của tổng a+b Ở giai đoạn cuối cùng, cộng an-1, bn-1 và cn-2 để nhận được cn-1.2+sn-1 Bit đứng đầu của tổng là sn=cn-1 Kết quả, thủ tục này tạo ra được khai triển nhị phân của tổng, cụ thể là a+b = (sn sn-1 sn-2 s1 s0)2
Triển khai thuật toán này với máy Turing, chúng ta phải quyết định các số x và
y vào lúc ban đầu được đặt như thế nào trên băng và tổng của chúng xuất hiện
như thế nào lúc kết thúc sự tính toán
Chúng ta giả thiết rằng w(x) và w(y) được phân cách bằng một
kí hiệu , với đầu đọc ở trên kí tự phải cùng của w(y)
Chúng ta vì vậy muốn thiết kế một máy Turing để thực hiện
sự tính toán (trong đó qf là một trạng thái kết thúc)
q0w(x)w(y) M q f w(x + y),
Q = {L, R, q0, q1, q2, q3,…., q9, q f}, F = {L, R, qf}
Với bảng trạng thái được cho bởi đồ thị trạng thái như sau:
Trang 10 Sau khi tính toán, w(x + y) sẽ ở trên băng và được theo sau bởi
một kí tự , và đầu đọc sẽ được đặt trên kí tự phải cùng của kết quả
Như trên, chúng ta đã thấy máy Turing có thể thực hiện được các phép toán cơ bản và quan trọng những cái mà có trong tất cả các máy tính Vì trong các máy tính số, các phép toán cơ bản như vậy là các thành phần cơ bản cho các lệnh phức tạp hơn, sau đây là một ví dụ trình bày khả năng máy Turing kết hợp các phép toán này lại với nhau
Giả sử chúng ta thiết kế máy Turing tính toán hàm sau:
Ta xây dựng mô hình tính toán như sau:
Trang 11Vấn đề xây dựng được hàm tính toán được yêu cầu của chúng ta bây giờ sẽ được chuyển thành xây dựng các bộ so sánh, bộ cộng và bộ xóa Điều này cũng
có nghĩa rằng bài toán phức tạp của chúng ta đã được chuyển thành kết hợp các phép toán cơ bản
Với khá nhiều bằng chứng mạnh mẽ tuy chưa đủ là một chứng minh chặt chẽ, nhưng chúng ta chấp nhận miêu tả chính xác của ý tưởng tổng quát về thuật toán trong một bộ chữ cái được thực hiện bởi máy Turing là hoàn toàn đầy đủ Có nghĩa rằng, đối với mọi thuật toán trong bảng chữ cái cụ thể, có thể xây dựng một thuật toán Turing cho cùng các kết quả với cùng dữ liệu ban đầu như thuật toán Sự chấp nhận này được gọi là luận đề Turing trong lý thuyết thuật toán,
như một định nghĩa của một “sự tính toán cơ học” Cụ thể,
Bất kỳ cái gì có thể được thực hiện trên bất kỳ máy tính số đang tồn tại nào đều có thể được thực hiện bởi một máy Turing
Không ai có thể đưa ra một bài toán, có thể giải quyết được bằng những gì mà một cách trực quan chúng ta xem là một thuật toán,
mà đối với nó không tồn tại máy Turing nào giải quyết được
Các mô hình thay thế khác có thể được đưa ra cho sự tính toán
cơ học nhưng không có cái nào trong số chúng là mạnh hơn mô hình máy Turing
Bằng việc chấp nhận luận đề Turing, chúng ta sẵn sàng để định nghĩa chính xác khái niệm thuật toán, một khái niệm cơ bản trong khoa học máy tính
Trang 12Một thuật toán cho một hàm f: D → R là một máy Turing M sao cho cho một chuỗi nhập wD trên băng nhập, cuối cùng M dừng với kết quả f(w) R trên
băng Một cách cụ thể là:
q0w M q f f(w), q f F, w D.
5 Ngôn ngữ và hàm tính được
Ngôn ngữ được chấp nhận bởi máy turing là ngôn ngữ đệ quy liệt kê
Máy Turing như là một máy tính hàm số nguyên
II Một số kỹ thuật xây dựng máy turing
1 Lưu trữ trong bộ điều khiển (Storage in the finite control)
Bộ điều khiển có thể dùng để lưu trữ một lượng hữu hạn thông tin
Ví dụ: Xét máy Turing M nhận vào ký hiệu đầu tiên trên chuỗi nhập (viết trên
bộ chữ ái {L, R, 0, 1}), lưu trữ vào bộ điều khiển và kiểm tra rằng ký hiệu này không,
có xuất hiện ở vị trí nào khác trên chuỗi nữa hay không ?
LG:
Ta xây dựng TM M (Q, {L, R, 0, 1}, {L, R, 0, 1, B}, δ, [qq0, B], B, F}), trong đó tập trạng thái Q bao gồm các trạng thái dạng một cặp thành phần {L, R, qo,q1} x {L, R, 0, 1, B} tức là
Q chứa các trạng thái [qq0, 0], [qq0, 1], [qq0, B], [qq1, 0], [qq1, 1] và [qq1, B] Trong mỗi cặp này thành phần thứ nhất ghi trạng thái điều khiển, thành phần thứ hai ghi nhớ
ký hiệu Ta định nghĩa hàm chuyển như sau:
1) δ([qq0, B], 0) = ([qq1, 0], 0, R) δ([qq0, B], 1) = ([qq1, 1], 1, R)
Bắt đầu từ trạng thái [qq0, B], TM đọc và lưu trữ ký hiệu đầu tiên trên băng vào thành phần thứ 2 trong bộ điều khiển
2) δ([qq1, 0], 1) = ([qq1, 0], 1, R) δ([qq1, 1], 0) = ([qq1, 1], 0,
Trang 13Nếu các ký hiệu được đọc tiếp theo không giống với ký hiệu đang lưu trữ thì tiếp tục chuyển sang phải
3) δ([qq1, 0], B) = ([qq1, B], 0, ∅) δ([qq1, 1], B) = ([qq1, B], 0, ∅)
M đào trạng thái kết thúc [qq1, B] khi gặp Blank
M sẽ đi vào trạng thái kết thúc nếu nó gặp ký hiệu B mà không có ký hiệu nào giống với ký hiệu đầu tiên đang được lưu trữ trong bộ điều khiển Vậy nếu M tiến đến B ở trạng thái [qq1, 0] hoặc [qq1, 1] thì input được chấp nhận Ngược lại, ở trạng thái [qq1, 0] và gặp 0 hoặc ở trạng thái [qq1, 1] và gặp 1 thì M dừng và không chấp nhận chuỗi input vì không có hàm chuyển trạng thái để xác định các bước chuyển này
2 Nhiều rãnh trên băng (Multiple tracks)
Ta có thể xem băng của TM được chia thành k thành phần, với k > 1 và hữu hạn Một ký hiệu trên băng được xét là một bộ gồm k ký hiệu, mỗi ký hiệu nằm trên một rãnh
Ví dụ: Thiết kế TM nhận vào một số nguyên n (viết ở dạng nhị phân) và kiểm tra xem đó có phải là số nguyên tố hay không ?
LG
Ta dùng băng 3 rãnh như hình dưới với nguyên tắc sau :
Số n ở dạng nhị phân được đưa vào trên rãnh 1 và được bao bởi cặp dấu ⊄ và
$ Như vậy các ký hiệu được phép ghi trên băng là [q⊄, B, B], [q0, B, B], [q1, B, B]
và [q$, B, B] Các ký hiệu này tương ứng với ⊄, 0, 1, $ khi xem chúng là ký hiệu nhập Ký hiệu Blank là [qB, B, B]
Viết số 2 dạng nhị phân trên rãnh 2 (tức 10)
Chép rãnh 1 vào rãnh 3 sau đó lấy rãnh 3 trừ rãnh 2 nhiều lần nhất có thể được (thực hiện việc chia số cần kiểm tra cho số trên rãnh 2, lấy phần dư)
Xét số còn lại (số dư) :
Trang 14- Nếu số còn lại là 0 thì input không là số nguyên tố (vì nó chia hết cho số trên rãnh 2)
- Nếu số còn lại khác 0 thì tăng số trên rãnh 2 thêm một đơn vị: nếu số trên rãnh 2 bằng số trên rãnh 1 (số n) thì input n là số nguyên tố vì n đã không chia hết cho bất kỳ số nào từ 2 đến n -1 Nếu số trên rãnh 2 nhỏ hơn số trên rãnh 1 thì ta lặp lại quá trình trên với số mới trên rãnh 2
Hình trên mô tả một TM với k = 3, kiểm tra số n = 47 viết trên rãnh 1 dưới dạng nhị phân, TM đang thực hiện phép chia 47 cho 5 Nó đã trừ 2 lần số 5 vào số
47, vậy ở rãnh 3 hiện đang có số 37
3 Đánh dấu ký hiệu (Checking off symbols)
Kỹ thuật đánh dấu thường dùng để nhận diện các ngôn ngữ được định nghĩa bằng cách lặp lại chuỗi chẳng hạn như {L, R, ww | w Σ*}; {L, R, wcy | w, y Σ*, w ≠ y} hoặc {L, R, wwR | w Σ*} hoặc các ngôn ngữ có độ dài các chuỗi con cần được so sánh, như {L, R, aibi | i ≥ 1} hoặc {L, R, aibjck | i = j hoặc j = k}
Ta dùng một rãnh mở rộng trên băng để giữ ký hiệu đánh dấu √ Ký hiệu √ xuất hiện khi ký hiệu trên rãnh ngay bên dưới nó đã hoặc đang được xét bởi TM
4 Dịch qua (Shifting over)
Máy Turing có thể tạo ra một không gian trống trên băng bằng cách dời các ký hiệu không trống trên băng đi sang phải hữu hạn ô Để làm điều đó đầu đọc phải thực hiện dịch phải, lặp lại việc lưu ký hiệu đọc được vào bộ điều khiển và thay thế chúng bằng ký hiệu đọc được ở ô bên trái Nếu có đủ ô trống, TM cũng có thể chuyển dịch một khối ký hiệu sang trái một cách tương tự
5 Chương trình con (Subroutines)