Tải bản đầy đủ (.pdf) (74 trang)

(Luận văn thạc sĩ) cài đặt máy turing và ứng dụng máy turing đánh giá độ phức tạp thuật 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 (790.37 KB, 74 trang )

ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

NGUYỄN ANH TÙNG

CÀI ĐẶT MÁY TURING
VÀ ỨNG DỤNG MÁY TURING
ĐÁNH GIÁ ĐỘ PHỨC TẠP THUẬT TOÁN

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

THÁI NGUN - 2015
Số hóa bởi Trung tâm Học liệu – ĐHTN




ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

NGUYỄN ANH TÙNG

CÀI ĐẶT MÁY TURING
VÀ ỨNG DỤNG MÁY TURING
ĐÁNH GIÁ ĐỘ PHỨC TẠP THUẬT TOÁN
Chuyên ngành: KHOA HỌC MÁY TÍNH
Mã số: 60480101

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

Người hướng dẫn khoa học: PGS.TSKH. NGUYỄN XUÂN HUY



THÁI NGUYÊN - 2015
Số hóa bởi Trung tâm Học liệu – ĐHTN




i

LỜI CAM ĐOAN
Tôi xin cam đoan luận văn này do chính tơi thực hiện, dưới sự hướng
dẫn khoa học của PGS.TSKH. Nguyễn Xuân Huy, số liệu và kết quả nghiên
cứu trong luận văn này hoàn toàn trung thực và chưa sử dụng để bảo vệ
một cơng trình khoa học nào, các thơng tin, tài liệu trích dẫn trong luận văn
đã được chỉ rõ nguồn gốc. Mọi sự giúp đỡ cho việc hoàn thành luận văn
đều đã được cảm ơn. Nếu sai tơi hồn tồn chịu trách nhiệm.
Thái Ngun, tháng 8 năm 2015
Tác giả

Nguyễn Anh Tùng

Số hóa bởi Trung tâm Học liệu – ĐHTN




ii

LỜI CẢM ƠN
Em xin gửi lời cảm ơn chân thành nhất đến thầy giáo PGS.TSKH. Nguyễn

Xuân Huy đã định hướng và nhiệt tình hướng dẫn, giúp đỡ em trong quá trình
làm luận văn.
Em xin gửi lời biết ơn sâu sắc đến quý thầy cô giáo trường Đại học Công nghệ
thông tin và truyền thông, các thầy giáo, cô giáo ở Viện công nghệ thông tin
Hà Nội đã truyền đạt những kiến thức và kinh nghiệm quý báu cho chúng em
trong thời gian học tập.
Xin chân thành cảm ơn các bạn bè, đồng nghiệp, các bạn học viên lớp cao
học CK12I, những người thân trong gia đình đã động viên, chia sẻ, tạo điều
kiện giúp đỡ trong suốt quá trình học tập và làm luận văn.
Thái Nguyên, tháng 8 năm 2015

Học viên

Nguyễn Anh Tùng

Số hóa bởi Trung tâm Học liệu – ĐHTN




iii

MỤC LỤC
LỜI CAM ĐOAN .............................................................................................. i
LỜI CẢM ƠN ................................................................................................... ii
MỤC LỤC ........................................................................................................ iii
DANH MỤC BẢNG BIỂU, HÌNH VẼ ............................................................ v
MỞ ĐẦU .......................................................................................................... 1
Chƣơng 1. TỔNG QUAN MƠ HÌNH MÁY TURING ................................ 1
1.1. Giới thiệu chung ..................................................................................... 1

1.2. Cấu trúc máy Turing ............................................................................... 2
1.3. Hoạt động của máy Turing ..................................................................... 6
1.4. Trạng thái và sơ đồ trạng thái của máy Turing....................................... 7
1.5. Máy Turing và định nghĩa thuật toán ................................................... 14
1.5.1. Độ phức tạp thuật toán ................................................................... 14
1.5.2. Ứng dụng máy Turing để đo độ phức tạp thuật toán ..................... 20
1.6. Kết luận ................................................................................................. 21
Chƣơng 2. CÀI ĐẶT MÁY TURING NGUYÊN THỦY VÀ MỘT SỐ
CẢI TIẾN .................................................................................... 22
2.1. Cài đặt Máy Turing ............................................................................... 22
2.1.1. Giao diện chương trình................................................................... 27
2.1.2. Cấu trúc dữ liệu đầu vào ................................................................ 30
2.1.3. Các hàm xử lí dữ liệu ..................................................................... 34
2.2. Phát triển bộ nhớ máy Turing ............................................................... 37
2.2.1. Máy Turing nhiều băng .................................................................. 37
2.2.2. Cài đặt cấu trúc ngăn xếp (Stack) .................................................. 37
2.2.3. Cài đặt cấu trúc hàng đợi (Queue) ................................................. 39
2.2.4. Cài đặt bộ nhớ imem và cmem....................................................... 40
Số hóa bởi Trung tâm Học liệu – ĐHTN




