Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 23 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
23
Dung lượng
539,59 KB
Nội dung
Tiểu luận NNHT và Automata
Mục lục:
Phần mở đầu
Mục đích của việc giải quyết đồ án được giao:
Qua việc viết chương trình kiểm tra 2 DFA có tươngđương nhau không
giúp chúng ta trả lời cho câu hỏi 2 DFA khác nhau có biểu diễn cùng một
ngôn ngữ chính quy không? Vì khi 2 DFA cùng biểu diễn một ngôn ngữ thì ta
nói 2 DFA là tương đương. Từ vấn đề này, chúng ta sẽ có hướng mở rộng cho
việc cực tiểu hóa DFA: tức là xây dựng DFA có tối thiểu số trạng thái tương
đương với một DFA cho trước.
Đồng thời, việc thực hiện đồ án giúp ta củng cố một phần lý thuyết môn
học Automata và ngôn ngữ hình thức, nâng cao kỹ năng lập trình hướng đối
tượng cho bản thân.
Các vấn đề cần giải quyết với đề tài “kiểm tra 2 DFA tương đương”:
• Thực hiện mọi thao tác nhập và xử lý dữ liệu trên form chương trình.
• Từ số trạng thái và kí tự nhập vào ở Textbox cho hiển thị bảng
chuyển trạng thái trên Panel.
Page 1
Tiểu luận NNHT và Automata
• Hiển thị đồ thị chuyển trạng thái của DFA vừa nhập.
• Lưu kết quả ở dạng ma trận {0,1} sau đó sử dụng 2 ma trận đã lưu
để kiểm tra tính tươngđương của 2 ma trận DFA đó.
Phần 1: Cơ sở lý thuyết
I.1.Giới thiệu vềautomata hữu hạn (FA):
Automata là một mô hình toán học hay máy trừu tượng có cơ cấu và hoạt động đơn
giản nhưng có khả năng đoán nhận ngôn ngữ.
Một finite automata (FA) là một mô hình tính toán hữu hạn: mọi cái liên quan
đến nó đều có kích thước hữu hạn cố định và không thể mở rộng trong suốt quá
trình tính toán;
Một FA làm việc theo thời gian rời rạc (time steps);
Nói chung, thông tin ra sản sinh bởi một FA phụ thuộc vào cả thông tin vào hiện
tại lẫn các thông tin vào trước đó. Nếu sử dụng bộ nhớ (memory), giả sử rằng nó
có ít nhất một bộ nhớ vô hạn về tiềm năng;
Sự phân biệt giữa các loại automata khác nhau chủ yếu dựa trên việc thông tin có
thể được đưa vào memory hay không;
Page 2
Tiểu luận NNHT và Automata
I.2.Automata hữu hạn đơn định DFA:
*Định nghĩa : một DFA là một bộ năm:
A=(Q, Σ, δ, q
0
, F)
Trong đó:
Q : tập khác rỗng, tập hữu hạn các trạng thái (p, q…);
Σ : bộ chữ cái nhập vào (a, b, c …);
δ : D→ Q, hàm chuyển (hay ánh xạ), D ⊆ Q × Σ, có nghĩa là δ(p, a) =q hoặc δ(p, a)
= Ø, trong đó p, q Q , a Σ;
q
0
Q : trạng thái bắt đầu (start state);
F ∈ Q : tập các trạng thái kết thúc (finish states).
Trong trường hợp D = Q × Σ ta nói A là một DFA đầy đủ.
• Biểu diễn automata: Cho một automata thực chất là cho hàm chuyển trạng thái
của nó, có thể cho dưới dạng bảng chuyển trạng thái hoặc cho dưới dạng đồ
thị chuyển.
• Đồ thị chuyển là một đa đồ thị có hướng (có thể có khuyên) G: Tập đỉnh của
G được gán nhãn bởi các phần tử thuộc Q, các cung được gán nhãn bởi các
phần tử thuộc Σ, nếu a ∈ Σ, p,q ∈ Q và δ(q, a) = p thì sẽ có một cung từ
đỉnh q tới đỉnh p được gán nhãn a. Đỉnh vào của đồ thị chuyển ứng với trạng
thái ban đầu q
0
.
• Bảng chuyển – bảng có kích cỡ |Q| × |Σ|, trong đó dòng i cột j của bảng là
hoặc bỏ trống.
• Ví dụ DFA: Cho automata A = ({q
0
; q
1
; q
2
}; {0, 1},δ, q
0
, {q
1
}) với hàm
chuyển được cho dưới dạng bảng chuyển và đồ thị chuyển như sau:
Ngôn ngữ được đoán nhận bởi automat A:
L = {1*0*01x : x ∈ {0, 1}*}
• Mở rộng của hàm chuyển:
Page 3
( )
,
i j
q a
δ
Tiểu luận NNHT và Automata
Mở rộng của một ánh xạ δ là δ’ biến đổi trạng thái, xâu sang trạng thái.
Có nghĩa là:
1. δ’(q, e) = q;
2. δ’(q, wa) = δ’(δ’(q,w), a) với " w, a.
( )
0
' ,q F
δ ω
∈
Chuỗi ω = a
1
a
2
a
n
được đoán nhận bởi DFA A (có nghĩa là
) nếu tồn tại một đường đi bắt đầu từ trạng thái đầu q
0
và kết thúc ở trạng
thái kết với dãy nhãn của đường đi là a
1
a
2
a
n
.
Ngôn ngữ được chấp nhận bởi một automata A:
L(A) = { x | δ’( q
0
, x ) Î F }
Các ngôn ngữ chấp nhận bởi automata hữu hạn đơn định được gọi là ngôn
ngữ chính quy.
• Thuật toán đoán nhận chuỗi:
S:= q
0
;
C:= ký hiệu tiếp theo của chuỗi;
while (C < > ε) do {
S:= δ(S, C);
C:= ký hiệu tiếp theo của chuỗi;
};
if (S in F) return (true);
else return (false);
I.3.Sự tươngđương của các trạng thái:
Mục đích của chúng ta là xác định xem hai trạng thái khác nhau p và q có thể
thay thế bởi một trạng thái duy nhất mà có chức năng như p và q.
Chúng ta nói rằng, hai trạng thái p và q là tươngđương nếu: với mọi xâu w,
δ
*
(p, w) cho kết quả là trạng thái kết thúc và δ
*
(q, w) cho kết quả cũng là trạng
thái kết thúc hoặc δ
*
(p, w) cho kết quả là trạng thái không kết thúc và δ
*
(q, w) cho
kết quả cũng là trạng thái không kết thúc.
Page 4
Tiểu luận NNHT và Automata
Lưu ý, chúng ta không yêu cầu δ
*
(p, w) và δ
*
(q, w) cho cùng trạng thái mà chỉ
cho kết quả cùng trạng thái kết thúc hoặc không kết thúc.
Ngược lại, hai trạng thái không tươngđương được gọi là phân biệt. Nghĩa là
trạng thái p phân biệt với trạng thái q, nếu tồn tại ít nhất một xâu w sao cho một
trong hai dịch chuyển δ
*
(p, w) và δ
*
(q, w) cho trạng thái kết thúc và dịch chuyển
còn lại cho trạng thái không kết thúc.
Để xác định sự tươngđương của các trạng thái, chúng ta sử dụng thuật toán
xây dựng bảng đánh dấu như sau:
Nếu p là trạng thái không kết thúc và q là trạng thái kết thúc thì {p, q} là cặp
trạng thái phân biệt.
Cho p và q là các trạng thái sao cho với kí hiệu vào a, r = δ (p, a) và
s= δ (q, a) là cặp trạng thái phân biệt. Khi đó {p, q} cũng là cặp trạng thái
phân biệt. Thật vậy, bởi vì {r, s} là cặp trạng thái phân biệt, nên tồn tại xâu w
phân biệt r và s, nghĩa là chỉ có một trong hai dịch chuyển δ
*
(r, w) và δ
*
(s, w) cho
kết quả là trang thái kết thúc, còn một dịch chuyển cho kết quả là trạng thái
không kết thúc. Khi đó, δ
*
(p, aw) và δ
*
(q, aw) cho cùng kết quả với δ
*
(r, w) và δ
*
(s,
w), nghĩa là {p, q} cũng là cặp trạng thái phân biệt bởi xâu aw.
Ví dụ: Xây dựng bảng đánh dấu của DFA trong hình vẽ
Trong bảng đánh dấu các trạng thái phân biệt, các cặp trạng thái phân biệt
được đánh dấu X, các cặp trạng thái tươngđương được để trống, các ô bôi đen
Page 5
Tiểu luận NNHT và Automata
không được sử dụng. Ban đầu, không có cặp nào bị đánh dấu. Chúng ta thực hiện
việc đánh dấu theo thuật toán đã trình bày ở trên.
Trước hết, các cặp trạng thái gồm có một trạng kết thúc và một trạng thái
không kết thúc được đánh dấu. Thực hiện bước 2 của thuật toán, chúng ta không
tìm thấy thêm cặp trạng thái phân biệt nào nữa
Bảng đánh dấu các cặp trạng thái phân biệt cho Ví dụ
I.4.Sự tươngđương của các DFA:
Ví dụ: Xét hai DFA, hai DFA này cùng đoán nhận ngôn ngữ gồm các xâu trên
bảng chữ {0, 1} kết thúc bởi kí hiệu 0.
Page 6
Tiểu luận NNHT và Automata
I.4.1.Dựa vào bảng đánh dấu sự tươngđương của các trạng thái:
Chúng ta dễ dàng xác định được sự tươngđương của hai DFA. Thật vậy, giả
sử có hai DFA M
1
và M
2
. Xét DFA mới là hợp của hai DFA M
1
và M
2
. Khi đó, DFA
này có hai trạng thái đầu. Tuy nhiên, nếu DFA M
1
và M
2
là tươngđương thì cặp
trạng thái đầu phải là cặp trạng thái tương đương. Ngược lại, nếu cặp trạng thái
đầu là cặp trạng thái phân biêt thì M
1
và M
2
là không tương đương.
Áp dụng thuật toán:
Chúng ta coi hai DFA như là một DFA với các trạng thái là A, B, C, D và E. Bây
giờ xây dựng bảng đánh dấu các trạng thái phân biệt của DFA này.
A và C là cặp trạng thi tương đương, vậy hai DFA là tương đương. Tức là
chúng cùng thừa nhận một ngôn ngữ.
I.4.2.Dựa vào tính đóng dưới phép giao:
Định lý: Nếu L
1
và L
2
là các ngôn ngữ chính quy thì L
1
∩ L
2
cũng là ngôn ngữ
chính quy
Chứng minh: Chúng ta xây dựng trực tiếp DFA thừa nhận ngôn ngữ L
1
∩ L
2
từ các DFA thừa nhận L
1
và L
2
.
Giả sử M
1
= (Q
1
, Σ
1
, δ
1
, q
01
, F
1
) và M
2
= (Q
2
, Σ
2
, δ
2
, q
02
, F
2
) là các DFA thừa nhận
tương ứng L
1
và L
2
. Chúng ta sẽ xây dựng DFA M bắt chước thực hiện đồng thời
Page 7
Tiểu luận NNHT và Automata
M
1
và M
2
. Mỗi trạng thái của M sẽ là một cặp trạng thái: một trạng thái của M
1
và
một trạng thái của M
2
. Bảng chữ của M sẽ là hợp của các bảng chữ của M
1
và M
2
.
Một dịch chuyển trong M được xây dựng tương ứng một dịch chuyển đồng thời
trên M
1
và M
2
khi đọc cùng một kí hiệu. M sẽ đoán nhận xâu vào khi đồng thời cả
hai DFA M
1
và M
2
cùng đoán nhận xâu vào. Như vậy, M được xây dựng như sau:
M=(Q
1
× Q
2
, Σ
1
∪ Σ
2
, δ, (q
01
, q
02
), F
1
× F
2
)
Trong đó, δ((p, q), a) = (δ1(p, a), δ2(q, a)), với p ∈ Q1, q∈ Q2, a ∈ Σ1∪ Σ2.
Dễ dàng nhận thấy rằng L(M) = L(M1) ∩ L(M2).
Thật vậy, δ
*
((q
01
, q
02
), w) = (δ
1
*
(q
01
, w), δ
2
*
(q
02
, w)), như thế M chỉ chấp nhận
w khi δ
1
*
(q
01
, w) ∈ F
1
và δ
2
*
(q
02
, w) ∈ F
2
, nghĩa là M chỉ chấp nhận w khi M
1
chấp
nhận w và M
2
chấp nhận w. Vậy chấp nhận L(M
1
) ∪ L(M
2
)
Ví dụ: Cho L
1
là ngôn ngữ chính quy có chứa ít nhất một kí hiệu 0 được thừa
nhận bởi DFA M
1
(a) và L
2
là ngôn ngữ chính quy có ít nhất một kí hiệu 1 được
thừa nhận bởi DFA M
2
(b). Chúng ta chỉ ra DFA M (c) thừa nhận ngôn ngữ giao
của L
1
và L
2
.
Page 8
Tiểu luận NNHT và Automata
DFA giao của hai DFA
Chúng ta dễ dàng nhận thấy rằng, DFA thừa nhận ngôn ngữ gồm it nhất một
kí hiệu 0 và ít nhất một kí hiệu 1.
*
Áp dụng thuật toán :
Để chứng minh hai DFA
1
L
và
2
L
tươngđương thì ta chứng minh như sau:
1
L
=
2
L
thì
1
L
∩
2
L
=
1
L
∩
2
L
= L(M) = ∅.
Automat DFA rỗng: Nếu không tồn tại một đương đi từ trạng thái đầu đến
một trong các trạng thái cuối thì là rỗng, ngược lại thì không rỗng.
Áp dụng cho Ví dụ:
Page 9
Tiểu luận NNHT và Automata
DFA biểu diễn
1
L
A
DFA biểu diễn
2
L
C D
DFA biểu diễn
2
L
E
Page
10
B
E
D
C
[...]...Tiểu luận NNHT và Automata DFA biểu diễn L1 L2 ∩ = L(M) A,D B,E B,C B,D A,C A,E Ta thấy L(M) là một Automat rỗng vì không tồn tại đương đi nào từ (A, C) đến (A, E) Tương tự ta có L(M)= Suy ra hai DFA L1 L2 , L1 ∩ L2 cũng rỗng tươngđương Page 11 Tiểu luận NNHT và Automata Phần II: Chương trình II.1.Cấu trúc chương trình: Chương trình được viết... thúc Trong các vòng tròn là tên các trạng thái tương ứng Các mũi tên chỉ hướng chuyển của trạng thái, ở trên là các kí hiệu nhập vào Page 13 Tiểu luận NNHT và Automata II.2.Sơ đồ khối giải quyết bài toán: Bắt đầu false Nhập DFA1 và DFA2 true Gán bảng chuyển trạng thái bằng ma trận {0,1} So sánh hàng đầu của 2 ma trận trên Kết quả Page 14 Tiểu luận NNHT và Automata II.3.Giao diện chính của chương trình:... chkStatus.Checked; Page 21 Tiểu luận NNHT và Automata DT_TrangThai.Rows.Add(row1); DrawingDFA draw = new DrawingDFA(); draw.strChuCai= strChuCai; draw.SoTrangThai = So_TrangThai_Nhap; draw.DT_diagram = DT_diagram; draw.DT_TrangThai =DT_TrangThai; draw.Show(); } } } Page 22 Tiểu luận NNHT và Automata “Phần III: Tài liệu tham khảo 1.Tài liệu slide bài giảng “Ngôn ngữ hình thức và Automata của thầy Hà Chí Trung -... ta sẽ có được kết quả so sánh cho 2 DFA vừa nhập xem chúng có tươngđương hay không Chỉ mục Thoát dùng để thoát khỏi chương trình II.1.2.Cấu trúc của Form Tao_DFA: Gồm 2 textbox Các chữ cái nhập vào và Số trạng thái, 4 button Tao DFA, Lưu, Đồ thị, Thoát, 2 panel Trạng thái kết thúc và Sơ đồ chuyển dịch trạng thái Page 12 Tiểu luận NNHT và Automata Sau khi nhập Các chữ cái nhập vào (dãy kí tự liền nhau)... Hình 1.1: Màn hình giao diện khởi động Page 15 Tiểu luận NNHT và Automata Hình 1.2: Màn hình giao diện Menu II.3.2.Màn hình giao diện tạo DFA: Hình 2: Màn hình nhập DFA II.3.3.Màn hình giao diện đồ thị DFA Page 16 Tiểu luận NNHT và Automata Hình 3: Màn hình đồ thị chuyển trạng thái II.3.4.Màn hình giao diện kết quả: Page 17 Tiểu luận NNHT và Automata Hình 4.1 và 4.2: MÀn hình kết quả so sánh 2 DFA II.4.Phụ... là số trạng thái có trong DFA và các kí tự được nhập vào của DFA đó Click button Tao DFA để chuyển dữ liệu đó về 2 panel Trạng thái kết thúc và Sơ đồ chuyển dịch trạng thái, khi đó mà hình hiển thị tập các trạng thái kết thúc và bảng chuyển trạng thái của DFA Khi đã điền đầy đủ thông tin của tập các trạng thái kết thúc và bảng chuyển trạng thái, click button Đồ thị để mở ra form mới hiển thị đồ thị... luận NNHT và Automata //delta[i,j] = new string(); ComboBox cboStatus = (ComboBox)this.Controls.Find("cboStatus" + i + "_" + j, true)[0]; Delta[i, j] = cboStatus.Text; for (int k = 0; k < Check; k++) { if (Delta[i, j] == Final[k]) So01[i, j] = 0; else So01[i, j] = 1; } } } } } private void btnThoat_Click(object sender, EventArgs e) { if (MessageBox.Show("Bạn có muốn thoát hay không ?", "Thông báo" , MessageBoxButtons.YesNo)... { Label lblStatus = new Label(); lblStatus.Text = "Q" + (i - 1); lblStatus.Width = 35; lblStatus.Location = new Point(20, 25); grpMatrixLocal.Controls.Add(lblStatus); } else Page 19 Tiểu luận NNHT và Automata { ComboBox cboStatus = new ComboBox(); cboStatus.Name = "cboStatus" + (i - 1) + "_" + (j 1); cboStatus.Items.Add(""); for (int k = 0; k < So_TrangThai_Nhap; k++) cboStatus.Items.Add("Q" + k);... dạng ma trận {0,1} với 0 là kí hiệu cho trạng thái kết thúc, 1 là kí hiệu cho trạng thái không kết thúc Click button Thoát dùng để thoát khỏi form Tao_DFA II.1.3.Cấu trúc của Form DrawingDFA: Từ số liệu về các trạng thía kết thúc cũng như bảng chuyển trạng thái đã nhập ở form Tao_DFA, sau khi click button Đồ thị ta sẽ mở form DrawingDFA với giao diện là sơ đồ trạng thái của DFA vừa nhập: - Vòng tròn đơn... public Tao_DFA() { InitializeComponent(); } public public public public public int Check = 0; int SoTrangThai = 0; string[] Final = new string[12]; string[,] Delta; char[] ChuCai; Page 18 Tiểu luận NNHT và Automata public string strChuCai = ""; public int So_TrangThai_Nhap = 0; public int[,] So01; //Tao DFA public void btnTaoDFA_Click(object sender, EventArgs e) { if(txtSotrangthai.Text==""||txtNhapchucai.Text=="") . M 1 và M 2 là tương đương thì cặp trạng thái đầu phải là cặp trạng thái tương đương. Ngược lại, nếu cặp trạng thái đầu là cặp trạng thái phân biêt thì M 1 và M 2 là không tương đương. Áp dụng. tại đương đi nào từ (A, C) đến (A, E). Tương tự ta có L(M)= 1 L ∩ 2 L cũng rỗng. Suy ra hai DFA 1 L , 2 L tương đương. Page 11 A,D B,E B,C B,D A,C Tiểu luận NNHT và Automata Phần. nhớ vô hạn về tiềm năng; Sự phân biệt giữa các loại automata khác nhau chủ yếu dựa trên việc thông tin có thể được đưa vào memory hay không; Page 2 Tiểu luận NNHT và Automata I.2 .Automata hữu