Biểu diễn số thập phân n thành (n+1) vạch |

Một phần của tài liệu (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 (Trang 56 - 59)

Tương tự với ý tưởng ở phần trên, học viên thiết kế bài toán đơn giản chuyển số tự nhiên n thành n+1 vạch thẳng(“|”). Bài toán này theo học viên có thể cung cấp một cách khác để cộng trừ các số tự nhiên lớn bằng cách quy đổi về các vạch. Cũng theo lập luận ở trên từ các phép cộng trừ ta có thể thực hiện các phép nhân chia bằng việc cộng hoặc trừ liên tiếp các số tự nhiên.

- Tư tưởng thuật toán:

Chuyển con trỏ về phải nhất, khi gặp kí tự đặc biệt “#” tiến hành điền vạch |, trừ 1 vào số tự nhiên đầu vào, lặp lại bước trên đến khi kí tự trái nhất bằng 0, thay 0 bằng “|”, thuật toán dừng.

- Mã lệnh máy Turing:

% Bieu dien so thap phan n thanh (n+1) |

% 10 => ||||||||||| (11 vach)

// Chu y: So gom k chu so thap phan sau khi giam 1

// lien tiep se thu duoc k so 0: 0...0

1 0 | _ 0 // Neu la 0 thi viet |, stop

1 _ _ R 7 // Qua dau phai

7 _ _ R _

2 {123456789} $| R 3 // Giam 1

2 0 9 L _ // Tru co nho

3 _ _ R _

3 | _ R _ // Qua dau phai

3 # | L 4 // Them |. Ve trai

4 | _ L _

4 0 _ L 5 // Kiem tra co phai toan 0

4 # _ _ 0

4 _ _ _ 2

5 0 _ L _

5 # _ R 6 // Day toan 0: xoa het 0, stop

6 0 # R _

6 | _ _ 0

5 _ _ R 7 // Con chu so khac 0: Quay ve dau phai

7 _ _ R _

7 | _ L 2

E

- Trong mã lệnh trên:

Bảng chữ cái là: các chữ số từ 0 đến 9, dấu vạch thẳng |.

Tập trạng thái: 0,1,2,3,4,5,6,7. Trong đó trạng thái bắt đầu là 1, trạng thái kết thúc là 0.

- Mô phỏng với bộ số đầu vào 34.

Input: #34# (2)

Final output: #|||||||||||||||||||||||||||||||||||# (35)

Timer: 1315

Vậy với thuật toán trên máy Turing cần 1315 bước chuyển và ô nhớ cần 37 ô (vì các bước chuyển trung gian quá dài nên học viên chỉ đưa ra kết quả cuối cùng, số ô nhớ 37 là số ô được dùng trong quá trình xử lý của thuật toán).

* Thuật toán sử dụng imem

- Tư tưởng thuật toán:

Khởi tạo imem, khi đầu đọc hoạt động từ trái qua phải nạp dần vào imem theo công thức lấy giá trị trong imem nhân 10 cộng với giá trị số của kí tự được đẩy vào. Sau khi nạp xong dữ liệu đầu đọc gặp kí tự “#” chuyển thành vạch đầu tiên (“|”), kiểm tra imem nếu rỗng (số đầu vào = 0) dừng thuật toán, ngược lại trừ imem 1 đơn vị và chuyển kí tự “#” trên băng thành “|”.

- Mã lệnh chương trình:

% Bieu dien so tu nhien sang dang vach

% Dung imem

1 _ $< R 2 // Doc vao imem

2 _ _ R _ // To R

2 # : R 3

3 # | R 4

4 _ $I _ 0 5 // imem = 0 ? 0 : 5

6 _ $- _ 4// --imem

E

- Trong mã lệnh trên:

Bảng chữ cái là: các chữ số từ 0 đến 9, dấu vạch thẳng |, kí tự hai chấm “:”, kí tự khoảng trắng mặc định là “#”.

Sử dụng bộ nhớ imem và các toán tử liên quan đến imem.

Tập trạng thái: 0,1,2,3,4,5,6. Trong đó trạng thái bắt đầu là 1, trạng thái kết thúc là 0.

Các kí hiệu %, // là toán tử điều khiển chú thích.

- Mô phỏng với bộ số đầu vào 34.

Input: #34# (2)

Final output: #34:|||||||||||||||||||||||||||||||||||# (38)

Timer: 107

Khi sử dụng imem máy Turing cần 107 bước chuyển đầu đọc và cần 38 ô nhớ trên băng.

Một phần của tài liệu (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 (Trang 56 - 59)