1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo bài tập lớn automata về 2DFA tương đương

23 1,8K 6
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Định dạng
Số trang 23
Dung lượng 539,59 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 1

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.

Trang 2

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 đó.

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;

Trang 3

I.2.Automata hữu hạn đơn định DFA:

*Định nghĩa : một DFA là một bộ năm:

A=(Q, Σ, δ, q0, 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ácphầ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ạngthái ban đầu q0

Bảng chuyển – bảng có kích cỡ |Q| × |Σ|, trong đó dòng i cột j của bảng là

Trang 4

Mở rộng của một ánh xạ δ là δ’ biến đổi trạng thái, xâu sang trạng thái.

Ngôn ngữ được chấp nhận bởi một automata A:

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

Trang 5

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

Trang 6

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.

Trang 7

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.

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

Trang 8

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.

Trang 9

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

Trang 10

DFA biểu diễn 1

Trang 11

DFA biểu diễn L1∩L2= L(M)

Trang 12

Phần II: Chương trình

II.1.Cấu trúc chương trình:

Chương trình được viết bằng ngôn ngữ c# trên ứng dụng WindowsForm củachương trình visual studio 2008

Chương trình được viết trên 3 form(class):

 Form Giao_Dien.cs: dùng để giới thiệu tên đồ án môn học, tên giáo viên hướng

dẫn và các học viên thực hiện đề tài Đồng thời có tab Menu để lựa chọn các chức năng người dùng muốn thao tác

 Form Tao_DFA: đây là giao diện để hiển thị chương trình chính là tạo cácDFA

 Form DrawingDFA: giao diện dùng để thể hiện đồ thị chuyển trạng thái củaDFA

II.1.1.Cấu trúc của Form Giao_Dien:

Form Giao_Dien gồm màn hình hiển thị thông tin liên quan tới đề tài như tên

đề tài, giáo viên hướng dẫn, học viên thực hiện Ngoài ra còn có menustrip Menu gồm các chỉ mục: Nhập DFA1, Nhập DFA2, Kiểm tra, Thoát.

Ứng với chỉ mục Nhập DFA1 và Nhập DFA2, ta sẽ mở form tiếp theo để thực

hiện thao tác nhập từng DFA vào

Với chỉ mục Kiểm tra, 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.

Trang 13

Sau khi nhập Các chữ cái nhập vào (dãy kí tự liền nhau) và Số trạng thái

vào,chương trình sẽ nhận định đây 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ị chuyển trạng thái từ

thông tin vừa nhập

Button Lưu có tác dụng lưu bảng chuyển trạng thái được mã hóa dưới 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ôngkế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 kí hiệu cho các trạng thái trong bảng chuyển.

- Vòng tròn đơn đầu tiên, có mũi tên trước là kí hiệu của trạng thái bắt đầu.

- 2 vòng tròn lồng nhau là kí hiệu cho trạng thái kế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.

Trang 14

II.2.Sơ đồ khối giải quyết bài toán:

So sánh hàng đầu của 2 ma

trận trên

Trang 15

II.3.Giao diện chính của chương trình:

II.3.1.Màn hình giao diện Menu:

Hình 1.1: Màn hình giao diện khởi động

Trang 16

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

Trang 17

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ả:

Trang 18

public int Check = 0;

public int SoTrangThai = 0;

Trang 19

public string strChuCai = "" ;

public int So_TrangThai_Nhap = 0;

public int [,] So01;

Label lblXichMa = new Label ();

lblXichMa.Text = strChuCai[j - 1].ToString();

Trang 20

{

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); cboStatus.Width = 50; cboStatus.SelectedIndex = 0; cboStatus.Location = new Point (20, 20); grpMatrixLocal.Controls.Add(cboStatus); }

}

}

}

}

private void txtNhapchucai_TextChanged( object sender, EventArgs e) {

string strChuCai = txtNhapchucai.Text; string strChuCaiNew = "" ; foreach ( char c in strChuCai) {

if (!strChuCaiNew.Contains(c.ToString())) strChuCaiNew += c.ToString(); }

txtNhapchucai.Text = strChuCaiNew; }

