1. Trang chủ
  2. » Công Nghệ Thông Tin

giải thuật xây dựng DFA sang NFA pdf

12 303 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 12
Dung lượng 750,49 KB

Nội dung

Giải thuật xây dựng DFA từ NFA Qua khảo sát các dạng mở rộng từ mô hình ôtômát hữu hạn ban đầu, ta thấy DFA thực chất là một trường hợp đặc biệt của NFA, nhưng : - Nó không có sự truyền

Trang 1

Giải thuật xây dựng DFA từ NFA

Qua khảo sát các dạng mở rộng từ mô hình ôtômát hữu hạn ban đầu, ta thấy DFA thực chất là một trường hợp đặc biệt của NFA, nhưng :

- Nó không có sự truyền rỗng (truyền trên nhãn e)

- Với mỗi trạng thái q và ký hiệu nhập a, chỉ có duy nhất một đường truyền đến một trạng thái khác

Giả sử mỗi trạng thái của DFA là một tập trạng thái của NFA, DFA dùng trạng thái của mình để lưu giữ tất cả các trạng thái của NFA đạt được sau khi NFA đọc một ký tự nhập Như vậy sau khi đọc các ký tự nhập a1, a2, , an, DFA ở trạng thái là tập con của các trạng thái thuộc NFA, đạt được khi NFA đi từ trạng thái bắt đầu theo một con đường nào đó có tên a1a2 an Số trạng thái của DFA lúc đó phải bằng số phần tử trong tập lũy thừa của số trạng thái NFA Song, trên thực tế trường hợp xấu nhất này ít khi xảy ra Các trạng thái thực sự được dùng trong sơ

đồ chuyển cho một DFA sẽ được xác định theo các phép chuyển trạng thái trên nhãn là mọi ký hiệu từ trạng thái bắt đẩu của DFA, và sau đó lần lượt được bổ sung thêm vào tập trạng thái nếu như nó chưa có trong đó

Giải thuật chi tiết được trình bày như sau :

Input: Một ôtômát hữu hạn không đơn định NFA

Output: Một ôtômát hữu hạn đơn định DFA nhận dạng cùng ngôn ngữ như NFA Phương pháp: Xây dựng bảng hàm chuyển cho DFA mô phỏng đồng thời tất cả

các chuyển dịch của NFA trên chuỗi nhập cho trước

Ta dùng các tác vụ sau để lưu giữ các tập trạng thái của NFA :

(q : là một trạng thái của NFA, T : là tập trạng thái của NFA)

a) e-closure(q) : là tập trạng thái của NFA đạt được từ trạng thái q trên sự truyền rỗng

b) e-closure(T) : là tập trạng thái của NFA đạt được từ tất cả các trạng thái q thuộc tập T trên sự truyền rỗng

c) d(T, a) : là tập trạng thái của NFA đạt được từ tất cả các trạng thái q thuộc tập

T trên sự truyền bằng ký hiệu a

Phân tích:

Trước khi đọc vào một ký tự nhập, DFA có thể ở một trạng thái bất kỳ trong các trạng thái thuộc e-closure(q0) với q0 là trạng thái bắt đầu của NFA Gọi trạng thái này là T Giả sử các trạng thái của T là các trạng thái đạt được từ q0 trên các ký hiệu nhập và giả sử a là ký hiệu nhập kế tiếp Khi đọc a, NFA có thể chuyển đến một trạng thái bất kỳ trong tập trạng thái d(T, a) Khi chúng ta cho phép sự truyền

Trang 2

rỗng, NFA có thể ở bất kỳ trạng thái nào trong e-closure(d(T, a)) sau khi đã đọc

a

Giải thuật :

Ta xây dựng các trạng thái và bảng hàm chuyển cho DFA theo cách như sau :

- Mỗi trạng thái của DFA tượng trưng bởi một tập trạng thái của NFA mà NFA

có thể chuyển đến sau khi đọc một chuỗi ký hiệu nhập gồm: tất cả sự truyền rỗng

có thể xảy ra trước hoặc sau các ký hiệu được đọc

- Trạng thái bắt đầu của DFA là e-closure(q0)

- Các trạng thái và hàm chuyển sẽ được thêm vào D bằng giải thuật trên

- Một trạng thái của DFA là trạng thái kết thúc nếu nó là tập các trạng thái của NFA chứa ít nhất một trạng thái kết thúc của NFA

