Đáp án đề thi Automata và ngôn ngữ hình thức
Câu 1:
a. Định nghĩa văn phạm chính quy và cho ví dụ?
* Định nghĩa:
Văn phạm chính quy (hay còn gọi là văn phạm loại 3 theo phân loại Chomsky) là văn phạm có
cấu trúc G gồm 4 thành phần G = (N, T, S, P), trong đó:
+ N: là tập các biến. Ví dụ: A, B, C,
+ T: là tập ký hiệu kết thúc (T N = ). Ví dụ: a, b, c,
+ S: là ký hiệu bắt đầu (start; S N).
+ P là tập luật sinh. Mỗi luật sinh trong P đều có dạng tuyến tính trái: A > wB | w hoặc có
dạng tuyến tính phải A > Bw | w với w là xâu ký tự thuộc T.
Ví dụ:
Văn phạm G = (N, T, S, P)
N = {S, A},
T = {a, b}
S = {S}
P: S > aS| aA|a
A -> aA| a| b
b. Cho văn phạm G = (N, T, S, P)
P: S −−> aSa | aa
Cho biết ngôn ngữ của văn phạm trên? Văn phạm trên là văn phạm gì? Tại sao?
* Ngôn ngữ của văn phạm
Xét một suy dẫn của S ta có:
S > aSa > aaSaa > aaaaaa = a
6
=> L(G) = {a
n
| n >= 2}
* Văn phạm trên là văn phạm phi ngữ cảnh hay văn phạm loại 2 theo phân loại văn phạm Chomsky
vì: văn phạm có cấu trúc G gồm 4 thành phần G = (N, T, S, P), trong đó:
+ N: là tập các biến. Ví dụ: A, B, C,
+ T: là tập ký hiệu kết thúc (T N = ). Ví dụ: a, b, c,
+ S: là ký hiệu bắt đầu (start; S N).
+ P là tập luật sinh. Mỗi luật sinh trong P đều có dạng tuyến tính trái: A > với A là một
biến và là xâu ký tự thuộc (N T)*
S > aSa => A = S; = aSa
S > aa => A = S; = aa
Câu 2:
a, Xây dựng FA đoán nhận xâu chỉ chứa 0, 1 và có 00 bắt đầu. Kiểm nghiệm xâu w = 00101 có
được đoán nhận bởi FA vừa xây dựng?
* Xây dựng FA
FA đoán nhận xâu chỉ chứa 0, 1 và có 00 bắt đầu
=> L(M) = {00w | w (0, 1)*}
Để xây FA thỏa mãn điều kiện, ta có nhận xét sau:
- Nếu xâu bắt đầu là 1 thì FA không đoán nhận xâu.
- Nếu xâu bắt đầu là 0 và ký tự thứ 2 là 1 thì FA không đoán nhận xâu.
- Nếu xâu bắt đầu bởi 00 thì FA đoán nhận mặc dù các ký hiệu sau xâu là 0 hay 1
Từ các nhận xét trên ta có thể xây dựng các hàm chuyển đổi như sau:
- δ(q0, 1) =
- δ(q0, 0) = q1
δ(q1, 1) =
- δ(q0, 0) = q1
δ(q1, 0) = q2
δ(q2, 0) = q2
δ(q2, 1) = q2
Vậy ta có FA như sau:
M = (Q, Σ, , q0, F)
0 1
-> q0 q1
q1 q2
* q2 q2 q2
* Kiểm nghiệm xâu w = 00101
(q0, 0) = q1
(q1, 0) = q2
(q2, 1) = q2
(q2, 0) = q2
(q2, 1) = q2
q2 F => w = 00101 L(M)
b. Cho NFA M = (Q, Σ, δ, q0, F)
a b
−−>q0
{q0, q1}
*q1 q1 q0
Xây dựng DFA tương đương
Gọi M’ = (Q’, Σ, ’, q0’, F’) là DFA tương đương cần xây dựng
Áp dụng thuật toán chuyển đổi NFA sang DFA, ta có
Q’ = {q0}
’ = φ
’(q0, a) = (q0, a) = [q0, q1]
=> Q’ = {q0. [q0, q1]}
’ = { ’(q0, a)}
’(q0, b) = (q0, b) =
=> Q’ = {q0. [q0, q1]}
’ = { ’(q0, a)}
’([q0, q1], a) = (q0, a) (q1, a) = [q0, q1]
=> Q’ = {q0. [q0, q1]}
’ = { ’(q0, a); ’([q0, q1], a)}
’([q0, q1], b) = (q0, b) (q1, b) = q0
=> Q’ = {q0. [q0, q1]}
’ = { ’(q0, a); ’([q0, q1], a); ’([q0, q1], b)}
F’ = F Q’ = {[q0, q1]}
Vậy DFA cần xây dựng là M’ = (Q’, Σ, ’, q0’, F’)
a b
−−>q0
[q0, q1]
*[q0, q1] [q0, q1] q0
Đặt A = q0; B = [q0, q1] => DFA M’ = (Q’, Σ, δ’, q0’, F’) là
a b
−−>A
B
*B B A
c. Xây dựng FA đoán nhận biểu thức chính quy: r = (01 + 1)*1
* Phân tích r:
r = (01 + 1)*1 = r1r2 với r1 = (01 + 1)* và r2 = 1
r1 = r3* với r3 = (01 + 1)
r3 = r4 + r5 với r4 = 01 và r5 = 1
r4 = r6r7 với r6 = 0 và r7 = 1
* Xây dựng FA
- r6 = 0:
- r7 = 1
- r4 = r6r7:
- r5 = 1:
- r3 = r4 + r5:
- r1 = r3*
- r2 = 1:
r = r1r2:
Câu 3:
Cho G = (N, T, S, P)
P: S −−> bA | A | AB
A −−> AAa | b
B −−> BBb | BA
Đưa văn phạm về dạng chuẩn Chomsky
Gọi G’ = (N’, T, S, P’) là văn phạm ở chuẩn Chomsky
1. Loại bỏ luật sinh rỗng
Không có luật sinh rỗng
2. Loại bỏ luật sinh đơn vị
- Ta có:
S
= {S, A}=> Thêm vào P’ các luật sinh sau:
S > bA | AAa | b | AB
- Ta có
A
= {A}=> Thêm vào P’ các luật sinh sau:
A > AAa | b
- Ta có
B
= {B}=> Thêm vào P’ các luật sinh sau:
B > BBb | BA
=> P’:
S > bA | AAa | b | AB
A > AAa | b
B > BBb | BA
3. Loại bỏ ký hiệu vô ích
3.1. Loại bỏ ký hiệu vô sinh
Gọi N
kvs
là tập ký hiệu không vô sinh => N
kvs
=
S > b => N
kvs
= {S}
A > b => N
kvs
= {S, A}
=> Tập ký hiệu vô sinh là: N/N
kvs
= {B} => Loại ký hiệu B bằng cách loại bỏ các luật liên quan tới B.
=> P’:
S > bA | AAa | b
A > AAa | b
3.2. Loại bỏ ký hiệu không đạt đến được
Gọi N
dd
là tập ký hiệu đạt đến được => N
dd
= {S}
S > bA và A > b => Ndd = {S, A}
=> Không có ký hiệu không đạt đến được
=> P’ sau khi loại bỏ ký hiệu vô ích là:
S > bA | AAa | b
A > AAa | b
4. Chuẩn hóa
S > bA => S > C
b
A
C
b
> b
S > AAa => S > DC
a
D > AA
C
a
> a
A > AAa => A > EC
a
E > AA
C
a
> a
=> P’ sau chuẩn hóa:
S > C
b
A | DC
a
| b
D > AA
C
b
> b
C
a
> a
A > EC
a
| b
E > AA.
Vậy, G’ = (N’, T, S, P’) ở chuẩn Chomsky
N’ = {S, A}
T = {b}
S = {S}
P’:
S > C
b
A | DC
a
| b
D > AA
C
b
> b
C
a
> a
A > EC
a
| b
E > AA.
Thứ 7, ngày 28 - 11 - 2009