iv
2.4. Kết luận ................................................................................................. 42
Chƣơng 3. MỘT SỐ CHƢƠNG TRÌNH ỨNG DỤNG MÁY TURING
ĐO ĐỘ PHỨC TẠP THUẬT TOÁN ......................................... 44
3.1. Bài toán trừ một vào số tự nhiên .......................................................... 44
3.2. Biểu diễn số thập phân n thành (n+1) vạch | ......................................... 47
3.3. Biểu diễn (n+1) vạch | thành số tự nhiên n ........................................... 50

3.4. Cộng hai số tự nhiên lớn ....................................................................... 53
3.5. Kết luận ................................................................................................. 62
KẾT LUẬN ..................................................................................................... 64
TÀI LIỆU THAM KHẢO ............................................................................ 65

Số hóa bởi Trung tâm Học liệu – ĐHTN




v

DANH MỤC BẢNG BIỂU, HÌNH VẼ
Bảng
Bảng 1.1. So sánh câu lệnh giữa cách viết thông thường và cách viết gộp ............. 6
Bảng 1.2. Trạng thái máy Turing ............................................................................. 10
Hình vẽ
Hình 1.1. Mơ hình máy Turing ....................................................................... 2
Hình 1.2. Mối quan hệ giữa lớp P và NP ...................................................... 18
Hình 1.3. Minh hoạ một phép dẫn bài toán 1 thành 2 trong thời gian
đa thức ........................................................................................... 19
Hình 1.4. Mối quan hệ giữa lớp P, NP và NPC ............................................ 20
Hình 2.1. Giao diện máy Turing ................................................................... 27
Hình 2.2. Chọn tệp mặc định ........................................................................ 28
Hình 2.3. Chọn chương trình do người dùng tạo .......................................... 28
Hình 2.4. Nhập dữ liệu từ bàn phím ............................................................. 29
Hình 2.5. Hiển thị kết quả ............................................................................. 29
Hình 2.6. Hiển thị kết quả trung gian của chương trình ............................... 30

Số hóa bởi Trung tâm Học liệu – ĐHTN





1

MỞ ĐẦU
Thuật toán là một trong những khái niệm quan trọng nhất trong tin học.
Thuật toán xuất phát từ nhà khoa học Arập Abu Ja’far Mohammed ibn Musa
al Khowarizmi. Chúng ta có thể xem thuật tốn là một cơng cụ dùng để giải
bài toán được xác định trước. Việc nghiên cứu về thuật toán và độ phức tạp
của thuật toán có vai trị rất quan trọng trong khoa học máy tính vì máy tính
chỉ giải quyết được vấn đề khi đã có hướng dẫn giải chính xác và phù hợp với
điều kiện thực tế (điều kiện về công nghệ và chi phí bộ nhớ, thời gian). Nếu
hướng dẫn giải sai hoặc khơng phù hợp thì máy tính khơng thể giải đúng
được bài tốn hoặc lãng phí tài ngun. Trong khoa học máy tính, thuật tốn
được định nghĩa là một dãy hữu hạn các thao tác được sắp xếp theo một trình
tự nhất định sao cho sau khi thực hiện dãy thao tác ấy, từ input của bài toán,
ta nhận được output cần tìm. Đối với một thuật tốn điều rất quan tâm đến đó
chính là độ phức tạp của nó, đánh giá càng chính xác độ phức tạp của thuật
tốn sẽ giúp cho quá trình lựa chọn và sử dụng.
Trước khi có máy tính điện tử Alan Turing đã trình bày các mơ hình
máy Turing vào năm 1936 dành cho các thí nghiệm tưởng tượng để tìm hiểu
giới hạn tính tốn trên máy móc. Tuy khơng trực tiếp ảnh hưởng tới việc chế
tạo máy tính điện tử nhưng máy Turing là một cơng cụ đo sự hiệu quả của
thuật tốn của một bài toán cụ thể.
Bỏ qua các yếu tố phần cứng của cơng nghệ hiện hành các bài tốn được
giải trên máy tính phải có thuật tốn để xử lý và theo Alan Turing, tất cả các
thuật toán đều có thể mơ tả lại trên mơ hình máy Turing, vậy việc đánh giá các
thuật toán trên máy Turing sẽ cho kết quả chính xác và cơng bằng nhất.

