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

bài giảng automata hữu hạn và ngôn ngữ 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 (262.99 KB, 36 trang )

1
Chương 2
AUTOMATA HỮU HẠN VÀ
NGÔN NGỮ CHÍNH QUI
2
1.Automata hữu hạn
1.1 Giới thiệu phi hình thức về automata hữu hạn
1.2 Automata hữu hạn đơn định
1.3 Automata hữu hạn không đơn định
1.4 Automata hữu hạn với phép truyền rỗng
2. Ngôn ngữ và biểu thức chính qui
2.1 Biểu thức chính qui
2.2 Chuyển đổi giữa biểu thức chính qui và
automata hữu hạn
2.3 Các luật đại số cho biểu thức chính qui
2.4 Ngôn ngữ chính qui
3
Automata hữu hạn (Finite automata)
Lớp ngôn ngữ “Ngôn ngữ chính qui”, được đoán
nhận bởi máy ảo, gọi tên là “automata hữu hạn”.
 Automata hữu hạn đơn định (
Deterministic Finite
Automata – DFA
 Automata hữu hạn không đơn định (Nondeterministic
Finite Automata – NFA)
 Automata hữu hạn không đơn định, chấp nhận
phép truyền rỗng (ε-NFA)
4
Giới thiệu phi hình thức về automata hữu hạn
 Một bài toán trong automata là nhận diện chuỗi w
có thuộc về ngôn ngữ L hay không.


 Chuỗi nhập được xử lý tuần tự từng ký hiệu một
từ trái sang phải.
 Trong quá trình thực thi, automaton cần phải nhớ
thông tin đã qua xử lý. Vấn đề đặt ra là nhớ cái gì
và nhớ như thế nào.
5
Cần phải nhớ bao nhiêu thông tin? Xét trực quan, có 3
khả năng:
 Nhớ tất cả: không phù hợp
 Không nhớ gì cả: có thể xảy ra.
 Trường hợp còn lại: cần phải nhớ một điều gì đó.
6
Ví dụ:
L = {w  {0, 1}* | w kết thúc bằng chuỗi con 10}.
Câu trả lời phụ thuộc vào hai ký hiệu cuối cùng.
q
0
Start
q
1
q
2
01
10
1
0
7
Ví dụ: L = {w  {0, 1}* | w chứa số lượng chẵn ký
số 0 và số lượng lẻ ký số 1}.
 Không nhớ thứ tự sắp xếp các ký hiệu.

 Không nhớ chuỗi con.
 Nhớ số lượng ký số 0 và số lượng ký số 1 đã
được đọc. Có 4 trường hợp.
8
even
even
Start
even
odd
odd
even
odd
odd
0
0
0
0
1
1
1
1
9
Ví dụ: L = {w  {0, 1}* | w kết thúc bằng ký số 1 và
không chứa chuỗi con 00}
TH 1
: Đã biết chuỗi w chứa chuỗi con 00.
TH 2
: chuỗi 00 chưa xuất hiện.
TH 2.1
: Ký hiệu cuối là 0. Nếu ký hiệu kế tiếp là:

0: Chuyển sang trường hợp 1.
1: Chuyển sang trường hợp 2.2.
TH 2.2
: Ký hiệu cuối là 1. Nếu ký hiệu kế tiếp là:
0: Chuyển sang trường hợp 2.1.
1: Vẫn thuộc trường hợp 2.2.
10
Start
1

2.1
2.2
1
1
1
0
0
0
0, 1
11
Automata hữu hạn đơn định (DFA)
Định nghĩa: Một DFA A là (Q, ,

, q
0
, F) với
1. Q: tập hữu hạn các trạng thái.
2.  : tập hữu hạn các ký hiệu nhập.
3.


: hàm truyền.
4. q
0
: trạng thái bắt đầu, q
0
 Q.
5. F: tập các trạng thái kết thúc/chấp nhận, F  Q.
12
Ví dụ: Mô tả DFA chấp nhận ngôn ngữ L:
L = {w | w = x01y và chuỗi x, y  {0, 1}*}
Bảng chữ cái của ngôn ngữ L này là:  = {0, 1}.
DFA A cần phải nhớ:
TH 1
: Đã thấy 01. Chấp nhận tất cả những ký hiệu
nhập còn lại.
TH 2
: Chưa thấy 01
TH 2.1
: Ký hiệu nhập gần nhất là 0. Nếu ký hiệu
kế tiếp là:
1: Xem như A đã gặp 01  TH 1.
0: Dừng lại ở TH 2.1.
TH 2.2
: Ký hiệu nhập gần nhất là 1. Nếu ký hiệu
kế tiếp là:
1: Dừng lại ở TH 2.2.
0: Chuyển sang TH 2.1
13
Mỗi trường hợp TH1, TH 2.1, TH 2.2 có thể được
biểu diễn bởi một trạng thái.

TH 2.2 được thể hiện bởi trạng thái bắt đầu q
0
.
 Hàm truyền trên q
0
:

(q
0
, 1) = q
0


(q
0
, 0) = q
2
.
TH 2.1 được thể hiện bởi trạng thái q
2
.
 Hàm truyền trên q
2
:

(q
2
, 0) = q
2



(q
2
, 1) = q
1
.
TH 1 được thể hiện bởi trạng thái chấp nhận q
1
.
 Hàm truyền trên q
1
:

(q
1
, 0) = q
1


(q
1
, 1) = q
1
.
Như vậy, Q = {q
0
, q
1
, q
2

}, F = {q
1
}, q
0
: trạng thái
bắt đầu.
Automaton A chấp nhận ngôn ngữ L:
A = ({q
0
, q
1
, q
2
}, {0, 1},

, q
0
, {q
1
})
với các hàm truyền

được chỉ ra ở trên.
14
Biểu diễn của DFA
DFA được thể hiện một cách hình thức bởi
bộ 5 thành phần như trên sẽ khô khan và khó đọc.
Có 2 cách đơn giản hơn để mô tả DFA:
 Sơ đồ truyền
 Bảng truyền

15
Sơ đồ truyền
Sơ đồ truyền cho DFA A = (Q, ,

, q
0
, F) là một
đồ thị được định nghĩa như sau:
 Mỗi trạng thái trong Q là một nút.
 Nếu p, q  Q, a . Giả sử

(q, a) = p. Khi đó,
sơ đồ truyền có cung nối nút q đến nút p và gán
nhãn a.
 Luôn có 1 mũi tên chỉ vào trạng thái bắt đầu q
0
,
gán nhãn Start.
 Những nút mô tả trạng thái chấp nhận ( F) có 2
vòng tròn đồng tâm. Những nút còn lại chỉ chứa
1 vòng tròn.
16
Bảng truyền
Biểu diễn các hàm truyền trên một bảng.
- Dòng của bảng tương ứng với trạng thái.
- Các cột là những ký hiệu nhập trong tập .
- Trạng thái bắt đầu được đánh dấu bởi mũi tên ().
- Trạng thái kết thúc được đánh dấu bởi dấu sao (*).
17
Hàm truyền mở rộng (DFA)

Nếu

là hàm truyền thì là hàm truyền mở rộng.
với: q – trạng thái xuất phát bất kỳ;
w – chuỗi bất kỳ;
p – trạng thái mà DFA đạt đến khi bắt đầu từ
trạng thái q và xử lý chuỗi w.

ˆ
pwq ),(
ˆ

18
Hàm truyền mở rộng được định nghĩa bằng qui
nạp
 Bước cơ sở:

^(q, ε) = q.
 Bước qui nạp: Giả sử chuỗi w có dạng xa
)),,(
ˆ
(),(
ˆ
axqwq


19
Ví dụ: Thiết kế DFA A chấp nhận ngôn ngữ L:
L = {w | w có số lượng ký số 0 và 1 đều chẵn}.
DFA phải nhớ số lượng ký số 0 và số lượng ký số 1.

Có 4 trường hợp.
 q
0
là tt bắt đầu cũng như tt kết thúc.
 DFA A của ngôn ngữ L là:
A = ({q
0
, q
1
, q
2
, q
3
}, {0, 1},

, q
0
, {q
0
})
20
Sơ đồ truyền
Bảng truyền
q
2
q
1
q
3
q

3
q
0
q
2
q
0
q
3
q
1
q
1
q
2
* q
0
10
q
0
q
1
q
2
q
3
1
0
1
1

1
0
0
0
Start
21
Ngôn ngữ của DFA
Định nghĩa:
Ngôn ngữ L(A) của DFA A = (Q, ,

, q
0
, F) được
xác định bởi:
L(A) = {w |

^(q
0
, w)  F }

Nếu ngôn ngữ L là L(A) của DFA A nào đó, ta nói,
L là ngôn ngữ chính qui.
22
Automata hữu hạn không đơn định (NFA)
 Automaton kiểu NFA sẽ có thể thuộc về một vài
trạng thái cùng một lúc.
 NFA cũng chấp nhận ngôn ngữ chính qui, giống
như DFA.
 NFA thường cô đọng và dễ thiết kế hơn DFA.
Có thể chuyển đổi từ NFA sang DFA.

23
Giới thiệu phi hình thức về NFA
Giống như DFA, NFA cũng có:
1. Tập hữu hạn các trạng thái.
2. Tập hữu hạn các ký hiệu nhập (bảng chữ
cái).
3. Một trạng thái bắt đầu.
4. Tập các trạng thái chấp nhận.
Sự khác nhau giữa DFA và NFA là kiểu hàm
truyền

.
24
Ví dụ: Biểu diễn NFA N, chấp nhận ngôn ngữ L.
L = { w | w  {0, 1}* và kết thúc bởi 01 }.
q
0
: Trạng thái bắt đầu.
q
0
q
1
q
2
Start 0 1
0, 1
25
Mô phỏng quá trình hoạt động của NFA với chuỗi
nhập là 00101
q

0
q
0
q
0
q
0
q
1
q
1
q
1
q
2
q
2
(dừng)
(dừng)
00101
Các trạng thái
hiện hành
q
0
q
0
26
Định nghĩa: NFA A là (Q, ,

, q

0
, F) với
 Q: tập hữu hạn các trạng thái.
  : tập hữu hạn các ký hiệu nhập.


: hàm truyền.
 q
0
: trạng thái bắt đầu, q
0
 Q.
 F: tập các trạng thái kết thúc/chấp nhận, F  Q.
27
Ví dụ: NFA A chấp nhận chuỗi kết thúc bởi 01 là:
A = ({q
0
, q
1
, q
2
}, {0, 1},

, q
0
, {q
2
})
ØØ*q
2

{q
2
}Øq
1
{q
0
}{q
0
, q
1
}
 q
0
10
28
Hàm truyền mở rộng (NFA)
Hàm truyền mở rộng được định nghĩa bằng qui
nạp
 Bước cơ sở:

^(q, ε) = q.
 Bước qui nạp: Giả sử chuỗi w có dạng xa
29
Ngôn ngữ của NFA
Một NFA chấp nhận chuỗi w nếu một/một số
luồng xuất phát từ trạng thái bắt đầu và đạt đến
trạng thái chấp nhận với điều kiện chuỗi w được
xử lý hoàn toàn.
Gọi NFA A là (Q, ,


, q
0
, F). Ngôn ngữ L(A)
được chấp nhận bởi A nếu:
}),(
ˆ
|{)(
0
 FwqwAL

30
Ví dụ: Chứng minh rằng NFA trong ví dụ trên chấp
nhận ngôn ngữ L = {w | w kết thúc bởi 01}.
Phát biểu trên tương đương giao của 3 phát biểu
sau:
1. chứa q
0
đối với mọi w.
2. chứa q
1
nếu và chỉ nếu w kết thúc bởi
0.
3. chứa q
2
nếu và chỉ nếu w kết thúc bởi
01.
),(
ˆ
0
wq


),(
ˆ
0
wq

),(
ˆ
0
wq

31
 Ba phát biểu trên giúp xác định trạng thái của A
trước khi đọc ký hiệu nhập kế tiếp.
 Việc chứng minh 3 phát biểu trên đảm bảo rằng
ngôn ngữ của NFA này là tập các chuỗi ký tự kết
thúc bởi 01.
 Sử dụng chứng minh qui nạp tương hỗ.
32
Bước cơ sở: Nếu |w| = 0 thì w = ε.
33
Bước qui nạp: Cho rằng w = xa, với a là ký hiệu
nhập 0 hoặc 1.
34
 (If) Nếu w kết thúc bởi 0, có nghĩa là a = 0.
Chứng minh q
1


^(q

0
, w).
(Only-if) Giả sử q
1


^(q
0
, w), chứng minh w kết
thúc bởi 0.
35
 (If) Giả sử w kết thúc bởi 01, chứng minh q
2


^(q
0
, w).
 (Only-if) Giả sử q
2


^(q
0
, w). Chứng minh w kết
thúc bởi 01.
36
Sự tương đương giữa DFA và NFA
 Mọi ngôn ngữ được chấp nhận bởi NFA cũng
được chấp nhận bởi DFA.

 Xây dựng NFA thường dễ dàng hơn.
 Trong thực tế, số trạng thái của DFA xấp xỉ NFA,
nhưng thường thì có nhiều hàm truyền hơn.
 Trong trường hợp xấu nhất, nếu cùng chấp
nhận một ngôn ngữ: NFA có n trạng thái thì DFA
có 2
n
trạng thái.
37
Kiến tạo tập con
 Để chứng minh DFA chấp nhận mọi ngôn ngữ
mà NFA chấp nhận, cần sử dụng kỹ thuật “Kiến
tạo tập con”.
 Từ NFA N = (Q
N
, ,

N
, q
0
, F
N
), dùng “Kiến tạo
tập con” để xây dựng DFA D = (Q
D
, ,

D
, q
0

, F
D
),
sao cho L(D) = L(N).
38
Các thành phần khác của D:
 Q
D
: tập hợp của các tập con chứa (một số) các
trạng thái của Q
N
.
 F
D
: tập hợp của các tập con S (S  Q
N
), sao cho
S ∩ F
N
≠ .
 Với mỗi tập R  Q
N
và mỗi ký hiệu a  thì:

Rp
ND
apaR

 ),(),(



39
Ví dụ: Gọi NFA N là automaton chấp nhận chuỗi
kết thúc bởi 01. Vì Q
N
= {q
0
, q
1
, q
2
} nên “kiến tạo
tập con” sản sinh ra DFA có 2
3
= 8 trạng thái.
{q
0
, q
2
}{q
0
, q
1
}*{q
0
, q
1
, q
2
}

{q
2
}Ø*{q
1
, q
2
}
{q
0
}{q
0
, q
1
}*{q
0
, q
2
}
{q
0
, q
2
}{q
0
, q
1
}{q
0
, q
1

}
ØØ*{q
2
}
{q
2
}Ø{q
1
}
{q
0
}{q
0
, q
1
}
 {q
0
}
ØØØ
10
40
Gọi A = Ø, B = {q
0
}, C = {q
1
}, Z = {q
2
}, E = {q
0

, q
1
},
F = {q
0
, q
2
}, G = {q
1
, q
2
}, H = {q
0
, q
1
, q
2
}:
FE*H
ZA*G
BE*F
FEE
AA*Z
ZAC
BE
 B
AAA
10
41
Giải thuật loại bỏ trạng thái (lazy evaluation)

 Bước cơ sở: Tập con chứa trạng thái bắt đầu
của N.
 Bước qui nạp: Giả sử R là tập các trạng thái có
thể truy xuất.
42
{q
0
} {q
0
, q
1
} {q
0
, q
2
}
Start
1
01
1
0
0
43
Chứng minh hình thức vai trò của “Kiến tạo tập con”
 DFA D vừa được xây dựng sẽ chấp nhận chuỗi
nhập w nếu D đi vào trạng thái kết thúc sau khi
đọc hết w.
 Mỗi trạng thái chấp nhận của DFA là một tập
hợp chứa ít nhất một trạng thái chấp nhận của
NFA.

 NFA chấp nhận chuỗi w nếu đạt đế
n một trong
các trạng thái kết thúc của nó sau khi đọc hết w.
Kết luận
: DFA và NFA chấp nhận cùng một chuỗi
nhập và vì thế, chúng chấp nhận cùng một ngôn
ngữ.
44
Định lý 2.1: Nếu DFA D = (Q
D
, ,

D
, {q
0
}, F
D
)
được xây dựng từ NFA N = (Q
N
, ,

N
, q
0
, F
N
) bởi
“kiến tạo tập con” thì L(D) = L(N).
Chứng minh:

Trước hết, cần chứng minh bằng qui nạp đẳng
thức sau:
),(
ˆ
)},({
ˆ
00
wqwq
ND


45
 Bước cơ sở: Giả sử |w| = 0 thì w = ε.
 Bước qui nạp: Gọi |w| = n + 1.
46
→ L(D) = L(N).
“Kiến tạo tập con”, theo một hướng khác:


k
i
iNkD
apappp
1
21
),()},,,,({



47

Định lý 2.2: Ngôn ngữ L được chấp nhận bởi DFA
nếu và chỉ nếu L được chấp nhận bởi NFA.
Chứng minh:
(If) Giả thiết L được chấp nhận bởi NFA. Chứng
minh L cũng được chấp nhận bởi DFA.
48
(Only-if) Giả sử L được chấp nhận bởi DFA.
Chứng minh: L được chấp nhận bởi NFA.
49
Thực hiện chứng minh qui nạp trên chiều dài của chuỗi w.
Bước cơ sở: |w| = 0, nghĩa là w = ε.
Bước qui nạp: Gọi w = xa với x 
*
và a .
50
Từ đây, có thể dễ dàng thấy rằng chuỗi w được
chấp nhận bởi DFA D thì cũng được chấp nhận
bởi NFA N.

×