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

Tin học lý thuyết - Chương 3 pdf

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 (337.49 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
E
A
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

×