private void btnLuu_Click( object sender, EventArgs e) {

this SoTrangThai = int Parse( this txtSotrangthai.Text); if ( this txtNhapchucai.Text.Length != 0) {

this ChuCai = new char [ this txtSotrangthai.Text.Length]; ChuCai = this txtSotrangthai.Text.ToCharArray(); //int tmp = 0; for ( int i = 0; i < So_TrangThai_Nhap; i++) {

//final[tmp] = new string(); CheckBox chkStatus = ( CheckBox ) this Controls.Find( "chkStatus" + i, true )[0]; if (chkStatus.Checked == true ) {

Final[Check] = "Q" + i; //trang thai cuoi Check++; }

}

this Delta = new string [So_TrangThai_Nhap, strChuCai.Length]; this So01 = new int [So_TrangThai_Nhap, strChuCai.Length]; for ( int i = 0; i < So_TrangThai_Nhap; i++) {

Trang 21

//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) == DialogResult Yes) {

this Dispose(); }

}

private void btnDoThiChuyen_Click( object sender, EventArgs e) {

DataTable DT_diagram = new DataTable (); foreach ( char c in strChuCai) DT_diagram.Columns.Add(c.ToString()); for ( int i = 0; i < So_TrangThai_Nhap; i++) {

DataRow row = DT_diagram.NewRow(); for ( int j = 0; j < strChuCai.Length; j++) {

ComboBox cboStatus = ( ComboBox ) this Controls.Find( "cboStatus" + i + "_" + j, true )[0]; if (cboStatus.Text == "" ) row[j] = Convert ToInt32( null ); else row[j] = cboStatus.Text.Substring(1);

}

DT_diagram.Rows.Add(row); }

DataTable DT_TrangThai = new DataTable (); for ( int i = 0; i < So_TrangThai_Nhap; i++) {

DT_TrangThai.Columns.Add(); }

DataRow row1 = DT_TrangThai.NewRow(); for ( int i = 0; i < So_TrangThai_Nhap; i++) {

CheckBox chkStatus = ( CheckBox ) this Controls.Find( "chkStatus" + i, true )[0]; row1[i] = chkStatus.Checked; }

Trang 22

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();

}

}

}

Trang 23

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

- Bộ môn Khoa học máy tính - Khoa Công nghệ thông tin – Học viện Kỹ thuật quânsự

2.Code nguồn trên website http://google.com.vn/

3.Tài liệu Automata của ĐHBK Đà Nẵng

Ngày đăng: 27/03/2014, 10:59

HÌNH ẢNH LIÊN QUAN

Bảng đánh dấu các cặp trạng thái phân biệt cho Ví dụ - Báo cáo bài tập lớn automata về  2DFA tương đương
ng đánh dấu các cặp trạng thái phân biệt cho Ví dụ (Trang 6)
Hình 1.1: Màn hình giao diện khởi động - Báo cáo bài tập lớn automata về  2DFA tương đương
Hình 1.1 Màn hình giao diện khởi động (Trang 15)
Hình 1.2: Màn hình giao diện Menu - Báo cáo bài tập lớn automata về  2DFA tương đương
Hình 1.2 Màn hình giao diện Menu (Trang 16)
Hình 2: Màn hình nhập DFA - Báo cáo bài tập lớn automata về  2DFA tương đương
Hình 2 Màn hình nhập DFA (Trang 16)
Hình 3: Màn hình đồ thị chuyển trạng thái - Báo cáo bài tập lớn automata về  2DFA tương đương
Hình 3 Màn hình đồ thị chuyển trạng thái (Trang 17)
Hình 4.1 và 4.2: MÀn hình kết quả so sánh 2 DFA - Báo cáo bài tập lớn automata về  2DFA tương đương
Hình 4.1 và 4.2: MÀn hình kết quả so sánh 2 DFA (Trang 18)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w