Độ phức tạp thuật toán được đánh giá bằng máy Turing theo hai tiêu chí
là: thời gian (số nhịp làm việc của máy Turing) và bộ nhớ (số ô nhớ cần sử
dụng trong q trình máy làm việc).
Số hóa bởi Trung tâm Học liệu – ĐHTN




2
Thời gian (số nhịp làm việc của máy Turing): là số lần dịch chuyển của
đầu đọc trên băng.
Bộ nhớ (số ô nhớ cần sử dụng trong quá trình máy làm việc): là số ô trên
bang mà máy Turing ghi các kí tự trong khi xử lý.
Vì vậy học viên chọn đề tài: “Cài đặt máy Turing và ứng dụng máy
Turing đánh giá độ phức tạp thuật tốn” với mục đích nghiên cứu một cơng
cụ đánh giá thuật tốn.
Nội dung chính của luận văn bao gồm:
Chương 1: Luận văn trình bày tổng quan về máy Turing và các vấn đền
liên quan đến thuật toán.
Chương 2: Luận văn cài đặt máy Turing trên ngôn ngữ C++ và cải tiến
một số bộ nhớ tăng hiệu quả làm việc của máy.
Chương 3: Luận văn sử dụng máy Turing để giải một số bài toán và
đánh giá độ phức tạp cụ thể từng bài.

Số hóa bởi Trung tâm Học liệu – ĐHTN




1


Chƣơng 1
TỔNG QUAN MƠ HÌNH MÁY TURING
Trong chương này của luận văn học viên giới thiệu lại một số định nghĩa
về máy Turing và thuật tốn. Trong đó có mơ tả về máy Turing học viên đã cài
đặt, từ đó chỉ ra quan hệ giữa máy Turing và độ phức tạp của thuật toán.
1.1. Giới thiệu chung
Máy Turing là một mơ hình thiết bị xử lý kí tự, tuy đơn giản, nhưng có
thể thực hiện tất cả các thuật tốn máy tính. Các máy Turing được Alan
Turing trình bày năm 1936. Các máy Turing không dành cho việc trực tiếp
tạo ra các máy tính thực tế mà dành cho các thí nghiệm tưởng tượng để tìm
hiểu về giới hạn của việc tính tốn trên máy móc. Việc nghiên cứu tính chất
máy Turing cho nhiều kiến thức quan trọng trong lĩnh vực khoa học máy tính
và lý thuyết độ phức tạp thuật toán. [2]
Trong luận đề Church-Turing đã khẳng định mọi hàm tốn học tính được
đều có thể dùng máy Turing để tính tốn do đó có phép định nghĩa về các
khái niệm về sự tính được của hàm hoặc thuật tốn.
Máy Turing có nhiều dạng đồng khả năng, tức là có nhiều mơ hình và
định nghĩa cho máy Turing nhưng chúng đều tương đương nhau. Về cơ bản
mơ hình máy Turing gồm 3 phần chính sau:
- Một bộ điều khiển hữu hạn.
- Một băng chia thành các ô.
- Một đầu đọc-ghi, mỗi lần đọc có thể duyệt qua một ơ trên băng để đọc
hay viết ký hiệu.[2]
Số hóa bởi Trung tâm Học liệu – ĐHTN




2

Bộ điều khiển có số trạng thái hữu hạn trong đó có trạng thái ban đầu và
trạng thái kết thúc. Như vậy khi máy Turing bắt đầu hoạt động sẽ nhận trạng
thái đầu tiên là trạng thái ban đầu, máy chỉ dừng khi đạt trạng thái kết thúc.
Trên băng mỗi ô có thể giữ một ký hiệu hợp lệ (ký hiệu được phép ghi
trên băng) khởi đầu xem như n ô bên trái ( n  0 ) giữ chuỗi nhập (input), các ơ
cịn lại là các ký tự trắng (ký tự trắng là ký tự đặc biệt nhưng không thuộc
chuỗi nhập), phần còn lại của băng được coi là vơ hạn.
Đầu đọc ghi có thể di chuyển sang trái, phải hoặc đứng yên tùy vào trạng
thái hiện tại và ký tự nhận được. Đầu đọc ghi có thể nhận dạng kí tự hiện
hành và viết đè một ký tự khác vào ơ đó để thay ký tự cũ.

