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

Tài liệu ÔTÔMÁT HỮU HẠN VÀ BIỂU THỨC CHÍNH QUY docx

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 (340.25 KB, 55 trang )


ĐAI H C VINHỌ
KHOA CNTT
Biên so n: ạ HOÀNG DANH LONG
K50-CNTT
Ch ng IIươ
ÔTÔMÁT H U H N VÀ BI U TH C Ữ Ạ Ể Ứ
CHÍNH QUY


I. Ô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.


Ô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, Σ, δ, q


0
, 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.

q
0
∈ Q là trạng thái bắt đầu

F ⊆ Q là tập các trạng thái kết thúc


S đ 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:

Các đỉnh của đồ thị là các
trạng thái của DFA;

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 q
0
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.


Minh 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.


Ngô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

hữu hạn M (Q, Σ, δ, q
0
, F) nếu δ(q
0
, x) = p
với p ∈ F.

Ngôn ngữ được chấp nhận bởi M, ký hiệu
L(M) là tập hợp:
L(M) = { x | δ (q
0
, x) ∈ F }

VD. Một DFA được xác định bởi
M(Q, Σ, δ, q
0
, F) với Q = {q
0
, q
1
, q
2
, q
3
}, Σ = {0,
1}, F = {q
0
} và hàm chuyển δ như sau:



Ví d (ti p)ụ ế
Kiểm tra chuổi w = 110101 có thuộc ngôn ngữ do otomat sinh ra hay
không?
δ(q0, 1) = q1, δ(q1, 1) = q0, δ(q0, 0) = q2,
δ(q2, 1) = q3; δ(q3, 0) = q1, δ(q1, 1) = q0 ∈ F
(Hay δ(q0, 110101) = δ(q1, 10101) = δ(q0, 0101) = δ(q2, 101) = δ(q3,
01) = δ(q1, 1) = q0 ∈ F)
Vậy 110101 thuộc L(M). Ta có thể chứng minh rằng L(M) là tập mọi
chuỗi có số chẵn số 0 và số chẵn số 1.
Kiểm tra chuỗi
110101
Vẽ sơ đồ chuyển
Kiểm tra chuỗi
1101?


Hàm chuy n tr ng thái m ể ạ ở
r ngộ
Ta định nghĩa hàm chuyển δ như một
ánh xạ từ Q × Σ* → Q với ý nghĩa δ(q,
w) là trạng thái DFA chuyển đến từ trạng
thái q trên chuỗi w. Một cách hình thức,
ta định nghĩa :
1. δ(q, ε) = q
2. δ(q, wa) = δ(δ (q, w), a), với mọi chuỗi
w và ký hiệu nhập a.


Gi i thu t mô ph ng ho t đ ng c a m t DFA ả ậ ỏ ạ ộ ủ ộ





Bài tập
lớn 1


Nhậ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.


Ô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)


Đ 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, Σ, δ, q
0
, F) trong đó Q, Σ, q
0
và F có ý
nghĩa như trong DFA,

nhưng δ là hàm chuyển ánh xạ từ Q × Σ → 2
Q
.

2
Q
= 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} }


Hà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 × Σ* → 2
Q
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.


Ví dụ


Ngôn ngữ được chấp nhận bởi NFA

L(M) = {w | δ(q

0
, w) có chứa ít nhất một
trạng thái trong F }

VD. Xét NFA M ({q
0
, q
1
, q
2
, q
3
, q
4
}, {0, 1},
δ, q
0
, {q
2
, q
4
}) với hàm chuyển như sau :


Ví d (ti p)ụ ế

Kiểm tra chuỗi w = 01001.

Đọc 0 δ(q0, 0) = {q0, q3};.


Đọc 1 δ({q0, q3}, 1) = δ(q0, 1) ∪ δ (q3, 1) = {q0, q1};.

Đọc 0 δ({q0, q1}, 0) = δ(q0, 0) ∪ δ (q1, 0) = {q0, q3};.

Đọc 0 δ({q0,q3}, 0) = δ(q0, 0) ∪ δ (q3, 0) = {q0,q3,q4};.

Đọc 1 δ({q0,q3,q4}, 1) = δ(q0, 1) ∪ δ (q3, 1) ∪ δ (q4, 1)
= {q0,q1,q4};

Do q4 ∈ F nên w ∈ L (M).

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?