Việc tính toán e-closure(T) có thể xem như quá trình tìm kiếm một đồ thị của các nút từ các nút cho trước và đồ thị bao gồm toàn những cạnh có nhãn e của NFA Giải thuật đơn giản để tìm e-closure(T) là dùng Stack để lưu giữ các trạng thái

mà cạnh của chúng chưa được kiểm tra cho sự truyền rỗng

Thí dụ 3.10 : Tạo DFA từ NFAe sau

Trang 3

Hình 3.6 – Thí dụ chuyển NFA có ε-dịch chuyển

Các bước xây dựng tập trạng thái cho DFA :

1 Trạng thái bắt đầu của DFA : ε-closure(0) = {0, 1, 2, 4, 7} = A*

2 ε-closure(δ(A, a)) = ε-closure({3, 8}) = {1, 2, 3, 4, 6, 7, 8} = B*

3 ε-closure(δ(A, b)) = ε-closure({5}) = {1, 2, 4, 5, 6, 7} = C*

4 ε-closure(δ(B, a)) = ε-closure({3, 8}) = B

5 ε-closure(δ(B, b)) = ε-closure({5, 9}) = {1, 2, 4, 5, 6, 7, 9} = D*

6 ε-closure(δ(C, a)) = ε-closure({3, 8}) = B

7 ε-closure(δ(C, b)) = ε-closure({5}) = C

8 ε-closure(δ(D, a)) = ε-closure({3, 8}) = B

9 ε-closure(δ(D, b)) = ε-closure({5, 10}) = {1, 2, 4, 5, 6, 7, 10} = E*

10 ε-closure(δ(E, a)) = ε-closure({3, 8}) = B

11 ε-closure(δ(E, b)) = ε-closure({5}) = C

Từ các tập trạng thái này, ta xác định được A là trạng thái bắt đầu, E là trạng thái kết thúc (vì trong E có chứa trạng thái 10 là trạng thái kết thúc của NFA) và bảng hàm chuyển của DFA như sau :

Từ bảng hàm chuyển như trên, ta xây dựng sơ đồ chuyển trạng thái cho DFA tương đương nhận dạng cùng ngôn ngữ có dạng như sau :

Trang 4

Hình 3.7 – DFA tương đương cho thí dụ 3.10

Nhận xét : Mặc dù có sự khác nhau trong định nghĩa, ta thấy dạng không đơn

định NFA được định nghĩa tổng quát hơn dạng đơn định DFA, nhưng rõ ràng khả năng nhận dạng cùng lớp ngôn ngữ của chúng là tương đương nhau Trong thực

tế, các máy tính số hoàn toàn là đơn định, trạng thái của chúng tại mỗi thời điểm

là xác định được duy nhất từ một chuỗi nhập bất kỳ và trạng thái bắt đầu

Một số gợi ý câu trả lời:

Trong một số các bài toán mang tính chọn lựa, có nhiều hướng giải quyết (nhiều cách đi) như trong các chương trình trò chơi (games) thì thông thường hướng giải quyết tốt nhất (cách đi tốt nhất) là không biết trước được, nhưng có thể tìm thấy được bằng cách sử dụng chiến lược tìm kiếm quay lui (back-tracking) Khi có một vài khả năng chọn lựa có thể, ta chọn một khả năng trong chúng và đi theo hướng đó cho đến khi xác định hướng đó là tốt nhất hay chưa Nếu chưa phải là hướng tốt nhất, ta phải quay về điểm quyết định cuối cùng trước đó và thử khảo sát theo một hướng khác Một giải thuật mô phỏng quá trình tìm kiếm quay lui này là một giải thuật không đơn định

Không đơn định đôi khi còn rất hữu hiệu trong việc giúp giải quyết các bài toán

dễ dàng Chẳng hạn, trong một số bài toán thì việc xây dựng một NFA có vẻ tự nhiên và đơn giản hơn việc tìm một DFA cho chúng Tương tự như vậy, không đơn định còn là một cơ chế hiệu quả dùng mô tả văn phạm sinh ra ngôn ngữ một cách súc tích (sự chọn lựa các luật sinh sinh từ cùng một biến)

Trong thực tế, một vài kết quả là dễ dàng được chứng minh đối với NFA hơn là DFA Vì vậy việc cho phép cơ chế không đơn định thường làm đơn giản hóa các