Hình 1.1. Mơ hình máy Turing
1.2. Cấu trúc máy Turing
Về mặt tốn học máy Turing có thể được định nghĩa như sau:
Định nghĩa máy Turing:[7]
Máy Turing là một hệ thống M (Q, , ,  , q0 , B, F ) , trong đó:
Q là tập hữu hạn các trạng thái.
 là bộ ký hiệu nhập.
 là tập hữu hạn các kí tự được phép viết trên băng.

Số hóa bởi Trung tâm Học liệu – ĐHTN




3
B là ký hiệu thuộc  dùng chỉ khoảng trắng trên băng (Blank).
q0  Q là trạng thái bắt đầu của hệ thống.
F  Q là trạng thái kết thúc của hệ thống.


Hàm chuyển  hoạt động như sau:  : Qx  Qxx (trái, phải, không
dịch chuyển).
Hàm chuyển  được định nghĩa trước và máy Turing chỉ có thể hoạt
động theo hàm chuyển này.
Trong khuôn khổ luận văn, học viên cài đặt máy Turing theo các câu
lệnh để biểu diễn thuật tốn. Trong đó mỗi câu lệnh có năm thành phần dạng
(S, C, R, T, Q)
Trong đó:
S: là trạng thái hiện hành của máy Turing.
C: là ký tự tại ô mà con trỏ đang trỏ.
R: là kí tự sẽ điền thay vào vị trị của C, nếu R = _ tức là giữ nguyên kí tự C.
T: là hướng dịch chuyển của con trỏ bao gồm L: dịch trái.
R: là dịch phải.
N: là không dịch chuyển.
Q: là trạng thái máy Turing chuyển đến sau khi thực hiện dãy lệnh.
Ngoài ra chương trình mặc định các trạng thái của máy Turing theo dạng
số nguyên dương, trạng thái bắt đầu là trạng thái 1, trạng thái kết thúc là trạng
thái 0.
Ví dụ:
1abR2
Số hóa bởi Trung tâm Học liệu – ĐHTN




4
Câu lệnh trên sẽ hoạt động như sau:
Trạng thái hiện hành của máy Turing là 1, con trỏ máy đang chỉ vào ơ
chứa kí tự “a”, máy Turing sẽ điền kí tự “b” thay thế vào ơ đó. Con trỏ máy
sau đó chuyển dịch sang phải 1 ơ, trạng thái máy chuyển thành 2.

Để cải tiến cách soạn thảo học viên cài đặt máy Turing nhận các câu lệnh
trong đó thay thế các thành phần không thay đổi trong lệnh máy thành dấu
gạch dưới. Và có thể dùng câu lệnh gộp khi 1 trạng thái gặp nhiều kí tự khác
nhau nhưng có cùng cách xử lý như nhau.
Ví dụ:
Lệnh 1 _ _ _ _ sẽ hoạt động như sau:
Nếu máy đang ở trạng thái 1.
Ô nhớ đang được con trỏ máy trỏ vào chứa bất cứ ký tự nào;
Giữ nguyên ký tự đó;
Con trỏ khơng dịch chuyển;
Trạng thái sau khi thực hiện lệnh khơng thay đổi là trạng thái 1.
Ví dụ: câu lệnh gộp.
1 {a,b,c} _ R _ sẽ hoạt động như sau:
Trạng thái hiện hành của máy Turing là trạng thái “1”.
Đầu đọc ghi trỏ tới một trong các kí tự “a”, “b”, “c” sẽ giữ nguyên kí tự đó.
Đầu đọc ghi dịch chuyển sang phải 1 ơ.
Trạng thái máy Turing giữ nguyên là trạng thái “1”.
Ví dụ: Xét tính chẵn lẻ của một số.

Số hóa bởi Trung tâm Học liệu – ĐHTN




5
- Tư tưởng thuật toán: để xét một số là chẵn hay lẻ chỉ cần chia lấy phần dư
cho 2, nếu kết quả là 1 suy ra số đó là số lẻ, cịn kết quả là 0 số đó là số chẵn.
Hoặc nếu biểu diễn số cần xét là một dãy các chữ số: X = X1X2 ......Xn1Xn , nếu
chữ số cuối cùng X n {0, 2, 4,6,8} thì số cần xét X là số chẵn, nếu chữ số cuối
cùng X n {1,3,5,7,9} thì số cần xét X là số lẻ.

