Chng 3 Automata hu hn Biu thc chnh
Chương 3: Automata hữu hạn & Biểu thức chính quy Nội dung: • Khái niệm DFA & NFA • Sự tương đương giữa DFA & NFA • Biểu thức chính quy • Các tính chất của tập chính quy 1
Phân loại FA Deterministic Finite Automata FA (Finite Automata) NFA Nondeterministic Finite Automata Biểu thức chính quy 2
Automata hữu hạn đơn định (DFA) Ví dụ: c Input 1 Start 0 1 1 0 0 1 1 q 0 0 Bộ điều khiển 0 a b 0 Trạng thái bắt đầu 0 1 q 2 1 d M=(Q, Σ, δ, q 0, F) Trạng thái kết thúc q 3 x Phép chuyển trên nhãn x Q : tập hữu hạn các trạng thái (p, q…) Σ : bộ chữ cái nhập (a, b … ; w, x, y …) δ : hàm chuyển, ánh xạ: Q x Σ → Q q 0 Q : trạng thái bắt đầu. F Q : tập các trạng thái kết thúc. 3
Mở rộng hàm chuyển trạng thái 1. δ(q, ) = q 2. δ(q, wa) = δ( δ(q, w), a) với w, a Ngôn ngữ được chấp nhận: L(M) = { x | δ( q 0, x ) F } Ngôn ngữ chính quy Ví dụ: chuỗi nhập w=110101 • δ(q 0, 1) = q 1 • δ(q 0, 11) = δ(q 1, 1) = q 0 • δ(q 0, 110) = δ(q 1, 10) = δ(q 0, 0) = q 2 • δ(q 0, 1101) = δ(q 1, 101) = δ(q 0, 01) = δ(q 2, 1) = q 3 • δ(q 0, 11010) = … = δ(q 3, 0) = q 1 • δ(q 0, 110101) = … = δ(q 1, 1) = q 0 F 4
Giải thuật hình thức • Mục đích: kiểm tra một chuỗi nhập x có thuộc ngôn ngữ L(M) được chấp nhận bởi automata M. • Input: chuỗi nhập x$ • Output: câu trả lời ‘YES’ hoặc ‘NO’ • Giải thuật: q : = q 0 ; c : = nextchar ; {c là ký hiệu nhập được đọc tiếp theo} While c <> $ do begin q : = δ(q, c); c : = nextchar ; end If (q in F) then write("YES") else write("NO"); 5
Automata hữu hạn không đơn định (NFA) • Ví dụ: cho automata M (hình vẽ) và xét chuỗi nhập 01001 1 0 Start q 0 1 0 0 0 q 3 q 4 1 q 1 1 q 0 0 0 1 q 3 q 2 1 0 q 0 0 q 1 0 q 0 1 0 q 3 q 0 1 q 3 q 1 0 q 4 1 Nhận xét: • Ứng với một trạng thái và một ký tự nhập, có thể có không, một hoặc nhiều phép chuyển trạng thái. • DFA là một trường hợp đặc biệt của NFA q 4 6
Định nghĩa NFA M=(Q, Σ, δ, q 0, F) Q : tập hữu hạn các trạng thái. Σ : bộ chữ cái nhập. δ : hàm chuyển ánh xạ Q x Σ → 2 Q q 0 Q : trạng thái bắt đầu. F Q : tập các trạng thái kết thúc. Chú ý: khái niệm δ(q, a) là tập hợp tất cả các trạng thái p sao cho có phép chuyển từ trạng thái q trên nhãn a. Hàm chuyển trạng thái mở rộng: • δ(q, ) = {q} • δ(q, wa) = { p | có một trạng thái r trong δ(q, w) mà p δ(r, a) } = δ( δ(q, w), a) • δ(P, w) = q P δ(q, w) với P Q 7
Ví dụ về NFA Ví dụ: xét chuỗi nhập w=01001 và NFA đã cho ở trên • M( {q 0, q 1, q 2, q 3, q 4}, {0, 1}, δ, q 0, {q 2, q 4} ) δ Input Trạng thái 0 1 q 0 {q 0, q 3} {q 0, q 1} q 1 Ø {q 2} q 2 {q 2} q 3 {q 4} Ø q 4 {q 4} • δ(q 0, 0) = {q 0, q 3} • δ(q 0, 01) = δ( δ(q 0, 0), 1) = δ({q 0, q 3}, 1) = δ(q 0, 1) δ(q 3, 1) = {q 0, q 1} • δ(q 0, 010) = {q 0, q 3} • δ(q 0, 0100) = {q 0, q 3, q 4} • δ(q 0, 01001) = {q 0, q 1, q 4} Do q 4 F nên w=01001 L(M) 8
Sự tương đương giữa DFA & NFA Định lý 1: Nếu L là tập được chấp nhận bởi một NFA thì tồn tại một DFA chấp nhận L. Giả sử NFA M={Q, Σ, δ, q 0, F} chấp nhận L Ta xây dựng DFA M’={Q’, Σ, δ’, q 0’, F’} chấp nhận L • Q’ = 2 Q. Một phần tử trong Q’ được ký hiệu là [q 0, q 1, …, qi] với q 0, q 1, …, qi Q • q 0’ = [q 0] • F’ là tập hợp các trạng thái của Q’ có chứa ít nhất một trạng thái kết thúc trong tập F của M • Hàm chuyển δ’([q 1, q 2, . . . , qi], a) = [p 1, p 2, . . . , pj] nếu và chỉ nếu δ({q 1, q 2, . . . , qi }, a) = {p 1, p 2, . . . , pj} 9
NFA với - dịch chuyển (NFA ) Ví dụ: xây dựng NFA chấp nhận chuỗi 0*1*2* 0 Start q 0 1 0, 1 q 1 2 1, 2 q 2 0, 1, 2 0 Start q 0 1 q 1 2 q 2 Định nghĩa: NFA M(Q, Σ, δ, q 0, F) • δ : hàm chuyển ánh xạ Q x (Σ { }) → 2 Q • Khái niệm δ(q, a) là tập hợp các trạng thái p sao cho có phép chuyển nhãn a từ q tới p, với a (Σ { }) 11
Mở rộng hàm chuyển trạng thái cho NFA Định nghĩa -CLOSURE: ● -CLOSURE(q) = { p | có đường đi từ q tới p theo nhãn } ● -CLOSURE(P) = q P -CLOSURE(q) Hàm chuyển trạng thái mở rộng: mở rộng δ thành δ* • δ* : Q x Σ* → 2 Q • δ*(q, w) = { p | có đường đi từ q tới p theo nhãn w, trên đường đi có thể chứa cạnh nhãn } Ta có: • δ*(q, ) = -CLOSURE(q) • δ*(q, a) = -CLOSURE(δ(δ*(q, ), a)) • δ*(q, wa) = -CLOSURE( δ( δ*(q, w), a) ) Cách khác: δ*(q, wa) = -CLOSURE(P) với P = { p | r δ*(q, w) và p δ(r, a) } 12 • δ*(R, w) = q R δ*(q, w)
Mở rộng hàm chuyển trạng thái cho NFA 0 Ví dụ: Start q 0 1 q 1 2 q 2 Xét chuỗi nhập w = 012 • δ*(q 0, ) = -CLOSURE(q 0) = {q 0, q 1, q 2} • δ*(q 0, 0) = -CLOSURE(δ(δ*(q 0, ), 0)) = -CLOSURE(δ({q 0, q 1, q 2}, 0)) = -CLOSURE(δ(q 0, 0) δ(q 1, 0) δ(q 2, 0) ) = -CLOSURE( {q 0} ) = -CLOSURE({q 0}) = {q 0, q 1, q 2} • δ*(q 0, 01) = -CLOSURE(δ(δ*(q 0, 0), 1)) = -CLOSURE(δ({q 0, q 1, q 2}, 1)) = -CLOSURE({q 1}) = {q 1, q 2} • δ*(q 0, 012) = -CLOSURE(δ(δ*(q 0, 01), 2)) = -CLOSURE(δ({q 1, q 2}, 2)) = -CLOSURE({q 2}) = {q 2} • Do q 2 F nên w L(M) 13
Giải thuật hình thức cho NFA Mục đích: mô phỏng hoạt động của NFA Input: chuỗi nhập x$ Output: câu trả lời ‘YES’ (x được chấp nhận) hoặc ‘NO’ Giải thuật: q : = -CLOSURE (q 0) ; c : = nextchar ; {c là ký hiệu nhập được đọc tiếp theo} While c <> $ do begin q : = -CLOSURE (δ(q, c)); c : = nextchar ; end If (q in F) then write("YES") else write("NO"); 14
Sự tương đương giữa NFA và NFA Định lý 2: nếu L được chấp nhận bởi một NFA có -dịch chuyển thì L cũng được chấp nhận bởi một NFA không có -dịch chuyển. Giả sử: NFA M(Q, Σ, δ, q 0, F) chấp nhận L Ta xây dựng: NFA M’={Q, Σ, δ’, q 0, F’} Với: • F’ = F q 0 nếu -CLOSURE(q 0) chứa một trạng thái thuộc F. Ngược lại, F’ = F • δ’(q, a) = δ*(q, a) 15
Sự tương đương giữa NFA và NFA 0 Ví dụ: Start 1 q 0 q 1 2 q 2 Xây dựng NFA tương đương M’={Q, Σ, δ’, q 0, F’} • Q = {q 0, q 1, q 2} • Σ = {0, 1, 2} • Trạng thái bắt đầu: q 0 • F’ = {q 0, q 2} δ’ Inputs • Hàm chuyển δ’ Trạng thái 0 1 0 Start q 0 1 0, 1 q 1 0, 1, 2 2 q 0 q 2 q 1 q 2 2 {q 0, q 1, q 2} {q 1, q 2} {q 2} 16
Xây dựng DFA từ NFA( ) Ví dụ: xây dựng DFA tương đương với NFA sau: M = (Q={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, Σ={a, b}, δ, 0, F={10}) a Start 0 1 2 4 3 b 6 7 a 8 b 9 b 10 5 Ta xây dựng DFA M’= (Q’, Σ, δ’, q 0’, F’) tương đương M • Trạng thái bắt đầu: q 0’ ↔ -CLOSURE(q 0) • F’ = { p | trong ký hiệu của p có chứa ít nhất một trạng thái của F } • Xây dựng hàm chuyển δ’ 17
Giải thuật xây dựng hàm chuyển δ’ Giải thuật: T : = -CLOSURE (q 0) ; T chưa được đánh dấu ; Thêm T vào tập các trạng thái Q’ của DFA ; While Có một trạng thái T của DFA chưa được đánh dấu do Begin Đánh dấu T; { xét trạng thái T} For Với mỗi ký hiệu nhập a do begin U: = -closure( (T, a)) If U không có trong tập trạng thái Q’ của DFA then begin Thêm U vào tập các trạng thái Q’ của DFA ; Trạng thái U chưa được đánh dấu; [T, a] : = U; { [T, a] là phần tử của bảng chuyển DFA} end; End; 18
Xây dựng DFA từ NFA( ) ● ● ● -CLOSURE(q 0) = {0, 1, 2, 4, 7} → q 0’ = [0, 1, 2, 4, 7] = A -CLOSURE(δ(A, a)) = -CLOSURE({3, 8}) = {1, 2, 3, 4, 6, 7, 8} → B -CLOSURE(δ(A, b)) = -CLOSURE({5}) = {1, 2, 4, 5, 6, 7} →C -CLOSURE(δ(B, a)) = -CLOSURE({3, 8}) → B -CLOSURE(δ(B, b)) = -CLOSURE({5, 9}) = {1, 2, 4, 5, 6, 7, 9} → D -CLOSURE(δ(C, a)) = -CLOSURE({3, 8}) → B -CLOSURE(δ(C, b)) = -CLOSURE({5}) = → C -CLOSURE(δ(D, a)) = -CLOSURE({3, 8}) → B -CLOSURE(δ(D, b)) = -CLOSURE({5, 10}) = {1, 2, 4, 5, 6, 7, 10} → E -CLOSURE(δ(E, a)) = -CLOSURE({3, 8}) → B 19 -CLOSURE(δ(E, b)) = -CLOSURE({5}) = → C
Xây dựng DFA từ NFA( ) • Bảng hàm chuyển Trạng thái Ký hiệu nhập a b A B C B B D C B C D B E E B C b Start A a a B a b b D a b E a • Ký hiệu bắt đầu: q 0’ = A (↔ -CLOSURE(q 0) ) • Tập trạng thái kết thúc: F’ = {E} (vì trong E có chứa trạng thái 10 F) 20
Biểu thức chính quy (RE) Vài ví dụ: • 00 : là biểu thức chính quy biểu diễn tập {00} • (0+1)* : tập hợp tất cả các chuỗi số 0 và số 1, kể cả chuỗi rỗng = { , 0, 1, 00, 01, 10, 11, 010, 011, 0010. . . } • (0+1)*011 : ký hiệu cho tất cả các chuỗi 0, 1 tận cùng bởi 011 = {011, 0011, 1011, 00011, 11011, . . . } • (0+1)*00(0+1)* : tập hợp tất cả các chuỗi 0, 1 có ít nhất hai số 0 liên tiếp = {00, 000, 100, 0001, 1000, 1001, 011001, . . . } • (0+ )(1+10)* : tất cả các chuỗi không có hai số 0 liên tiếp = { , 0, 010, 1, 10, 01010, 0111, . . . } • 0*1*2* : { , 0, 1, 2, 01, 02, 12, 0012, 0112, . . . } • 00*11*22* : tất cả các chuỗi trong tập 0*1*2* với ít nhất một ký hiệu 0, 1 và 2 ↔ viết gọn thành 0+1+2+ 21
Biểu thức chính quy (RE) Định nghĩa: cho Σ là một bộ chữ cái. BTCQ trên Σ là các tập hợp mà chúng mô tả được định nghĩa đệ quy như sau: ● là BTCQ ký hiệu cho tập rỗng ● là BTCQ ký hiệu cho tập { } ● a Σ, a là BTCQ ký hiệu cho tập {a} ● Nếu r và s là các BTCQ ký hiệu cho các tập hợp R và S thì (r + s), (rs) và ( r*) là các BTCQ ký hiệu cho các tập hợp R S, RS và R* tương ứng Thứ tự ưu tiên: Phép bao đóng > Phép nối kết > Phép hợp Ví dụ: • Biểu thức ((0(1*)) + 1) có thể viết là 01*+1 22
Sự tương đương giữa NFA và BTCQ Định lý 3: nếu r là BTCQ thì tồn tại một NFA với -dịch chuyển chấp nhận L(r) Chứng minh: quy nạp theo số phép toán • Xét r không có phép toán nào Start q 0 r= Start q 0 qf Start q 0 r= Các NFA cho các kết hợp đơn a qf r=a • Xét r có i phép toán: r = r 1 + r 2, r = r 1 r 2 hoặc r = r 1* Xây dựng NFA M 1 = (Q 1, Σ 1, δ 1, q 1, {f 1}) và M 2 = (Q 2, Σ 2, δ 2, q 2, {f 2}) sao cho L(M 1) = L(r 1) và L(M 2) = L(r 2) Xây dựng NFA M như sau: 24
Sự tương đương giữa NFA và BTCQ • r = r 1 + r 2 Start • r = r 1 r 2 M 1 f 1 q 0 f 0 Start q 1 M 1 q 2 f 1 M 2 f 2 q 2 M 2 f 2 • r = r 1* Start q 0 q 1 M 1 f 0 25
Sự tương đương giữa NFA và BTCQ Ví dụ: xây dựng NFA chấp nhận BTCQ r = 01* + 1 • r có dạng: r = r 1 + r 2 với r 1 = 01* và r 2 = 1 • r 1 có dạng r 1 = r 3 r 4 với r 3 = 0 và r 4 = 1* • r 4 có dạng r 4 = r 5* với r 5 = 1 Start 1 q 1 Start q 2 r 2 Start q 3 q 5 0 r 3 q 4 q 1 r = r 1 + r 2 = 01* + 1 q 9 q 4 q 7 1 q 3 0 q 4 q 7 q 5 1 q 6 q 8 q 2 q 5 q 8 q 6 r 1 = r 3 r 4 = 01* q 6 r 5 Start 0 q 3 1 q 5 r 4 = r 5* = 1* Start 1 q 7 1 q 6 q 8 q 10 26
Sự tương đương giữa DFA và BTCQ Định lý 4: Nếu L được chấp nhận bởi một DFA, thì L được ký hiệu bởi một BTCQ Chứng minh: • L được chấp nhận bởi DFA M({q 1, q 2, . . . , qn}, Σ, δ, q 1, F) • Đặt Rkij = {x | δ(qi, x) = qj và nếu δ(qi, y) = ql (y x) thì l ≤ k} (hay Rkij là tập hợp tất cả các chuỗi làm cho automata đi từ trạng thái i đến trạng thái j mà không đi ngang qua trạng thái nào lớn hơn k) • Định nghĩa đệ quy của Rkij : Rkij = Rk-1 ik(Rk-1 kk)*Rk-1 kj Rk-1 ij R 0 ij = {a | δ(qi, a) = qj}, nếu i ≠ j {a | δ(qi, a) = qj} { }, nếu i = j 27
Sự tương đương giữa DFA và BTCQ • Ta sẽ chứng minh (quy nạp theo k) bổ đề sau: với mọi Rkij đều tồn tại một biểu thức chính quy ký hiệu cho Rkij. k = 0: R 0 ij là tập hữu hạn các chuỗi 1 ký hiệu hoặc Giả sử ta có bổ đề trên đúng với k-1, tức là tồn tại BTCQ rk-1 lm sao cho L(rk-1 lm) = Rk-1 lm Vậy đối với Rkij ta có thể chọn BTCQ rkij = (rk-1 ik)(rk-1 kk)*(rk-1 kj) + rk-1 ij → bổ đề đã được chứng minh ● Ta có nhận xét: L(M) = qj F Rn 1 j ● Vậy L có thể được ký hiệu bằng BTCQ r = rn 1 j 1 + rn 1 j 2 + … + rn 1 jp với F = {qj 1, qj 2, …, qjp} 28
Sự tương đương giữa DFA và BTCQ Ví dụ: viết BTCQ cho DFA 1 Start q 1 0 q 2 0 1 q 3 0, 1 Ta cần viết biểu thức: r = r 312 + r 313 Ta có: • r 312 = r 213(r 233)*r 232 + r 212 • r 313 = r 213(r 233)*r 233 + r 213 29
Sự tương đương giữa DFA và BTCQ k=0 k=1 k=2 rk 11 (00)* rk 12 0 0 0(00)* rk 13 1 1 0*1 rk 21 0 0 0(00)* rk 22 + 00 (00)* rk 23 1 1 + 01 0*1 rk 31 (0 + 1)(00)*0 rk 32 0+1 (0 + 1)(00)* rk 33 + (0 + 1)0*1 Thay vào và rút gọn, ta có: r = 0*1((0 + 1)0*1)* ( + (0 + 1)(00)*) + 0(00)* 30
Mối liên hệ giữa FA và BTCQ Sơ đồ liên hệ: DFA Định lý 1 Định lý 4 RE NFA Định lý 2 Định lý 3 NFA 31
- Slides: 31