ÔTÔMÁT HỮU HẠN FA : Finite Automata Tại mỗi thời điểm, hệ thống có thể được xác định ở một trong số hữu hạn trạng thái states.. Nếu q, a chuyển đến một trong những trạng thái kết thú
Trang 1ĐAI HỌC VINH KHOA CNTT
K50-CNTT
Ch ương II ng II
ÔTÔMÁT H U H N VÀ BI U TH C ỮU HẠN VÀ BIỂU THỨC ẠN VÀ BIỂU THỨC ỂU THỨC ỨC
CHÍNH QUY
Trang 2I ÔTÔMÁT HỮU HẠN (FA : Finite Automata)
Tại mỗi thời điểm, hệ thống có thể được xác định ở một trong số hữu hạn trạng thái (states)
Mỗi trạng thái của hệ thống tại mỗi thời điểm sẽ thay đổi tùy thuộc vào INPUT
Ôtômát hữu hạn (FA) được chia thành 2 loại: đơn định (DFA) và không đơn định (NFA)
DFA có khả năng nhận dạng ngôn ngữ dễ dàng hơn
NFA, nhưng thay vào đó thông thường kích thước của nó lại lớn hơn so với ôtômát hữu hạn không đơn định tương đương
Trang 3Ôtômát hữu hạn đơn định - DFA
(Deterministic Finite Automata)
Một cách hình thức ta định nghĩa ôtômát hữu hạn đơn định là bộ gồm năm thành phần (Q, , , q0, F),
trong đó :
• Q là tập hợp hữu hạn các trạng thái
là bộ chữ cái hữu hạn
là hàm chuyển ánh xạ từ Q Q, tức là (q, a) là một trạng thái được cho bởi phép chuyển từ trạng thái q trên ký hiệu nhập a
• q0 Q là trạng thái bắt đầu
• F Q là tập các trạng thái kết thúc
Trang 4Sơ đồ chuyển
Một đồ thị có hướng, gọi là
sơ đồ chuyển (transition diagram) tương ứng với một DFA như sau:
Nếu có một đường chuyển từ trạng thái q đến trạng thái p
trên input a thì có một cung nhãn a từ đỉnh q đến đỉnh p
trong sơ đồ chuyển
Trạng thái khởi đầu q0 nhãn
" Start ".Các trạng thái kết thúc trong F được chỉ ra bằng hai vòng tròn
Trang 5Minh họa
DFA đang ở trạng thái q đọc ký hiệu nhập a trên băng, chuyển sang trạng thái được xác định bởi hàm chuyển (q, a) , rồi dịch đầu đọc sang phải một ký tự
Nếu (q, a) chuyển đến một trong những trạng thái kết thúc thì DFA chấp nhận chuỗi được viết trên băng input phía trước đầu đọc, nhưng không bao gồm ký tự tại vị trí đầu đọc vừa dịch chuyển đến.
Trong trường hợp đầu đọc đã dịch đến cuối chuỗi trên băng và DFA chuyển đến trạng thái kết thúc, thì DFA mới chấp nhận toàn bộ chuỗi trên băng.
Trang 6Ngôn ngữ được chấp nhận bởi DFA
Một chuỗi x được chấp nhận bởi ôtômát
Trang 7Vậy 110101 thuộc L(M) Ta có thể chứng minh rằng L(M) là tập mọi
Kiểm tra chuỗi 110101
Vẽ sơ đồ chuyển
Kiểm tra chuỗi 1101?
Trang 9Giải thuật mô phỏng hoạt động của một DFA
Bài tập lớn 1
Trang 10Nhận xét
Một cách tổng quát, ta thấy tập Q của DFA thể hiện các trạng thái lưu trữ của ôtômát trong quá trình đoán nhận ngôn ngữ, và như vậy khả năng lưu trữ của ôtômát là hữu hạn Mặt khác, hàm chuyển là hàm toàn phần và đơn trị, cho nên các bước chuyển của ôtômát luôn luôn được xác định một cách duy nhất Chính vì hai đặc điểm này mà DFA mô tả như trên được gọi là ôtômát hữu hạn đơn định.
Trang 11Ôtômát hữu hạn không đơn định - NFA (Non-deterministic
Finite Automata)
NFA tại mỗi thời điểm bộ điều khiển có thể chứa một số bất kỳ các trạng thái để chuyển: 0,1 hoặc nhiều hơn 1 trạng thái.
Nhưng số trạng thái là hữu hạn.
Vậy DFA (hay gọi tắt là FA) là một trường hợp đặc biệt của NFA (với số trạng thái để chuyển
là 1)
Trang 12Định nghĩa
ôtômát hữu hạn không đơn định NFA là một bộ 5 thành phần (Q, , , q0, F) trong đó Q, , q0 và F có ý nghĩa như trong DFA,
nhưng là hàm chuyển ánh xạ từ Q 2Q
2Q = tập hợp tất cả các tập hợp con của tập A được
gọi là tập lũy thừa (power set) của A và xác định bởi
2 Q
Giả sử A = { 1, 2, 3 }
Thì 2 A = ?
2 A = { , {1 }, {2 }, {3}, {1, 2}, {2, 3}, {3, 1}, {1, 2, 3} }
Trang 13Hàm chuyển trạng thái mở rộng của NFA
Để thuận tiện trong việc mô tả hoạt động
ôtômát trên chuỗi, ta mở rộng hàm chuyển ánh xạ từ Q * 2Q như sau :
1 (q,) = {q}
2 (q, wa) = { p có một trạng thái r trong (q, w) mà p thuộc (r, a)} = ((q, w), a)
3 (P, w) = q P (q, w) , P Q
Trang 14Ví dụ
Trang 15Ngôn ngữ được chấp nhận bởi NFA
Trang 16 1) Kiểm tra chuỗi 0101
2) Nêu sự khác biệt cơ bản giữa DFA và NFA
3) Để đoán nhận chuỗi thì dùng ôtomát nào thì dễ dàng hơn
Vì sao?
Trang 17Sự tương đương giữa DFA và NFA
Định lý: 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.
Trang 18 Tập trạng thái kết thúc = các phần tử thuộc Q' mà các phần tử đó giao với F khác rỗng.
F’ = {[qq1], [qq0, q1]}
Trang 20NFA với -dịch chuyển (NFAdịch chuyển (NFA)
Ta mở rộng mô hình NFA cho phép các phép chuyển trên nhãn rỗng
Ví dụ:
Sơ đồ chuyển của một NFA với -dịch chuyển :dịch chuyển :
Trang 21
Định nghĩa
Một cách hình thức ta định nghĩa NFA với -dịch dịch
chuyển là bộ 5 thành phần (Q, , , q 0 , F) với tất cả các thành phần có ý nghĩa như trên, nhưng hàm chuyển
Vd: -dịch CLOSURE(q 0 ) = {q 0 , q 1 , q 2 }.
Trang 22 *(q, ) = -dịch CLOSURE(q)
Hay *(q, wa) = -dịch CLOSURE( (*(q, w), a))
*(q, a) gồm tất cả các trạng thái có thể chuyển đến được từ q trên nhãn a gồm cả đường đi nhãn
(q, a) chỉ gồm các trạng thái có thể đến được
từ q chỉ bằng các cung nhãn a
Trang 23Ngôn ngữ được chấp nhận bởi NFA
L(M) = {w *(q0, w) có chứa ít nhất một trạng thái trong F}
Trang 25= -dịch CLOSURE({q1}) = {q1, q2}
Trang 27Giải thuật mô phỏng hoạt động của một NFA
•
Trang 28
Sự tương đương giữa NFA có và không có -dịch chuyển (NFAdịch
chuyển
Đặt M (Q, , , q0, F) là NFA với -dịch dịch chuyển
Ta xây dựng NFA M’(Q, , ’, q0, F’) tương đương
không có -dịch dịch chuyển như sau:
’(q, a) là *(q, a) với q Q và a Chú ý rằng M’ không
có -dịch dịch chuyển nên ta có thể dùng ’ thay cho *, nhưng phải phân biệt và *.
Trang 30q1
Trang 31Giả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 :
-dịch Nó không có sự truyền rỗng (truyền trên nhãn )
-dịch 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
Trang 32Giải thuật xây dựng DFA từ NFA(tiếp)
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
Trang 33 a) -dịch 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) -dịch 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) (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
Trang 34 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à -dịch closure(q0)
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
Trang 35VÍ dụ
Tạo DFA từ NFA sau
Trang 36
Các bước xây dựng tập trạng thái cho DFA :
Trạng thái bắt đầu của DFA : -dịch closure(0) = {0, 1, 2, 4, 7} = A*
-dịch closure((A, a)) = -dịch closure({3, 8}) = {1, 2, 3, 4, 6, 7, 8} = B*
Trang 37 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 :
Trang 38 Từ bảng hàm chuyển như trên, ta xây dựng DFA tương đương nhận dạng cùng ngôn ngữ có dạng như sau :
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
Trang 39II Biểu thức chính qui (RE: Regular expression)
Định nghĩa
Cho là một bộ chữ cái Biểu thức chính quy trên và các tập hợp mà chúng mô tả được định nghĩa một cách đệ quy như sau:
1) là biểu thức chính quy ký hiệu cho tập rỗng
2) là biểu thức chính quy ký hiệu cho tập {}
3) a , a là biểu thức chính quy ký hiệu cho tập {a}
4) Nếu r và s là các biểu thức chính quy ký hiệu cho các tập
hợp R và S thì (r + s), (rs) và ( r*) là các biểu thức chính
quy ký hiệu cho các tập hợp R S, RS, R* tương ứng
Thứ tự ưu tiên của các phép toán xếp theo thứ tự giảm dần là: phép
Trang 40Ví dụ
Biểu thức ((0(1*)) + 1) có thể viết là 01*+ 1
00 là biểu thức chính quy biểu diễn tập {00}
(0+1)* ký hiệu cho 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)*00(0+1)* ký hiệu cho 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, }
(1+10)* ký hiệu cho tất cả các chuỗi 0, 1 bắt đầu bằng số 1 và
không có hai số 0 liên tiếp = {, 1, 10, 11, 1010, 111,
101010, }
Trang 41 (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*2* = ?
ký hiệu cho tất cả các chuỗi có một số bất kỳ các số 0,
theo sau là một số bất kỳ số 1 và sau nữa là một số bất kỳ
số 2 = {, 0, 1, 2, 01, 02, 12, 012, 0012, 0112, }
Một chuỗi tên biến (identifiers) được gọi là hợp lệ trong
một chương trình Pascal nếu như nó bắt đầu bằng ít nhất một chữ cái và theo sau đó là các chữ cái, số, ký hiệu
gạch dưới(underline) hoặc một vài ký hiệu cho phép khác trên bàn phím máy tính.
r = (A + …+ Z + a + … + z) (A + …+ Z + a + … + z + 0 + …
Trang 42 Biểu thức chính quy ký hiệu cho tập hợp các số nguyên trong ngôn ngữ lập trình Pascal :
Một chuỗi số nguyên trong một chương trình Pascal có thể bắt đầu bằng dấu âm (-dịch ) hoặc dấu dương (+) hay
không chứa ký hiệu dấu, và theo sau đó là một chuỗi các
ký hiệu số với ít nhất là một số
Biểu thức chính quy có dạng như sau :
r = ( ‘+’ + ‘-‘ + ) ( 0 + … + 9) (0 + … +9 )*
Nhận xét : Thông thường, việc tìm một biểu thức chính
quy ký hiệu cho một ngôn ngữ khó hơn việc xác định
ngôn ngữ được ký hiệu bởi một biểu thức chính quy vì không có giải thuật cho loại bài toán này
Trang 43III sự tương đương giữa otomat hữu hạn và biểu thức chinh qui
ĐỊNH LÝ Nếu r là biểu thức chính quy thì tồn tại một NFA với -dịch chuyển chấp nhận L(r).
Trang 44Giải thuật
Phân tích biểu thức chính qui thành từng phần và áp
dụng các qui tắc sau để xây dựng NFA tương đương
Quy tắc 1: r = r 1 + r 2
Phép hợp
Trang 45 Quy tắc 2: r = r 1 r 2
Phép nối kết
Trang 46 Quy tắc 3: r = r 1*
Phép bao đóng
Trang 47 Theo quy luật thứ tự ưu tiên, biểu thức 01* + 1 thực chất là
(0(1*)) + 1, vì vậy nó có dạng r 1 + r 2 với r 1 = 01* và r 2 = 1
Ta sẽ lần lượt xây dựng các NFA cho các biểu thức chính quy con, sau đó dựa vào các quy tắc kết hợp để xây dựng NFA cho toàn bộ biểu thức chính quy đã cho
Trang 48 NFA cho r2 = 1:
NFA cho r1 = 01*: tách r1 = r3r4 trong đó r3 = 0; r4 = 1*
NFA cho r3 = 0 :
Trang 50 Theo quy tắc 2) ta xây dựng được NFA cho r1 = r3 r4
= 01* như sau :
Trang 51 Cuối cùng, theo quy tắc 1) ta xây dựng NFA cho r =
r1 + r2 = 01*+ 1 như sau :
Trang 53Exercise Questions on Regular Language and Regular Expression
Ex 1: Find the shortest string belong to alphabet (a,b) that is not in the language represented by the regular expression a*(ab)*b*
Solution: It can easily be seen that , a, b, which are strings in the language with length 1 or less
Of the strings with length 2 aa, bb and ab are in the language However, ba is not in it Thus the answer is ba
Trang 54 Ex 2: For the two regular expressions given below,
(a) find a string corresponding to r2 but not to r1 and
(b) find a string corresponding to both r1 and r2
r1 = a* + b* r2 = ab* + ba* + b*a + (a*b)*
Solution: (a) Any string consisting of only a's or only b's and the empty string are in r1 So we need to find
strings of r2 which contain at least one a and at least one b For example ab and ba are such strings
(b) A string corresponding to r1 consists of only a's or only b's or the empty string The only strings
corresponding to r2 which consist of only a's or b's are
a, b and the strings consiting of only b's (from (a*b)*).
Trang 55 Ex3: Find a regular expression corresponding to the language L over the alphabet { a , b } defined recursively as follows:
Basis Clause: L
Inductive Clause: If x L , then aabx L and xbb L
Extremal Clause: Nothing is in L unless it can be obtained from the above two clauses
Solution: Let us see what kind of strings are in L First of all L Then starting with , strings of L are generated one by one by
prepending aab or appending bb to any of the already generated strings Hence a string of L consists of zero or more aab's in front and zero or more bb's following them Thus (aab)*(bb)* is a regular expression for L.
More exercise