Mã chương trình máy Turing:
1 _ _ R _ // dịch phải chuỗi số.
1#_L2
2 {0,2,4,6,8} 0 L 3 // kí tự “0” biểu thị số chẵn.
2 {1,3,5,7,9} 1 L 3 // kí tự “1” biểu thị số lẻ.
3 {0,1,2,3,4,5,6,7,8,9} # L 3 // loại các số không ở trong kết quả.
3 # _ _ 0 // trạng thái 0 là trạng thái kết thúc.
Kết quả của chương trình:
Mơ phỏng với số đầu vào là 33.
Input: #33# (2)
Command: 1 _ _ R _  #33# (2)
Command: 1 _ _ R _  #33# (2)
Command: 1 # _ L 2  #33# (2)
Command: 2 3 1 L 3  #31# (2)
Command: 3 3 # R 3  #1# (2)
Command: 3 # _ N 0  #1# (2)
Final output: #1# (1)
Số hóa bởi Trung tâm Học liệu – ĐHTN




6
Timer = 6
Chương trình trải qua 6 bước để đưa ra kết luận số 33 là số lẻ (tương ứng
với kết quả là “1”).
Vậy với thuật toán trên máy Turing trải qua 6 bước chuyển, số ô sử dụng
là 2.
 So sánh cách soạn thảo viết rõ từng lệnh máy với cách sử dụng những
kí hiệu mà học viên cài đặt:

Bảng 1.1. So sánh câu lệnh giữa cách viết thông thƣờng
và cách viết gộp
Cách viết thông thường
200L3

Cách viết gộp
2 {0,2,4,6,8} 0 L 3

220L3
240L3
260L3
280L3
Hai cách viết trên đều hoạt động giống nhau đó là khi máy Turing ở
trạng thái 2 gặp các kí tự “0”, “2”, “4”, “6”, “8” chuyển thành kí tự “0”, dịch
con trỏ sang trái một ơ, chuyển trạng thái máy Turing thành trạng thái “3”.
Nhưng với cách viết thơng thường học viên sẽ phải viết 5 dịng lệnh, trong đó
với cách viết lệnh gộp học viên chỉ cần 1 lệnh duy nhất để thực hiện.
1.3. Hoạt động của máy Turing
Máy Turing hoạt động theo cơ chế như sau:[5]

Số hóa bởi Trung tâm Học liệu – ĐHTN




7
- Đầu đọc ghi đọc một kí tự trên ơ của băng, phụ thuộc vào trạng thái
bên trong mà đầu đọc ghi ghi một kí tự hợp lệ vào ơ đó (kí tự thuộc tập  ).
- Đầu đọc ghi dịch chuyển sang trái, sang phải hoặc đứng yên tại chỗ.
- Trạng thái bên trong được thay đổi tùy vào kí tự được đọc và trạng thái

hiện hành.
- Máy Turing bắt đầu từ trạng thái ban đầu và dừng khi đạt trạng thái
kết thúc.
Máy Turing được mô tả trong luận văn của học viên hoạt động theo
đúng cơ chế trên, cụ thể trong chương trình học viên quy ước trạng thái bắt
đầu của máy Turing là trạng thái “1”, trạng thái kết thúc là trạng thái “0”. Vậy
một chương trình viết bởi các câu lệnh để mơ tả thuật tốn sẽ dừng lại khi gặp
câu lệnh dạng (S C R T 0). Các thành phần của câu lệnh đã được học viên
trình bày ở phần 1.2.
1.4. Trạng thái và sơ đồ trạng thái của máy Turing[2]
Một hình thái của máy Turing M được cho bởi α 1 q α2, trong đó q là
trạng thái hiện hành của M; α1α2 ∈ Γ* là nội dung của băng tính từ đầu băng
cho tới ký hiệu khác Blank bên phải nhất của băng. Giả sử Q và Γ rời nhau:
đầu đọc đang đọc ký hiệu bên trái nhất của α 2 hoặc nếu α2 = ε thì đầu đọc
đọc Blank.
Hàm chuyển
Ta định nghĩa một phép chuyển trạng thái của TM như sau:
Đặt X1X2... Xi-1q Xi... Xn là một hình thái của máy Turing.
+ Giả sử δ (q, Xi) = (p, Y, L), trong đó:
Số hóa bởi Trung tâm Học liệu – ĐHTN




