Giáo trình Tin học lý thuyết - Chương 3: Ôtômát hữu hạn và biểu thức chính quy
Nội dung chính: Trong chương này, ta sẽnghiên cứu một loại "máy trừu tượng" gọi
là ôtômát hữu hạn. Chúng là công cụdùng đoán nhận một lớp ngôn ngữkhá đơn giản
gọi là lớp ngôn ngữchính quy. Trước hết, hai dạng của ôtômát hữu hạn sẽlần lượt
được trình bày và có sựchứng minh rằng chúng tương đương nhau vềkhảnăng đoán
nhận ngôn ngữ. Tiếp đó, ta sẽ đềcập đến biểu thức chính quy - một phương tiện khác
đểxác định ngôn ngữvà ta lại thấy rằng lớp ngôn ngữdo các ôtômát hữu hạn chấp
nhận chính là lớp ngôn ngữchính quy. Phần tiếp theo của chương sẽ đềcập đến mối
quan hệgiữa cơchếôtômát và các biểu thức chính quy dùng ký hiệu cho ngôn ngữ.
Cuối chương này, một vài ứng dụng cụthểcủa ôtômát hữu hạn sẽ được trình bày.
Mục tiêu cần đạt: Kết thúc chương này, sinh viên cần nắm vững :
¾Khái niệm ôtômát hữu hạn, các thành phần, các dạng và sựkhác biệt cơbản
giữa hai dạng.
¾Cách thức chuyển đổi tương đương từdạng đơn định sang không đơn định
và ngược lại.
¾Viết biểu thức chính quy ký hiệu cho tập ngôn ngữchính quy.
¾Mối liên quan giữa ôtômát hữu hạn và biểu thức chính quy.
¾Vẽsơ đồchuyển trạng thái (đơn định hoặc không đơn định) từmột biểu
thức chính quy.
¾Tìm các ứng dụng thực tếkhác từmô hình ôtômát hữu hạn.
p nhận bởi
DFA sau :
1
1
q1 q2 q
3
0
0 0, 1
Start
Hình 3.10 – DFA cho ví dụ 3.13
Gọi DFA được chỉ ra trong hình 3.10 là M ({q1, q2, q3}, {0, 1}, δ, q1, {q2, q3}). Ta
thấy, tập hợp tất cả các chuỗi được chấp nhận bởi DFA trên là các chuỗi làm cho
ôtômát chuyển từ trạng thái bắt đầu q1 đến một trong hai trạng thái kết thúc q2 và q3
và không chuyển qua số tối đa là 3 (k = 3) trạng thái của ôtômát. Vậy ta cần viết biểu
thức chính quy ký hiệu cho tập hợp này như sau :
r = r312 + r313
Theo công thức đã được chứng minh trong Định lý, ta có thể tính được các giá trị rkij
với i, j là chỉ số các trạng thái từ 1 đến 3 và với k = 0, 1 và 2, như chỉ ra trong bảng
sau:
k = 0 k = 1 k = 2
rk11 ε ε (00)*
Chương III : Ôtômát hữu hạn và biểu thức chính quy
45
rk12 0 0 0(00)*
rk13 1 1 0*1
rk21 0 0 0(00)*
rk22 ε ε + 00 (00)*
rk23 1 1 + 01 0*1
rk31 ∅ ∅ (0 + 1)(00)*0
rk32 0 + 1 0 + 1 (0 + 1)(00)*
rk33 ε ε ε + (0 + 1)0*1
Bằng cách dùng các công thức tương đương như (r + s) t = rt + st và (ε + r)* = r* để
đơn giản các biểu thức, chẳng hạn khi tính biểu thức :
r122 = r021 (r011 )* r012 + r022 = 0(ε)*0 + ε = 00 + ε
Tương tự, khi đơn giản biểu thức
r213 = r112 (r122 )* r123 + r113 = 0(00 + ε)*(1 + 01) + 1
ta nhận thấy (00 + ε)* tương đương với (00)* và (1 + 01) thì tương đương với (ε + 0)1
nên ta rút gọn :
r213 = 0(00)*(ε + 0)1 + 1
Mặt khác, chú ý rằng (00)*(ε + 0) thì tương đương với 0*, vì thế 0(00)*(ε + 0)1 + 1
cũng bằng 00*1 + 1 hay cuối cùng là 0*1.
Để hoàn thành việc xây dựng biểu thức chính quy cho M, ta cần tính r312 và r313. Ta
viết:
r312 = r213 (r233 )* r232 + r212
= 0*1(ε + (0 + 1)0*1)*(0 + 1)(00)* + 0(00)*
= 0*1((0 + 1)0*1)*(0 + 1)(00)* + 0(00)*
và
r313 = r213 (r233 )* r233 + r213
= 0*1(ε + (0 + 1)0*1)*(ε + (0 + 1))0*1) + 0*1
= 0*1((0 + 1)0*1)*
Vậy biểu thức chính quy có dạng :
r = r312 + r313 = 0*1((0 + 1)0*1)*(ε + (0 + 1)(00)*) + 0(00)*
Iv. MỘT VÀI ỨNG DỤNG CỦA ÔTÔMÁT HỮU HẠN
Có nhiều kiểu phần mềm thiết kế nhằm đặc tả sự chuyển đổi tự động từ dạng biểu
thức chính quy sang việc cài đặt máy tính một cách hiệu quả tương ứng với ôtômát
hữu hạn. Trong phần này, ta sẽ đề cập đến hai ứng dụng trong số chúng.
4.1. Bộ phân tích từ vựng
Chương III : Ôtômát hữu hạn và biểu thức chính quy
46
Các ký hiệu từ vựng (token) trong một ngôn ngữ lập trình thì hầu hết không có sự
ngọai lệ, được biểu diễn như các tập hợp chính quy. Chẳng hạn, các định danh của
ALGOL: các chữ cái viết hoa hoặc thường, theo sau bởi một dãy bất kỳ của chữ cái
(letter) hoặc chữ số (digit) với độ dài không giới hạn có thể được biểu diễn như sau :
(letter) (letter + digit)*
trong đó "letter" thay thế cho A + B +...+ Z + a + b +...+ z và "digit" là 0 + 1 +...+ 9.
Một ví dụ khác, các định danh của FORTRAN có độ dài giới hạn là 6 và các chữ cái
chỉ cho phép dùng chữ viết hoa hoặc ký hiệu $ được biểu diễn như sau :
(letter) (ε + letter + digit)5
với "letter" là $ + A + B + ... + Z .
Trong SNOBOL, các hằng số số học có thể được biểu diễn như sau :
(ε + −) (digit + (• digit * + ε) + • digit+ )
Một số công cụ phát sinh bộ phân tích từ vựng nhận input như một dãy các biểu thức
chính quy mô tả các ký hiệu từ vựng và phát sinh một ôtômát hữu hạn đơn giản nhận
dạng mọi ký hiệu từ vựng. Thông thường, chúng chuyển đổi biểu thức chính quy
thành một NFA với ε-dịch chuyển và sau đó xây dựng tập hợp con các trạng thái để
có thể phát sinh DFA một cách trực tiếp hơn là tìm cách loại bỏ các phép chuyển
nhãn ε. Mỗi trạng thái kết thúc xác định ký hiệu từ vựng cụ thể đã tìm thấy. Hàm
chuyển của FA sẽ được mã hóa bằng một trong vài cách nhằm chiếm ít không gian
hơn so với bảng hàm chuyển tổ chức dưới dạng mảng hai chiều. Bộ phân tích từ vựng
được thiết lập bằng cách phát sinh một chương trình cố định thông dịch các bảng mã,
cùng với các bảng minh họa cụ thể sự nhận dạng của FA trên các ký hiệu từ vựng
(viết dưới dạng các biểu thức chính quy). Bộ phân tích từ vựng dạng này có thể được
dùng như một chương trình con độc lập (module) trong một trình biên dịch ngôn ngữ.
4.2. Trình soạn thảo văn bản
Hiển nhiên, các trình soạn thảo văn bản hoặc các chương trình tương tự cho phép thay
thế một chuỗi bởi mọi chuỗi kết hợp với một biểu thức chính quy cho trước.
Chẳng hạn, trình soạn thảo văn bản ed trong UNIX cho phép một câu lệnh như sau :
/aba*c/
để tìm sự xuất hiện đầu tiên của chuỗi có dạng như trên. Hay câu lệnh :
s/bbb*/b/
cho phép thay thế các chuỗi có dạng bbb* thành chuỗi có một ký tự b.
Hay trong các câu lệnh của MS-DOS và NC, ví dụ câu lệnh :
Del tmp*.???
sẽ cho phép xóa đi tất cả các file với tên tập tin bắt đầu bằng tmp, sau đó là một chuỗi
bắt kỳ và có phần mở rộng là 3 ký tự tùy ý. Dấu * trong trường hợp này ký hiệu cho
một chuỗi bất kỳ, còn dấu ? ký hiệu cho một ký tự tùy ý. Đây cũng là một dạng ký
hiệu của biểu thức chính quy thay thế cho chuỗi.
Chương III : Ôtômát hữu hạn và biểu thức chính quy
47
Hay chẳng hạn, một ví dụ về xử lý chuỗi khác được áp dụng cho việc tìm kiếm theo
mẫu trên các trang Web.
Trong tất cả các ví dụ trên, ký hiệu * xác định “mọi” biểu thức a1 + a2 + ... + an trong
đó các ai là tất cả các ký tự cho phép trong máy tính trừ ký tự xuống dòng (newline).
Ta có thể chuyển một biểu thức chính quy r sang DFA chấp nhận mọi r. Chú ý rằng
sự hiện diện của ký hiệu * sẽ cho phép ta nhận dạng một thành phần của L(r) bắt đầu
từ bất kỳ vị trí nào trong dòng. Để làm được điều này, các ứng dụng phải thực hiện
quá trình chuyển đổi từ một biểu thức chính quy sang NFA. Và vì cơ chế hoạt động
của NFA khá phức tạp nên thông thường ngay sau đó, NFA lại phải được biến đổi
tiếp thành dạng DFA tương đương. Tuy nhiên, sự chuyển đổi từ một biểu thức chính
quy sang DFA tốn nhiều thời gian hơn việc sử dụng DFA để kiểm tra các mẫu bằng
cách duyệt qua chúng một lần, tuy DFA có thể có số trạng thái là hàm mũ của độ dài
biểu thức chính quy.
Thực tế, trong trình soạn thảo văn bản UNIX, biểu thức chính quy với mọi r được
chuyển thành một NFA có ε-dịch chuyển và sau đó NFA này được mô phỏng một
cách trực tiếp.
Câu hỏi :
Hãy tự liên hệ một số các ứng dụng thực tế khác dùng cơ
chế ôtômát hữu hạn ?
Tổng kết chương III: Phần nội dung chương III tập trung nghiên cứu cơ chế hoạt
động của các dạng ôtômát hữu hạn, mối tương quan giữa chúng, cũng như sự tương
đương của chúng với biểu thức chính quy. Tùy theo các yêu cầu thực tế của ứng
dụng, ta có thể chuyển từ dạng phức tạp nhất sang các dạng đơn giản hơn. Có thể tóm
tắt sự tương quan giữa các Định lý trong chương này theo sơ đồ sau :
Định lý 4 Định lý 2
DFA NFA
Định lý 1
NFAε
Định lý 3
RE
Chương III : Ôtômát hữu hạn và biểu thức chính quy
48
BÀI TẬP CHƯƠNG III
3.1. Mô tả ngôn ngữ được chấp nhận bởi các ôtômát hữu hạn với sơ đồ chuyển được
cho như sau :
a)
A B C1
0 1 0,1
0
b)
A B C1
1 1
1 0
D
0
0
3.2. Xây dựng các sơ đồ chuyển ôtômát hữu hạn chấp nhận các ngôn ngữ sau trên bộ
chữ cái Σ = {0, 1}
a) Tập các chuỗi kết thúc là 00.
b) Tập các chuỗi có 3 ký hiệu 0 liên tiếp.
c) Tập các chuỗi mà ký hiệu thứ 3 kể từ cận phải của chuỗi là 1.
d) Tập mọi chuỗi mà bất cứ chuỗi con nào có độ dài bằng 5 đều có chứa ít
nhất 2 con số 0.
3.3. Tìm các sơ đồ chuyển ôtômát hữu hạn đoán nhận các ngôn ngữ sau :
a) Tập các chuỗi trên {0, 1} có chứa một số chẵn các số 0 và một số lẻ các số 1
b) Tập các chuỗi trên {0, 1} có độ dài chia hết cho 3.
c) Tập các chuỗi trên {0, 1} không chứa 101 như một chuỗi con.
3.4. Xây dựng DFA tương đương với mỗi NFA sau :
a) N1({0,1,2,3},{a,b},δ1,0,{3}) với δ1 b) N2 ({0,1,2,3}, {a,b}, δ2,0, {1,3}) với δ2
δ1 a b δ2 a b
0 {0, 1} {1} 0 {1, 3} {1}
1 {2} {2} 1 {2} {1, 2}
2 {3} ∅ 2 {3} {0}
3 {3} {3} 3 ∅ {0}
Chương III : Ôtômát hữu hạn và biểu thức chính quy
49
c)
1 2 3
a a, b
d)
3.5. Tìm NFA không có ε-dịch chuyển nhận dạng cùng ngôn ngữ với các NFA sau :
a)
b)
3.6. Viết biểu thức chính quy và vẽ NFA đoán nhận các ngôn ngữ sau :
a) Tập hợp các chuỗi trên Σ = {1, 2, 3} sao cho ký hiệu cuối cùng đã có xuất
hiện trước đó .
b) Tập hợp các chuỗi trên Σ = {0, 1} trong đó có một cặp ký tự 0 cách nhau
bởi một chuỗi con có độ dài 4i, với i ≥ 0 nào đó.
3.7. Viết biểu thức chính quy cho mỗi ngôn ngữ sau trên Σ = { 0, 1} :
a) Tập hợp các chuỗi trong đó mọi cặp 0 liên tiếp đều xuất hiện trước mọi cặp
1 liên tiếp.
4 a, b
a, b
1 2 3
a, b 0 4
a
a
a, b
a a, b
a, b
q0 q1 q2 a, ε a, b q3 c, ε
a a
1
0
1ε 0
q2q0
q3q1 ε
ε
Chương III : Ôtômát hữu hạn và biểu thức chính quy
50
b) Tập hợp các chuỗi chứa nhiều nhất một cặp 0 liên tiếp và nhiều nhất một
cặp 1 liên tiếp.
3.8. Mô tả (bằng lời) ngôn ngữ được các biểu thức chính quy sau đặc tả :
a) 0(0 + 1)* 0
b) (0+ 1)*0(0 + 1) (0 + 1)
c) (11+ 0)*(00+ 1)
d) (1+ 01+ 001)*(ε + 0 + 00)
e) [ 00 + 11 + (01+ 10) (00+ 11)*(01+ 10)]*
3.9. Chứng tỏ các biểu thức chính quy sau ký hiệu cho cùng một ngôn ngữ :
(aa)* , (aa)* + (∅a) , (aa + aaaa)* , (aa)* (aa)*
3.10. Vẽ NFA với ε-dịch chuyển được cho bởi các biểu thức chính qui sau. Sau đó,
hãy chuyển sang DFA tương đương :
a) ( a* + b*)*
b) ((ε + a) b*)*
c) (a + b)* abb (a + b)*
d) ab + (a + bb) a*b
e) (a + ab + aab)*(ε+ a+ aa)
f) 10 + (0 + 11)0*1
g) 01 [ (( 10)*+ 111)* + 0]*1
3.11. Hãy tìm các biểu thức chính qui tương ứng với các sơ đồ chuyển trạng thái sau:
a) b)
BÀI TẬP LẬP TRÌNH
3.12. Viết chương trình trong Pascal / C mô phỏng một FA chấp nhận ngôn ngữ được
biểu diễn bởi biểu thức chính quy sau :
[ A ... Z, a ... Z ]+ [ A ... Z, a ... Z, 0 ... 9, _ ]* + [ 0 ... 9]+ + op
3.13. Viết chương trình cho ra một FA tương ứng khi đầu vào là một biểu thức chính
quy.
A B
C
1
0
0
0
1
1
A B
C
0
1 0
1
0
1
Chương III : Ôtômát hữu hạn và biểu thức chính quy
51
3.14. Viết chương trình cho ra DFA khi đầu vào là một NFA.
File đính kèm:
Giáo trình Tin học lý thuyết - Chương 3 Ôtômát hữu hạn và biểu thức chính quy.pdf