lý luận hình thức mà không ảnh hưởng đến tính tổng quát của kết luận

Trang 5

Tối tiểu hoá ôtômát hữu hạn

Trong phần này chúng ta xét vấn đề tìm ôtômát có số trạng thái cực tiểu tương

đương (cùng đoán nhận một ngôn ngữ) với ôtômát cho trước

Trên tập các trạng thái Q chúng ta định nghĩa một số quan hệ tương đương

q 2, nếu cả hai (q1, x) và (q2, x) đều là những trạng thái kết thúc hoặc cả hai đều không kết thúc với mọi x *

Số các xâu (từ) được xây dựng từ bảng ký tự vào  thường là khá lớn (có khi

là vô hạn), nhưng trong phần này chúng ta chỉ xét những trường hợp hữu hạn

hiệu q1 k q2, nếu cả hai (q1, x) và (q2, x) đều là những trạng thái kết thúc

hoặc cả hai đều không kết thúc với mọi x * có độ dài nhỏ hơn k

Hiển nhiên, hai trạng thái kết thúc hoặc hai trạng thái không kết thúc đều là 0-tương đương

Các quan hệ trên có một số tính chất như sau

xạ, bắc cầu và đối xứng)

hoạch , k của Q; các phần tử của k là các lớp k-tương đương

Trang 6

Tính chất 2.7 Tồn tại n để n = n+1

Mệnh đề sau sẽ là cơ sở để xây dựng ôtômát cực tiểu

Chúng là k-tương đương,

(q1,a) và (q 2, a) cũng là k-tương đương với mọi a 

Chứng minh: Chúng ta chứng minh bằng phản chứng Giả sử q1 và q2 không

phải là (k+1)-tương đương Khi đó tồn tại w = aw1 với độ dài k+1 sao cho

(q1, aw1) là trạng thái kết thúc nhưng (q2, aw 1) lại không phải là trạng thái kết thúc Như vậy,

(q1, aw1) = ((q1, a), w1) là trạng thái kết thúc và (q2, aw1) = ((q2, a),

w1) không phải là trạng thái kết thúc Từ đó suy ra (q1,a) và (q2, a) không phải là k-

Dựa vào các tính chất trên chúng ta có thể xây dựng các lớp (k+1)-tương đương khi biết các lớp k-tương đương trên tập các trạng thái và từ đó xây dựng được thuật toán cực tiểu hoá ôtômát (có số trạng thái cực tiểu) tương đương với ôtômát cho trước

Thuật toán 2.2 Xây dựng ôtômát cực tiểu hoá

Input: Cho trước ôtômát M = (Q, , , q0, F) thường là không đơn định

Output: Ôtômát đơn định và cực tiểu M = (Q, , , q0, F)

Trang 7

Thiết lập phân hoạch 0 Theo định nghĩa 0-tương đương, 0 = {Q10,

Q20}, trong đó Q10 = F (tập các trạng thái kết thúc), Q20 = Q - Q10

Xây dựng k+1 từ k Xây dựng Qik, i = 1, 2, … là các tập con của k và

là các lớp (k+1)-tương đương q1 và q2 nằm trong Qik nếu chúng là (k+1) – tương đương nghĩa là (q1, a) và (q2, a) là k-tương đương, với mọi a trong bảng chữ vào Điều này xảy ra khi (q1, a) và (q2, a) nằm trong cùng lớp tương đương của k Do vậy, Qik là lớp (k+1)-tương đương Thực hiện như trên cho đến khi các tập con Qik tạo thành một phân hoạch k+1 của Q mịn hơn k

Lặp lại bước 2 để thiết lập k với k = 1, 2, … cho đến khi k = k+1

Xây dựng ôtômát cực tiểu Các trạng thái của ôtômát cực tiểu chính là các lớp tương đương được xác định như trong bước 3, đó là các phần tử của

k Bảng chuyển trạng thái thu được bằng cách thay trạng thái q bằng lớp tương đương tương ứng [q]

Lưu ý:

Dựa vào bảng chuyển trạng thái cho trước ta dễ dàng xây dựng được các lớp

0 = {Q10, Q20}, Q10 = F, Q20 = Q - F;

Giả sử đã xây dựng được  k , k = 0, 1, … Với q1, q2  Qik , Qik  k,