8
- Nếu i - 1 = n thì Xi là B.
- Nếu i =1 thì khơng có ID kế tiếp, nghĩa là đầu đọc không được phép
vượt qua cận trái của băng.
- Nếu i > 1 ta viết:
X1X2... Xi-1q Xi... Xn ⊢M X1X2... Xi-2p Xi-1Y Xi+1... Xn

+ Tương tự δ(q, Xi) = (p, Y, R) thì ta viết:
X1X2... Xi-1q Xi... Xn ⊢M X1X2... Xi-1Yp Xi+1... Xn
+ Tương tự δ(q, Xi) = (p, Y, ∅) thì ta viết:
X1X2... Xi-1q Xi... Xn ⊢M X1X2... Xi-1pY Xi+1... Xn
Chú ý rằng nếu i - 1 = n thì chuỗi Xi... Xn là rỗng và vế phải dài hơn vế
trái, nghĩa là TM M mở rộng chuỗi ký hiệu trên băng.
Nếu hai hình thái máy được quan hệ nhau bởi ⊢M thì ta nói hình thái thứ
hai là kết quả của hình thái thứ nhất bằng một lần chuyển, một bước áp dụng
hàm chuyển (hoặc nói hình thái thứ hai thu được từ hình thái thứ nhất bằng
một lần chuyển). Nếu một hình thái thu được từ hình thái khác bằng một số
lần chuyển (có thể bằng 0) thì ta ký hiệu quan hệ là ⊢M*. Ta cũng có thể bỏ đi
ký hiệu M trong cách viết các quan hệ trên nếu khơng có nhầm lẫn.
Ngôn ngữ được chấp nhận bởi TM.
Ký hiệu L(M): tập hợp các chuỗi trong Γ* là nguyên nhân đưa TM M đi
vào trạng thái kết thúc khi đã thực hiện việc thay thế từ bên trái các ký hiệu
trên băng của M với trạng thái bắt đầu q0. Một cách hình thức, ta định nghĩa
tập hợp ngơn ngữ được chấp nhận bởi TM M (Q, ∑, Γ, δ, q0, B, F) là tập:
Số hóa bởi Trung tâm Học liệu – ĐHTN




9
L(M) = { w | w ∈ Γ* và q0 w ⊢M* α1 p α2 với p ∈ F còn α1α2 ∈ Γ*}
Cho TM nhận diện một ngôn ngữ L là cho lần lượt các từ của L vào TM
xem TM có chấp nhận từ đó khơng. TM sẽ dừng và đi vào một trong những
trạng thái kết thúc ∈ F (khơng có phép chuyển kế tiếp) khi từ được chấp
nhận, nhưng nếu TM không chấp nhận một từ nào đó thì TM có thể ngừng ở
một trạng thái ∉ F hoặc cũng có thể nó chạy mãi mà khơng dừng lại.
Ví dụ: Thiết kế TM chấp nhận ngơn ngữ L = { 0n1n | n ≥ 1}.

