HỌC VIỆN KỸ THUẬT QUÂN SỰ KHOA CÔNG NGHỆ THÔNG TIN ========== BÀI TẬP LỚN: AUTOMAT VÀ NGƠN NGỮ HÌNH THỨC ĐỀ TÀI: GIAO VÀ HIỆU CỦA DFA Nhóm thực đề tài: Đơn vị : Lớp Tin học 44 Giáo viên hướng dẫn: Hà Nội : 07/2011 MỤC LỤC ĐẶT VẤN ĐỀ Lý thuyết ngơn ngữ hình thức automata đóng vai trị quan trọng sở tốn học tin học Ngơn ngữ hình thức sử dụng việc xây dựng ngơn ngữ lập trình, lý thuyết chương trình dịch Các ngơn ngữ hình thức tạo thành cơng cụ mơ tả mơ hình tính tốn cho dạng thơng tin vào-ra lẫn kiểu thao tác Lý thuyết ngơn ngữ hình thức, thực chất lĩnh vực khoa học liên ngành; nhu cầu mơ tả hình thức văn phạm phát sinh nhiều ngành khoa học khác từ ngôn ngữ học đến sinh vật học Như biết, ngơn ngữ hình thức chương trình dịch môn phát triển sớm so với ngành khác khoa học máy tính, khối lượng kiến thức môn đồ sộ Ở nước ta nay, có nhiều trường đại học bắt đầu giảng dạy môn học cho sinh viên ngành Công nghệ thông tin Để hiểu rõ ngơn ngữ hình thức automata, nội dung tập lớn này, chúng em xin trình bày vấn đề về: hiệu giao hai DFA Chúng em chia đề tài làm phần : Tìm hiểu DFA Tìm hiểu giao hiệu DFA Chương trình minh họa Trong suốt trình làm, với cố gắng thành viên nhóm với ý kiến đóng góp bạn bè, hướng dẫn thầy giáo tham khảo tài liệu khác, chúng em hoàn thành nội dung đề Tuy nhiên, kỹ kiến thức cịn có hạn nên nội dung chương trình khơng thể tránh khỏi sai sót Chúng em hy vọng nhận nhiều đóng góp từ phía thầy bạn bè để chương trình hồn thiện hơn! Chúng em xin chân thành cảm ơn! PHẦN 1: AUTOMAT HỮU HẠN ĐƠN ĐỊNH DFA Giới thiệu Một ôtômát hữu hạn đơn định (DFA) gồm tập hữu hạn trạng thái tập phép chuyển từ trạng thái tới trạng thái khác ký hiệu nhập (input symbols) chọn từ chữ Σ Mỗi ký hiệu nhập có phép chuyển khỏi trạng thái (có thể chuyển trở nó) Một trạng thái, thường ký hiệu q0, gọi trạng thái bắt đầu (trạng thái ôtômát bắt đầu) Một số trạng thái thiết kế trạng thái kết thúc hay trạng thái chấp nhận Một đồ thị có hướng, gọi sơ đồ chuyển (transition diagram) tương ứng với DFA sau: đỉnh đồ thị trạng thái DFA; có đường chuyển từ trạng thái q đến trạng thái p input a có cung nhãn a chuyển từ trạng thái q đến trạng thái p sơ đồ chuyển DFA chấp nhận chuỗi x tồn dãy phép chuyển tương ứng ký hiệu x dẫn từ trạng thái bắt đầu đến trạng thái kết thúc Chẳng hạn, sơ đồ chuyển DFA mơ tả hình Trạng thái khởi đầu q0 mũi tên có nhãn "Start" Chỉ có trạng thái kết thúc, q0 trường hợp này, hai vịng trịn Ơtơmát chấp nhận tất chuỗi số số với số số số số số chẵn Hình - Sơ đồ chuyển DFA Một điều cần lưu ý, DFA sử dụng trạng thái để giữ phần chuỗi số khơng phải chứa số thực sự, DFA cần dùng số hữu hạn trạng thái Định nghĩa Một cách hình thức ta định nghĩa ơtơmát hữu hạn gồm năm thành phần (Q, Σ, δ, q0, F), : Q tập hợp hữu hạn trạng thái Σ chữ nhập hữu hạn δ hàm chuyển ánh xạ từ Q × Σ → Q, tức δ(q, a) trạng thái cho phép chuyển từ trạng thái q ký hiệu nhập a q0 ∈ Q trạng thái bắt đầu F ⊆ Q tập trạng thái kết thúc Hàm chuyển trạng thái mở rộng Để mơ tả cách hình thức hoạt động DFA chuỗi, ta mở rộng hàm chuyển δ để áp dụng trạng thái chuỗi trạng thái ký hiệu Ta định nghĩa hàm chuyển δ ánh xạ từ Q × Σ* → Q với ý nghĩa δ(q, w) trạng thái DFA chuyển đến từ trạng thái q chuỗi w Một cách hình thức, ta định nghĩa : δ (q, ε) = q δ (q, wa) = δ(δ (q, w), a), với chuỗi w ký hiệu nhập a Một số quy ước ký hiệu : Q tập trạng thái Ký hiệu q p (có khơng có số) trạng thái, q0 trạng thái bắt đầu - Σ chữ nhập Ký hiệu a, b (có khơng có số) chữ số ký hiệu nhập - δ hàm chuyển - F tập trạng thái kết thúc - w, x, y z (có khơng có số) chuỗi ký hiệu nhập - PHẦN 2: GIAO VÀ HIỆU CỦA DFA Giao DFA 1.1 Định nghĩa L1 Ç L2 = {x | x Ỵ L1 and x Ỵ L2} Ví dụ : – L1 = {0x | x Ỵ {0,1}*} chuỗi bắt đầu – L2 = {x0 | x Ỵ {0,1}*} chuỗi kết thúc – L1 Ç L2 = {x Ỵ {0,1}* | x bắt đầu kết thúc 0} 1.2 Cách thực Ta có ví dụ sau : Kết : Chú ý : Trạng thái giao la kết thúc hai trạng thái thành phần trạng thái kết thúc Hiệu DFA 2.1 Định nghĩa L1 - L2 = {x | x Ỵ L1 and x Ỵ L2} Ví dụ : – L1 = {0x | x Ỵ {0,1}*} chuỗi bắt đầu – L2 = {x0 | x Ỵ {0,1}*} chuỗi kết thúc bng L1 ầ L2 = {0x1| x ẻ {0,1}*} chuỗi bắt đầu kết thúc khác Chỳ ý : L1-L2=L1ầ ( ẻL}) 2.2 Cỏch xõy dựng 1- Tính phần bù L2 ví dụ sau: Trạng thái kết thúc chuyển thành trạng thái khơng kết thúc ngược lại 2Tính giao phần bù L2 L1 theo cách trình bày PHẦN : CHƯƠNG TRÌNH MINH HỌA Giao diện CODE chương trình 2.1 Hàm tạo DFA private void btnTao1_Click(object sender, EventArgs e) { if (txtKiTu1.Text == "" || cbTrangThai1.Text == "") { MessageBox.Show("nhập đủ thông tin DFA1"); return; } if (txtKiTu1.Text.Length > 2) { MessageBox.Show("số kí tự chuyển nhỏ 3"); return; } kiemtra1 = true; pnKetThuc1.Controls.Clear(); pnTrangThai1.Controls.Clear(); pnDFA1.Controls.Clear(); pnDFA2.Controls.Clear(); pnGiao.Controls.Clear(); pnHieu.Controls.Clear(); //tao trang thai ket thuc soTrangThai1 = Convert.ToInt16(cbTrangThai1.Text); for (int i = 0; i < soTrangThai1; i++) { CheckBox cb = new CheckBox(); cb.Name = "cb1" + i; cb.Text = " p" + i; cb.Width = 50; if (i < 2) cb.Location = new Point(10, (i +1) * 20); else cb.Location = new Point(100, (i - 1) * 20); pnKetThuc1.Controls.Add(cb); } //tao bang chuyen trang thai kituchuyen1 = txtKiTu1.Text; for (int i = 0; i