i = 1, 2, … xét các trạng thái ở các cột tương ứng với dữ liệu vào a , nếu (q1, a) và (q2, a) cùng thuộc một tập con nào đó của k thì là (k+1)-tương đương, nghĩa là q1, q2 cùng nằm trong một phân hoạch của

k+1; ngược lại sẽ không phải là (k+1)-tương đương, nghĩa là q1, q2 nằm trong hai phân hoạch khác nhau của k+1

Lặp lại bước 2 cho đến khi k = k+1

Ví dụ 2.9 Xây dựng ôtômát cực tiểu tương đương với ôtômát có đồ thị

chuyển trạng thái như trong hình H2-9

Trang 8

Hình H2-9 Đồ thị chuyển trạng thái của ví dụ 2.9

Từ đồ thị chuyển trạng thái ở hình H2.9 chúng ta có bảng chuyển

trạng thái Bảng B2.7 Bảng các trạng thái của M

Trang 9

Theo thuật toán trên ta có Q10 = {q3}, Q20 = { q0, q1, q2, q4, q5, q6,

q7} và

0 = {{q3},{ q0, q1, q2, q4, q5, q6, q7}}

Chúng ta xét tiếp quan hệ 1-tương đương để tính 1 Trước tiên ta có

Q11 = {q3} Dựa vào bảng B2.7 chúng ta dễ kiểm tra được q0 là 1-tương đương với q1, q5, q6 vì (q0, t) và (qi, t), i = 1, 5, 6 và t = a, b là cùng kết thúc hoặc cùng không phải là trạng thái kết thúc Vậy Q21 = { q0,

q1, q5, q6}.

Tương tự ta có thể kiểm tra được q2 -tương đương với q4 và Q31 = {

q2, q4} Hiển nhiên còn lại Q41 = {q7} Từ đó chúng ta có

1 = {{q3}, { q0, q1, q5, q6}, { q2, q4}, {q7}}

Phân hoạch tiếp 1 để xây dựng 2 Q12 = {q3} và vì (q0, t) và (q6, t),

= a, b đều thuộc cùng lớp 1-tương đương (lớp {q0, q1, q5, q6}) nên q0

và q6 là 2-tương đương Vậy Q22 = {q0, q6} Nhưng q0 và q1 (q0 và q5) không phải

là 2-tương đương vì (q0, b) = q0 ((q1, b) = q2, (q0, b) = q0, (q1, b) = q2) và chúng lại không cùng lớp 1-tương đương Kiểm tra ta thấy

q1 là 2-tương

đương với q5, nên Q32 = {q1, q5} Tương tự q2 vẫn là 2-tương đương với q4, vì thế Q42 = { q2, q4} và còn lại Q52 = {q7} Vậy

Trang 10

2 = {{q3}, { q0, q6}, { q1, q5}, { q2, q4}, {q7}}

Tiếp tục xây dựng 3 Tương tự như trên, chúng ta thấy Q13 = {q3}; Q23

= {q0, q6} vì q0 là 3-tương đương với q6; tương tự Q33 = {q1, q5}; Q43

= {q2, q4} và

Q53 = {q7} Nghĩa là 3 = {{q3}, {q0, q6}, {q1, q5}, {q2, q4}, {q7}}

Vì 2 = 3, nên các lớp tương đương trong 2 sẽ làm cơ sở để xây dựng ôtômát cực tiểu M = (Q, {a, b}, , q0, {q3}) Trong đó Q = 2 = {{q 3 }, {q 0 , q 6 }, {q 1 , q 5 }, {q 2 , q 4 }, {q7}}

Hàm chuyển trạng thái  được xác định như trong bảng B2.8

Bảng B2.8 Bảng các trạng thái của ôtômát cực tiểu

{q0,q6} {q1, q5}

{q0,

q6}

{q1, q5} {q0,q6}

{q2,

q4}

{q2, q4} {q3}

{q1,

q5}

{q0,q6 } {q7} {q0, q6} {q3}

Đồ thị chuyển trạng thái của ôtômát cực tiểu thu được sẽ là

Trang 11

Hình H2-10 Ôtômát cực tiểu của ôtômát ở hình H2-9

Ngày đăng: 28/09/2019, 20:06

TỪ KHÓA LIÊN QUAN

w