Cách 1: Thiết kế bằng định nghĩa của máy Turing:
- Tư tưởng thuật toán:
+ Khởi đầu TM chứa 0n1n bên trái nhất trên băng sau đó là vơ hạn
khoảng trống Blank. TM 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, TM
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à TM gặp Blank thì
TM dừng và không chấp nhận input. Tương tự, khi TM đã thay hết 0 bằng X
và kiểm tra còn 1 trên băng thì TM cũng dừng và khơng chấp nhận input.
+ TM 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.
- Định nghĩa máy Turing:
Đặt TM M (Q, ∑, Γ, δ, q0, B, F) với các thành phần:
Q = {q0, q1, q2, q3, q4}; ∑= {0, 1}; Γ = {0, 1, X, Y, B} và F = {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 q 0 là trạng thái khởi đầu và nó làm
Số hóa bởi Trung tâm Học liệu – ĐHTN




10
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ì TM đ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ì TM sẽ đi vào q 4 (trạng thái kết thúc) để
chấp nhận input. Ngược lại input bị loại bỏ.
Hàm chuyển δ được cho trong bảng sau:
Bảng 1.2. Trạng thái máy Turing
đốn nhận ngơn ngữ L = {0n1n | n ≥ 1}
Kí hiệu

Trạng thái
0

1

X

Y

B

q0

(q1 , X , R)

-

-


(q3 , Y , R)

-

q1

(q1 , 0, R)

(q2 , Y , L)

-

(q1 , Y , R)

-

q2

(q2 , 0, L)

-

(q0 , X , R)

(q2 , Y , L)

-

q3


-

-

-

(q3 , Y , R)

(q4 , B, )

Số hóa bởi Trung tâm Học liệu – ĐHTN




11
q4

-

-

-

-

-

Ví dụ:
+ Các phép chuyển hình thái của TM 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
Với chuỗi input 0011 máy Turing đạt được trạng thái q4 thuộc tập trạng
thái dừng, nên máy Turing trên đoán nhận được xâu 0011.
+ Các phép chuyển hình thái của TM M trên input 0001
q00001 ⊢ Xq1001 ⊢ X0q101 ⊢ X 00q1 1 ⊢ X0q20Y ⊢ X q200Y ⊢ q2X00Y ⊢
Xq000Y ⊢ XX q10Y ⊢ X q2XYY ⊢ XX 0q1Y ⊢ XX0Yq1
Với chuỗi input 0001 TM M khơng đạt được trạng thái kết thúc nên
khơng đốn nhận được xâu 0001 hay xâu input 0001 không thuộc ngôn ngữ L
= { 0n1n | n ≥ 1}.
Cách 2: Thiết kế bằng lệnh máy Turing do học viên cài đặt:
- Tư tưởng thuật toán:
Về cơ bản thuật toán giống với cách 1. Học viên thêm vào kết thúc của các
xâu input kết luận máy TM M có đốn nhận được xâu hay khơng ở output.
- Mã lệnh chương trình:
10XR2
1Y_R4
1 {1,X,#} _ N 7 // khơng đốn nhận được xâu
2 {0,Y} _ R 2 // dịch phải để tìm 1
21YL3
Số hóa bởi Trung tâm Học liệu – ĐHTN




12
2 {X, #} _ N 7
3 {0, Y} _ L 3 //dịch trái để tìm X
3X_R1
3 {1,#} _ N 7

4 Y _ R 4 // dịch phải tìm #
4 # _ N 5 // đoán nhận được xâu
4 {0,1,X} _ N 7
5#=R6
6 # D N 0 // đạt trạng thái dừng đoán nhận được
7 {0, 1, X, Y} _ R 7 // dịch phải tìm #
7#=R8
8 # K N 0 // đạt trạng thái dừng khơng đốn nhận được
- Trong đoạn mã lệnh trên ta có:
+ Tập các kí tự được sử dụng = {0,1,X,Y,D,K}
+ Kí tự trắng: #
+ Tập các trạng thái = {0,1,2,3,4,5,6,7,8}
+ Trạng thái bắt đầu: 1
+ Trạng thái kết thúc: 0
- Ví dụ minh họa:
+ Chương trình chạy với input 0011
Input: #0011# (4)
Command: 1 0 X R 2  #X011# (4)
Command: 2 0 _ R _  # X011# (4)
Số hóa bởi Trung tâm Học liệu – ĐHTN




13
Command: 2 1 Y L 3  # X0Y1# (4)
Command: 3 0 _ L 3  # X0Y1# (4)
Command: 3 X _ R 1  # X0Y1# (4)
Command: 1 0 X R 2  # XXY1# (4)
Command: 2 Y _ R 2  # XXY1# (4)

Command: 2 1 Y L 3  # XXYY# (4)
Command: 3 Y _ L 3  # XXYY# (4)
Command: 3 X _ R 1  # XXYY # (4)
Command: 1 Y _ R 4  # XXYY # (4)
Command: 4 Y _ R 4  # XXYY # (4)
Command: 4 # _ N 5  # XXYY # (4)
Command: 5 # = R 6  # XXYY = # (5)
Command: 6 # D N 0  # XXYY = D# (6)
Final output: #XXYY=D# (6)
Timer = 15
Vậy với input 0011 được máy Turing đoán nhận.
Thời gian hồn thành là 15 bước chuyển.
Khơng gian bộ nhớ tối đa là 6 ơ.
+ Chương trình chạy với input 010
Input: #010# (3)
Command: 1 0 X R 2  #X10# (3)
Command: 2 1 Y L 3  #XY0# (3)
Command: 3 X _ R 1  #XY0# (3)
Số hóa bởi Trung tâm Học liệu – ĐHTN




14
Command: 1 Y _ R 4  #XY0# (3)
Command: 4 0 _ N 7  #XY0# (3)
Command: 7 0 _ R 7  #XY0# (3)
Command: 7 # = R 8  #XY0=# (4)
Command: 8 # K N 0  #XY0=K# (5)
Final output: #XY0=K# (5)

Timer = 8
Vậy máy TM M không đoán nhận được input 010.
Bộ nhớ tối đa cần dung là 5 ơ.
Chương trình thực hiện sau 8 bước chuyển máy.
1.5. Máy Turing và định nghĩa thuật toán
1.5.1. Độ phức tạp thuật tốn
a) Định nghĩa thuật tốn[1]
Ta có thể định nghĩa (khơng chính thức) về thuật tốn như sau:
Thuật tốn là một dãy hữu hạn các bước, mỗi bước mô tả chính xác các
phép tốn, hoặc hành động cần thực hiện… để chuyển input thành output.
b) Các đặc trưng của thuật tốn
- Đầu vào (Input).
Đầu vào của thuật tốn chính là các giá trị cần đưa vào khi thuật toán bắt
đầu làm việc. Các giá trị này cần được lấy từ các tập hợp giá trị cụ thể nào đó.
- Đầu ra (Output).

Số hóa bởi Trung tâm Học liệu – ĐHTN




15
Mỗi thuật tốn có một hoặc nhiều dữ liệu ra. Đó là các dữ liệu có quan
hệ hồn tồn xác định với các dữ liệu vào, và là kết quả của sự thực hiện
thuật tốn.
- Tính xác định.
Ở mỗi bước, các thao tác phải rõ ràng, không gây nên sự nhập nhằng.
Nói rõ hơn là trong cùng một điều kiện, hai bộ xử lí cùng thực hiện một thuật
tốn phải cho cùng một kết quả như nhau.
- Tính khả thi.

Tất cả các phép tốn có mặt trong thuật tốn phải đủ đơn giản. Điều đó
có nghĩa là, các phép tốn có thể được thực hiện trực tiếp (bằng giấy và bút).
- Tính dừng.
Với mọi bộ dữ liệu đầu vào (lấy từ các tập của dữ liệu vào), thuật toán
phải dừng sau một số hữu hạn bước thực hiên.
- Tính đơn trị (uniqueness).
Các giá trị trung gian của thuật toán trong từng bước và kết quả thực
hiện thuật toán được xác định một cách đơn trị và chỉ phụ thuộc vào đầu vào
và kết quả của các bước trước.
- Tính tổng quát (generality)-tính phổ dụng
Với mọi tập đầu vào thuộc dạng của bài tốn thuật tốn đều có thể giải
được. Tức là thuật toán phải dùng để giải được một lớp các bài toán cùng loại.
Xác định độ phức tạp về thời gian
* Quy tắc tổng: Giả sử T1(n) và T2(n) là thời gian thực hiện hai đoạn
chương trình P1 và P2 mà T1(n) = O(f(n)); T2(n) = O(g(n)) thì thời gian thực
hiện P1 và P2 kế tiếp nhau sẽ là:
Số hóa bởi Trung tâm Học liệu – ĐHTN




16
T1(n) + T2(n) = O(max(f(n),g(n)))
Ví dụ: Trong một chương trình có 3 bước thực hiện mà thời gian thực
hiện từng bước lần lượt là O(n2), O(n3) và O(nlog2n) thì thời gian thực hiện 2
bước đầu là O(max(n2, n3)) = O(n3). Thời gian thực hiện chương trình sẽ là
O(max(n3, nlog2n)) = O(n3).
Một ứng dụng khác của quy tắc này là nếu g(n) ≤ f(n) với mọi n  n0
thì O(f(n) + g(n)) cũng là O(f(n)). Chẳng hạn: O(n 4 + n2) = O(n4) và
O(n+log2n) = O(n).

* Quy tắc nhân: Nếu tương ứng với P1 và P2 là T1(n) = O(f(n)), T2(n) =
O(g(n)) thì thời gian thực hiện P1 và P2 lồng nhau sẽ là:
T1(n)T2(n) = O(f(n)g(n))
Ví dụ: Câu lệnh gán: x:=x+1 có thời gian thực hiện bằng c (hằng số) nên
được đánh giá là O(1).
Câu lệnh for i:=1 to n do x:=x+1;
Có thời gian thực hiện O(n.1) = O(n)
Câu lệnh: for i:=1 to n do
for j:=1 to n do x:=x+1;
Có thời gian được đánh giá là O(n.n) = O(n2)
Cũng có thể thấy O(cf(n)) = O(f(n)). Ví dụ O(n2/2) = O(n2)
Các vấn đề liên quan đến thuật tốn.
Thiết kế thuật tốn.
Có một số kỹ thuật thiết kế thuật toán chung như:
- Chia để trị (divide and conque).
Số hóa bởi Trung tâm Học liệu – ĐHTN




×