Tải bản đầy đủ (.ppt) (31 trang)

Automat hữu hạn và biểu thức chính quy

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (261.12 KB, 31 trang )

1
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
Chương 3:
2
Phân loại FA
FA
(Finite Automata)
DFA
Deterministic
Finite Automata
NFA
Nondeterministic
Finite Automata
Biểu thức
chính quy
3
Start
1
1
0
0


0
0 1
1
a b
c
d
q
1
q
0
q
3
q
2
Ví dụ:
Input
Bộ điều khiển
10100110
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.
M=(Q, Σ, δ, q
0
, F)
Trạng thái bắt đầu
Trạng thái kết thúc

x
Phép chuyển trên nhãn x
Automata hữu hạn đơn định (DFA)
4
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
5
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");
6
Automata hữu hạn không đơn định (NFA)
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

Start
0
1
1
0
1
0
q
0
q
3
q
4
1
0
q
1
q
2
0
1

Ví dụ: cho automata M (hình vẽ) và xét chuỗi nhập 01001
0
0
10010
1 0 0 1
1
q
0

q
0
q
0
q
0
q
0
q
0
q
3
q
1
q
3
q
3
q
1
q
4
q
4
7
Định nghĩa NFA
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
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.
M=(Q, Σ, δ, q
0
, F)
8
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
} )
{q
4
}{q
4
}q
4
Ø{q
4
}q
3
{q
2
}{q
2
}q
2
{q
2
}Øq
1
{q

0
,q
1
} {q
0
,q
3
} q
0
10Trạng thái
Inputδ

δ(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)
Ví dụ về NFA
9
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
,
…, q

i
] với q
0
, q
1
, …, q
i
∈ 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
, , q
i
], a) = [p
1
, p
2
, , p
j

] nếu và
chỉ nếu δ({q
1
, q
2
, , q
i
}, a) = {p
1
, p
2
, , p
j
}
10
Ví dụ về sự tương đương giữa DFA & NFA
Ví dụ: NFA M ({q
0
, q
1
}, {0, 1}, δ, q
0
, {q
1
}) với hàm chuyển
δ(q
0
,0) = {q
0
, q

1
}, δ(q
0
,1) = {q
1
}, δ(q
1
,0) = ∅, δ(q
1
,1) = {q
0
, q
1
}
Ta sẽ xây dựng DFA tương đương M’ (Q’, {0, 1}, δ’, [q
0
], F’)

Q’ = {∅, [q
0
], [q
1
], [q
0
, q
1
]}

F’ = {[q
1

], [q
0
, q
1
]}

Hàm chuyển δ’

δ’(∅, 0) = δ’(∅, 1) = ∅

δ’([q
0
], 0) = [q
0
, q
1
]

δ’([q
0
], 1) = [q
1
]

δ’([q
1
], 0) = ∅

δ’([q
1

], 1) = [q
0
, q
1
]

δ’([q
0
, q
1
], 0) = [q
0
, q
1
]

δ’([q
0
, q
1
], 1) = [q
0
, q
1
]
11
NFA với ε- dịch chuyển (NFAε)
Đị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 ∈ (Σ ∪ {ε})
q
0
q
1
q
2
ε
0
1
2
Start
ε
Ví dụ: xây dựng NFA chấp nhận chuỗi 0
*
1
*
2
*
q
0
q
1
q
2

0, 1
0
1
2
Start
1, 2
0, 1, 2
12
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) }

δ*(R, w) = ∪
q∈R
δ*(q, w)
13
Mở rộng hàm chuyển trạng thái cho NFAε
Ví dụ:
q
0
q
1
q
2
ε
0
1
2
Start
ε
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)
14
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");
15
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)
16
Ví dụ:
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
}

Hàm chuyển δ’
{q
2
}∅∅q
2
{q
2
}{q
1
, q
2
}∅q
1

{q
2
}{q
1
, q
2
}{q
0
, q
1
, q
2
}q
0
210Trạng thái
Inputsδ’
q
0
q
1
q
2
0, 1
0
1
2
Start
1, 2
0, 1, 2
q

0
q
1
q
2
ε
0
1
2
Start
ε
Sự tương đương giữa NFAε và NFA
17
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
b
ε
ε
ε
ε
εε
ε
ε
2 3
6 7 8 9
10
0 1
4 5

a b b
Start
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 δ’
18
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;
End;
19
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

ε-CLOSURE(δ(E, b)) = ε-CLOSURE({5}) = → C
20

Bảng hàm chuyển
EA
a
a
a
a
a
b
b
b
b
b
B D
C
Start
CBE
EBD

CBC
DBB
CBA
ba
Ký hiệu nhập
Trạng thái

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)
Xây dựng DFA từ NFA(ε)
21
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, 0000, 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, 01, 010, 1, 10, 01010, 0111, }

0*1*2* : {ε, 0, 1, 2, 01, 02, 12, 012, 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
+
22
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
23
Tính chất đại số của BTCQ
Phép hợp:

r + ∅ = ∅ + r = r

r + r = r

r + s = s + r

(r + s) + t = r + (s + t) = r + s + t
Phép nối kết:

rε = εr = r

r∅ = ∅r = ∅

(r + s) t = rt + st

r (s + t) = rs + rt
Phép bao đóng:

ε* = ε

∅* = ∅

r*r* = r*


(r*)* = r*

r* = ε + r + r
2
+ … + r
k
+ …

r* = ε + r
+


(ε + r)
+
= (ε + r)* = r*

r*r = r r* = r
+
Tổng hợp:

(r* + s*)* = (r*s*)* = (r + s)*

(rs)*r = r(sr)*

(r*s)* r* = (r + s)*
24
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
q
0
q
0
q
f
q
f
Start Start
r = ε r = ∅ r = a
a
Các NFA
ε
cho các kết hợp đơn

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:
25
Sự tương đương giữa NFAε và BTCQ
q
1
f1
f
0
M
1
q
2
f
2
M
2
q
0
Start
ε
ε
ε

ε
ε
q
1
f
1
M
1
f
0
q
0
ε
ε
ε
Start

r = r
1
+ r
2

r = r
1
r
2

r = r
1
*

q
2
f
2
M
2
q
1
f
1
M
1
Start ε

×