1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Automata ngôn ngữ hình thức

24 13 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

LỜI NÓI ĐẦU Đối với người làm tin học, ngôn ngữ phần thiếu cơng việc Để hiểu sâu sắc ngơn ngữ lập trình (giải thuật cú pháp) khơng thể khơng ngiên cứu ngơn ngữ hình thức, văn phạm Outomat Cũng Ngơn Ngữ Hình Thức đưa vào làm môn học cho tất sinh viên công nghệ thông tin Trong đề tài chúng em xin trình bày thương automat hữu hạn đơn định Chúng em chia đề tài làm phần : Tìm hiểu DFA Tìm hiểu thương DFA Chương trình minh họa Trong suốt trình làm BÀI TẬP LỚN, với cố gắng thành viên nhóm Chúng em hoàn thành BÀI TẬP LỚN Tuy nhiên 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 để chương trình hoàn thiện hơn! Qua chúng em muốn gửi lời cám ơn đến thầy Trần Hùng Cường tận tình hướng dẫn giúp đỡ chúng em hoàn thành tập lớn Chúng em xin chân thành cảm ơn! MỤC LỤC LỜI NÓI ĐẦU .3 MỤC LỤC PHẦN 1: ÔTÔMÁT HỮU HẠN ĐƠN ĐỊNH Giới thiệu Định nghĩa Hàm chuyển trạng thái mở rộng Ngôn ngữ chấp nhận DFA PHẦN 2: PHÉP THƯƠNG ĐÚNG CỦA DFA .11 Giới thiệu 11 Bổ đề 11 Định lý .11 PHẦN : CHƯƠNG TRÌNH MINH HỌA 13 Giao diện 13 1.1 Giao diện khởi động 13 1.2 Giao diện giới thiệu 14 1.3 Giao diện nhập M1 16 1.4 Giao diện nhập M2 18 1.5 Giao diện kết thương DFA M1/M2 20 CODE chương trình .21 2.1 Hàm tạo DFA .21 2.2 Hàm vẽ sơ đồ DFA vừa tạo 22 2.3 Hàm lưu lại DFA vừa tạo 23 2.4 Hàm kiểm tra hợp lệ DFA 23 2.5 Hàm tính thương hai DFA 24 TÀI LIỆU THAM KHẢO 26 PHẦN 1: ÔTÔMÁT HỮU HẠN ĐƠN ĐỊNH DFA (Deterministic Finite Automata) 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 Ta vẽ DFA điều khiển hữu hạn, với trạng thái thuộc Q, DFA đọc chuỗi ký hiệu a từ Σ viết băng (như hình vẽ) Hình - Mơ tả DFA Trong lần chuyển, DFA trạng thái q đọc ký hiệu nhập a băng, chuyển sang trạng thái xác định hàm chuyển δ(q, a), dịch đầu đọc sang phải ký tự Nếu δ(q, a) chuyển đến trạng thái kết thúc DFA chấp nhận chuỗi viết băng input phía trước đầu đọc, khơng bao gồm ký tự 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 băng, DFA chấp nhận tồn chuỗi băng 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 trên) trạng thái DFA chuyển đến từ trạng thái q chuỗi w) trạng thái DFA chuyển đến từ trạng thái q Một cách hình thức, ta định nghĩa : δ (q, ε) = q δ (q, w) trạng thái DFA chuyển đến từ trạng thái q trêna) = δ(δ (q, w) trạng thái DFA chuyển đến từ trạng thái q trên), a), với chuỗi w) trạng thái DFA chuyển đến từ trạng thái q 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) trạng thái DFA chuyển đến từ trạng thái q trên, x, y z (có khơng có số) chuỗi ký hiệu nhập Ví dụ : Ta xét ví dụ sau để hiểu rõ vấn đề : Cho Ôtomat hữu hạn đơn định M có : Q = {q0, q1} ∑ = {a,b} F = {q1} Và hàm chuyển đổi sau : δ(q0, a) = q1 δ(q0, b) = q0 δ(q1, a) = q1 δ(q1, b) = q0 Sau chuyển đổi miêu tả hoạt động M xâu đầu vào aba q0aba → q1ba → q0a → q1 Ta có xâu aba đốn nhận Ơtomat M Sau hình miêu tả thay đổi hình trạng M xử lí xâu trên: Hình sau minh họa cho q trình chuyển đổi trạng thái M: Ngơn ngữ chấp nhận DFA Một chuỗi w) trạng thái DFA chuyển đến từ trạng thái q chấp nhập ôtômát hữu hạn M (Q, Σ, δ, q0, F) δ(q0, w) trạng thái DFA chuyển đến từ trạng thái q trên) = p với p F Ngôn ngữ chấp nhận M, ký hiệu L(M) tập hợp: L(M) = { w) trạng thái DFA chuyển đến từ trạng thái q | δ (q0, w) trạng thái DFA chuyển đến từ trạng thái q trên)  F } Ví dụ : Xét sơ đồ chuyển hình Theo khái niệm hình thức, ta có DFA xác định M (Q, Σ, δ, q0, F) với Q = {q0, q1, q2, q3}, Σ = {0, 1}, F = {q0} hàm chuyển δ sau: Giả sử chuỗi w) trạng thái DFA chuyển đến từ trạng thái q = 110101 nhập vào M Ta có δ(q0, 1) = q1 δ(q1, 1) = q0 ,vậy δ(q0, 11) = δ(δ(q0,1),1) = δ(q1, 1) = q0 Tiếp tục δ(q0, 0) = q2, δ(q0, 110) = δ(δ(q0, 11), 0) = q2 Tiếp tục ta có δ(q0, 1101) = q3, δ(q0, 11010) = q1 Và cuối δ(q0, 110101) = 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 chứng minh L(M) tập chuỗi có số chẵn số số chẵn số Theo mô tả DFA trên, ta thấy dùng bảng hàm chuyển (transition table) để mơ tả phép chuyển trạng thái ôtômát hữu hạn Trong bảng hàm chuyển, hàng chứa trạng thái thuộc tập trạng thái ôtômát cột ký hiệu thuộc chữ nhập Bảng hàm chuyển gợi ý cho cấu trúc liệu để mô tả cho ôtômát hữu hạn, đồng thời cho thấy dễ dàng mơ hoạt động DFA thơng qua chương trình máy tính, chẳng hạn dùng cấu trúc vòng lặp Giải thuật mơ hoạt động DFA Mục đích: kiểm tra chuỗi nhập x có thuộc ngơn ngữ L(M) đýợc chấp nhận automata M Input: chuỗi nhập x$ Output: câu trả lời ‘YES’ ‘NO’ Giải thuật: q := q0 ; c := nextchar ; {c ký hiệu nhập đọc tiếp theo} While c $ begin q := δ(q, c);q, c); c := nextchar ; end If (q, c);q in F) then write(q, c);"YES") else write(q, c);"NO"); Nhận xét : Một cách tổng quát, ta thấy tập Q DFA thể trạng thái lưu trữ ơtơmát q trình đốn nhận ngôn ngữ, khả lưu trữ ôtômát hữu hạn Mặt khác, hàm chuyển δ hàm toàn phần đơn trị, bước chuyển ôtômát luôn xác định cách Chính hai đặc điểm mà DFA mô tả gọi ôtômát hữu hạn đơn định 10 PHẦN 2: PHÉP THƯƠNG ĐÚNG CỦA DFA Giới thiệu Cho w) trạng thái DFA chuyển đến từ trạng thái q trên, v thuộc Σ* thương (right quotient) w) trạng thái DFA chuyển đến từ trạng thái q cho v kí hiệu định nghĩa w) trạng thái DFA chuyển đến từ trạng thái q trên/v = u w) trạng thái DFA chuyển đến từ trạng thái q = uv, nghĩa v tiếp vĩ ngữ w) trạng thái DFA chuyển đến từ trạng thái q w) trạng thái DFA chuyển đến từ trạng thái q trên/v tiếp đầu ngữ tương ứng w) trạng thái DFA chuyển đến từ trạng thái q Cho L L ngôn ngữ bảng chữ giống nhau, thương L với L định nghĩa là: L /L = {w) trạng thái DFA chuyển đến từ trạng thái q trên/v: w) trạng thái DFA chuyển đến từ trạng thái q  L,v  L } = {x : xy  L với y  L } Nói cách khác, chuỗi L1 có tiếp vĩ ngữ L2, loại bỏ tiếp vĩ ngữ kết chuỗi ký tự L1 / L2 Bổ đề Cho M1 = (Q,Σ, δ ,q, F ) dfa cho L.Nếu trạng thái q  Q có tính chất tồn chuỗi y  L cho δ*(q,y)  F  x mà δ *(q,x) = q, x  L /L Và thay trạng thái kết thúc M trạng thái q có tính chất ta có DFA mà chấp nhận L/L Định lý Nếu L L NNCQ, L/L qui Chúng ta nói họ NNCQ đóng phép thương Chứng minh Cho L1 = L(M) M = (Q, Σ, δ, q,F) dfa Ta xây dựng dfa =( Q, Σ, δ, q, ), chấp nhận L/L ,bằng 11 cách thay đổi tập F thông qua thủ tục sau Thủ tục: Right quotient Input: dfa M = (Q, Σ, δ,q,F ) dfa M = (P, Σ, δ,p,F ) Output: dfa = (Q, Σ, δ, q, ) Ta xác định cách xác định với qi  Q, có tồn hay không chuỗi y thuộc L2 cho δ*(qi, y)  F Nếu đưa qi vào Điều thực cách xét dfa: Mi= (Q,Σ, δ, q,F) M trạng thái khởi đầu q thay q Rồi xét xem L ∩ L(M ) có ≠ ∅ khơng Nếu khác qi có tính chất nói thêm qi vào Thực điều với q thuộc Q, ta xác định xây dựng Ví dụ : Tìm L1/L2 cho L1 = L(a*baa*) L2 = L(ab*) 12 PHẦN 3: CHƯƠNG TRÌNH MINH HỌA Giao diện 1.1 Giao diện khởi động - Khi chương trình bắt đầu chạy xuất giao diện Hình 1: Giao diện khởi động 13 1.2 Giao diện giới thiệu - Khi chương trình khởi động xong giao diện (hình 2) - Gồm chức sau: + Giới thiệu (hình 2.1) + Thốt chương trình (hình 2.1) + Gọi form nhập M1 (hình 2.2) + Gọi form nhập M2 (hình 2.2) + Tính kết thương hai DFA: M1/M2 (hình 2.2) Hình 2: Giao diện giới thiệu 14 Hình 2.1: Giao diện giới thiệu Hình 2.2: Giao diện giới thiệu 15 1.3 Giao diện nhập M1 - Từ giao diện giới thiệu \ Run \ Nhập M1 xuất form nhập M1 hình 3.1 - Chức form gồm: + Nhập tạo DFA M1 + Xem sơ đồ DFA M1 vừa tạo (hình 3.2) + Lưu lại DFA M1 vừa tạo để thực chia cho DFA M2 (nhập sau) + Kiểm tra chuỗi có thuộc DFA khơng Hình 3.1: Giao diện nhập M1 16 Hình 3.2: Sơ đồ M1 (khi nhập hình 3) 17 1.4 Giao diện nhập M2 - Từ giao diện giới thiệu \ Run \ Nhập M2 xuất form nhập M2 hình 4.1 - Chức form gồm: + Nhập tạo DFA M2 + Xem sơ đồ DFA M2 vừa tạo (hình 4.2) + Lưu lại DFA + Kiểm tra chuỗi có thuộc DFA khơng Hình 4.1: Giao diện nhập M2 18 Hình 4.2: Sơ đồ M2 (khi nhập hình 5) 19 1.5 Giao diện kết thương DFA M1/M2 - Từ giao diện giới thiệu \ Run \ “M1/M2” xuất form kết thương hai DFA M1 M2 hình 4.1 Hình 5: Giao diện kết M1/M2 20 CODE chương trình 2.1 Hàm tạo DFA private void btnOutputMaTrix_Click(object sender, EventArgs e) { if (txtStatusNumber.Text == "" || txtXichMa.Text == "") { MessageBox.Show("Vui lịng nhập Xích Ma số trạng thái"); return; } btnImageDFA.Visible = true; grpValid.Visible = true; lblNote.Visible = true; //add status status_number = Convert.ToInt16(txtStatusNumber.Text); pnlStatus.Controls.Clear(); pnlMaTrix.Controls.Clear(); for (int i = 0; i < status_number; i++) { CheckBox chkStatus = new CheckBox(); chkStatus.Name = "chkStatus" + i; chkStatus.Text = "Q" + i; chkStatus.Width = 50; chkStatus.Location = new Point(10, (i + 1) * 20); pnlStatus.Controls.Add(chkStatus); } //add matrix strXichMa = txtXichMa.Text; for (int i = 0; i

Ngày đăng: 29/09/2023, 12:54

Xem thêm:

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w