Đánh dấu ký hiệu (Checking off symbols)

Một phần của tài liệu công cụ hỗ trợ học tập tin học lý thuyết trên web (Trang 83 - 84)

VIII. MÁY TURING

8.2.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ƣ {ww | w ∈ ∑*}; {wcy | w, y ∈ ∑*, w ≠ y}

hoặc {wwR

| w ∈ ∑*} hoặc các ngôn ngữ có độ dài các chuỗi con cần đƣợc so

sánh, nhƣ {aibi | i ≥ 1} hoặc {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.

Ví dụ 8.4: Xét máy Turing M (Q, ∑, Γ, δ, q0, B, F) nhận diện ngôn ngữ L có dạng {wcw | w ∈ (a+b)+} với các thành phần nhƣ sau :

.Q = {[q, d] | q = q1, ..., q9 và d = a, b hoặc B} = {q1, ..., q9} × {a, b, B} (thành phần thứ hai của các trạng thái dùng để lƣu trữ ký hiệu nhập)

.∑= {[B, d] | d = a, b, c} (ký hiệu nhập [B, d] đƣợc xác định bởi d) .Γ = {[X, d] | X = B hoặc √ ; d = a, b, c hoặc B}.

.q0 = [q1, B]

.B = [B, B] đƣợc định nghĩa là B, ký hiệu Blank. .F = {[q9, B]}.

Với d = a hoặc b; e = a hoặc b, ta định nghĩa hàm chuyển δ nhƣ sau: 1) δ([q1, B], [B, d]) = ([q2, d], [√, d], R)

M đánh dấu ký hiệu đƣợc duyệt trên băng, lƣu trữ vào bộ điều khiển và dịch chuyển sang phải.

2) δ([q2, d], [B, e]) = ([q2, d], [B, e], R)

M tiếp tục dịch phải trên các ký hiệu chƣa đánh dấu và tìm c. 3) δ([q2, d], [B, c]) = ([q3, d], [B, c], R)

Khi tìm thấy c, M đi vào trạng thái mà thành phần đầu tiên là q3. 4) δ([q3, d], [√, e]) = ([q3, d], [√, e], R)

M dịch phải qua các ký hiệu đã đánh dấu.

M gặp ký hiệu chƣa đánh dấu. Nếu ký hiệu chƣa đánh dấu giống với ký hiệu đang lƣu trong bộ điều khiển thì M đánh dấu rồi dịch trái. Nếu ký hiệu không giống ký hiệu lƣu trong bộ điều khiển thì M không dịch

chuyển nữa và không chấp nhận input. M cũng dừng nếu ở trạng thái q3 và gặp ký hiệu [B, B] trƣớc khi gặp ký hiệu chƣa đánh dấu.

6) δ([q4, B], [√, d]) = ([q4, B], [√, d], L) M dịch trái trên các ký hiệu đã đánh dấu.

7) δ([q4, B], [B, c]) = ([q5, B], [B, c], L) M gặp ký hiệu c.

8) δ([q5, B], [B, d]) = ([q6, B], [B, d], L)

Nếu ký hiệu ngay bên trái c chƣa đƣợc đánh dấu thì M tiến sang trái để tìm ký hiệu bên phải nhất đã đƣợc đánh dấu.

9) δ([q6, B], [B, d]) = ([q6, B], [B, d], L) M tiếp tục dịch chuyển sang trái.

10) δ([ q6, B], [√, d]) = ([q1, B], [√, d], R)

M gặp ký hiệu đã đánh dấu, nó dịch phải để lấy ký hiệu chƣa đánh dấu bên cạnh và tiếp tục vòng lặp so sánh. Khi đó, thành phần thứ 1 lại trở thành q1.

11) δ([q5, B], [√, d]) = ([q7, B], [√, d], R)

M ở trạng thái [q5, B] ngay sau khi vƣợt sang trái c. Nếu ký hiệu xuất hiện ngay trƣớc c đã đƣợc đánh dấu thì tất cả các ký hiệu trƣớc c đều đã đƣợc đánh dấu. M phải kiểm tra xem bên phải c còn có ký hiệu nào chƣa đƣợc đánh dấu hay không. Nếu không còn ký hiệu nào thì M chấp nhận input.

12) δ([q7, B], [B, c]) = ([q8, B], [B, c], R) M dịch sang phải c.

13) δ([q8, B], [√, d]) = ([q8, B], [√, d], R)

M tiếp tục dịch sang phải trên các ký hiệu đã đƣợc đánh dấu. 14) δ([q8, B], [B, B]) = ([q9, B], [√, B], ∅)

M tìm gặp Blank, nó dừng và chấp nhận chuỗi. Nếu M gặp ký hiệu chƣa đƣợc đánh dấu khi thành phần thứ 1 là q8 thì nó dừng và không chấp nhận. (adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu công cụ hỗ trợ học tập tin học lý thuyết trên web (Trang 83 - 84)