S 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.
Ví dụ:
Cho NFA M ({q
0
, q
1
}, {0, 1}, δ, q
0
, {q

1
}) với hàm chuyển δ
như sau :δ (q
0
, 0) = {q
0
, q
1
},δ (q
0
,1) = {q
1
},
δ (q
1
, 0) = ∅,δ(q
1
, 1) = {q
0
, q
1
}
Xây dựng DFA tương đương M’ (Q’, {0, 1}, δ’, [q
0
], F’)
chấp nhận L(M)

Tập trạng thái Q’ : chứa tất cả các tập con của {q
0
, q

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



Hàm chuyển δ’
Vì δ(q
0
, 0) = {q
0
, q
1
} nên δ’([q
0
], 0) = [q
0
, q
1
];
δ’([q
0

], 1) = [q
1
] ; δ’([q
1
], 0) = ∅, δ’([q
1
], 1) = [q
0
, q
1
],
δ’(∅, 0) = δ’(∅, 1) = ∅ ,
δ’([q
0
, q
1
],0) = [q
0
, q
1
]. ( vì δ({q
0
, q
1
},0) = δ(q
0
, 0) ∪ δ(q
1
, 0) =
{q

0
, q
1
} ∪ ∅ = {q
0
, q
1
})
δ’([q0, q1], 1) = [q0, q1] ( vì δ({q
0
, q
1
},1) = δ(q
0
, 1) ∪ δ(q
1
,
1) = {q
1
} ∪ {q
0
, q
1
} = {q
0
, q
1
})

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’ = {[q
1
], [q
0
, q
1
]}


δ’
0 1
[q
0
] [q
0
, q
1
] [q
1
]
[q
1
] ∅ [q
0
, q
1
]
[q
0

, q
1
] [q
0
, q
1
] [q
0
, q
1
]
∅ ∅ ∅
δ 0 1
q
0
q
0
, q
1
q
1
q
1
∅ q
0
, q
1


NFA v i ớ ε-d 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 :




Đ nh nghĩaị

Một cách hình thức ta định nghĩa NFA với ε-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 δ là ánh xạ từ Q × (Σ ∪ {ε}) → 2
Q
.

Khái niệm δ(q, a) gồm tất cả các trạng thái p sao cho
có phép chuyển nhãn a từ q tới p, trong đó a là một ký
hiệu thuộc Σ hoặc là ε.

Ta sử dụng ε-CLOSURE(q) để xác định tập tất cả các
đỉnh p sao cho có đường đi từ q tới p với nhãn ε.

Vd: ε-CLOSURE(q
0

) = {q
0
, q
1
, q
2
}.



δ*(q, ε) = ε-CLOSURE(q)

Hay δ*(q, wa) = ε-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.


Ngôn ng đ c ch p nh n b i ữ ượ ấ ậ ở
NFAε
L(M) = {w | δ*(q
0
, w) có chứa ít nhất một trạng
thái trong F}


Ví dụ


Cho NFAε M ({q0, q1, q2}, {0, 1, 2}, δ, q0, {q2}) với
hàm chuyển δ như sau :




Xét chuỗi nhập w = 012 có thuộc vào ngôn ngữ L(M)
hay không?
δ
Input
Trạng thái 0 1 2
ε
q0 q0
∅ ∅
q1
q1

q1

q2
q2
∅ ∅
q2




Ta cần tính δ*(q
0

, 012)

δ*(q0, ε0) = ε-CLOSURE(δ(δ*(q0, ε), 0) (1)

Mà δ*(q
0
, ε) = ε-CLOSURE(q0) = {q0, q1, q2}

suy ra (1) = ε-CLOSURE(δ ({q0, q1, q2}, 0))

= ε-CLOSURE(δ (q0, 0) ∪ δ (q1, 0) ∪ δ(q2, 0))

= ε-CLOSURE({q0} ∪ ∅ ∪ ∅ )

= ε-CLOSURE({q0}) = {q0, q1, q2}

và δ*(q0, 01) = ε-CLOSURE(δ(δ*(q0, 0), 1))

= ε-CLOSURE(δ ({q0, q1, q2}, 1)) = ε-CLOSURE(δ
(q0, 1) ∪ δ (q1, 1) ∪ δ (q2, 1)) = ε-CLOSURE(∅ ∪ {q1}
∪ ∅) = ε-CLOSURE({q1}) = {q1, q2}

×