Bài toán trừ một vào số tự nhiên

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 53 - 56)

Như học viên đã trình bày ở trên, máy Turing có thể mô tả tất cả các thuật toán giải được trên máy tính, vì vậy máy Turing cũng có thể mô tả được bốn phép toán cơ bản trong toán học là cộng, trừ, nhân, chia. Ở đây học viên xin trình bày thuật toán trừ một vào số tự nhiên vì đây là phép toán cơ bản nhất, trong toán học phép trừ tương đương với phép cộng, trừ (cộng) với một số tự nhiên lớn tương đương với việc trừ (cộng) nhiều lần với số “1”. Phép nhân và phép chia các số tự nhiên tương đương với việc trừ (cộng) nhiều lần với số tự nhiên.

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

Chuyển con trỏ về phải nhất, nếu kí tự phải nhất khác “0” trừ 1, dừng chương trình, nếu kí tự phải nhất bằng “0” thay bằng “9” dịch con trỏ sang trái. Lặp lại bước trên.

- Phần mã chương trình viết bằng lệnh máy Turing:

% Thi du: 120 => 119

% 100 => 099

1 _ _ R _ // Ve trai

1 # _ L 2 // Chuan bi tru

2 {123456789} $| _ 3

2 0 9 L 2

2 # _ R 3 // Xoa cac so 0 vo nghia

3 0 # _ 0

3 _ _ _ 0

E

- Trong chương trình trên ta có:

Tập kí tự được sử dụng: là các chữ số : 0,1,2,3,4,5,6,7,8,9. kí tự “#” tương ứng với B là kí tự trắng trên băng.

Tập trạng thái bao gồm các trạng thái : 0,1,2,3. Trong đó 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.

Kí tự “$|” thể hiện toán tử trừ 1. - Kết quả đạt được:

Mô phỏng với số đầu vào là 12345. Input: #12345# (5) Command: 1 _ _ R _1 #12345# (5) Command: 1 _ _ R _1 #12345# (5) Command: 1 _ _ R _1 #12345# (5) Command: 1 _ _ R _1 #12345# (5) Command: 1 _ _ R _1 #12345# (5)

Command: 1 # _ L _2 #12345# (5) Command: 2 5 $| N 3 #12344# (5) Command: 3 _ _ N 0 #12344# (5) Final output: #12344# (5)

Timer = 8

Vậy trong chương trình trên, máy Turing đã mất 8 bước chuyển đầu đọc tương đương với thời gian là 8 nhịp xung của máy tính.

Tổng số ô nhớ là 5 ô được sử dụng. Mô phỏng với số đầu vào là 800.

Input: #800# (3) Command: 1 _ _ R _1 #800# (3) Command: 1 _ _ R _1 #800# (3) Command: 1 _ _ R _1 #800# (3) Command: 1 # _ L _2 #800# (3) Command: 2 0 9 L 2 #809# (3) Command: 2 0 9 L 2 #899# (3) Command: 2 8 $| N 3 #799# (3) Command: 3 _ _ N 0 #799# (3) Final output: #799# (3) Timer = 8

Với đầu vào là số 800 thì máy Turing cũng cần 8 bước chuyển của đầu đọc để xử lí. Tổng số ô nhớ là 3.

- Qua hai ví dụ ở trên học viên muốn truyền tải thông điệp là máy Turing có thể đánh giá chính xác thời gian và dung lượng bộ nhớ cần cung cấp cho thuật toán trong từng trường hợp cụ thể để rút ra được kết luận về độ phức tạp thuật toán cho từng thuật toán.

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 53 - 56)