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

Báo cáo bài tập lớn automata về hai DFA

25 1,3K 5
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 25
Dung lượng 757,5 KB

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

Nội dung

Cơ sở toán học của môn TA&FL • Để học tốt môn học, ta cần đảm bảo các kiến thức nền sau: + Lý thuyết trong Toán rời rạc như tập hợp, đồ thị, cây, quan hệ, phương pháp chứng minh,… + Các

Trang 1

I ĐẶT VẤN ĐỀ 2

II CƠ SỞ LÝ THUYẾT 3

II.1 Định nghĩa DFA 3

II.1.1 Mô tả không hình thức 3

II.1.2 Mô tả hình thức: 4

II.1.3 DFA xử lý xâu như thế nào? 4

II.1.4 Các cách biểu diễn đơn giản hơn của DFA 5

a.Bằng đồ thị có hướng: 5

b.Bảng dịch chuyển 5

Bảng chuyển là bảng có kích cỡ |Q| × |Σ|, trong đó dòng i cột j của bảng là δ(qi, aj) hoặc bỏ trống 5

II.2 SỰ TƯƠNG ĐƯƠNG CỦA CÁC AUTOMAT DFA 6

II.2.1 Sự tương đương của các trạng thái: 6

II.2.2 Sự tương đương của các DFA 7

a Dựa vào bảng đánh dấu sự tương đương các trạng thái 8

b.Dựa vào tính đóng dưới phép giao 8

III CẤU TRÚC CHƯƠNG TRÌNH 12

III.1 Cấu trúc 12

III.1.1 Cài đặt dựa theo trạng thái tương đương 13

III.1.2 Dựa vào tính đóng của phép giao 2 DFA 13

III.2 Sơ đồ khối các bước giải quyết công việc: 13

III.2.1.Cài đặt dựa theo trạng thái tương đương 13

III.2.2 Dựa vào tính đóng của phép giao 2 DFA 14

III.3 GIAO DIỆN CHƯƠNG TRÌNH: 15

III.3.1 Cài đặt dựa theo trạng thái tương đương 15

III.3.2 Dựa vào tính đóng của phép giao 2 DFA 16

III.4 Cài đặt 17

III.4.1 Cài đặt dựa theo trạng thái tương đương 18

III.4.2 Cài đặt dựa vào tính đóng của phép giao 2 DFA 20

TÀI LIỆU THAM KHẢO 25

Trang 2

I ĐẶT VẤN ĐỀ

Automat và Ngôn ngữ hình thức (TA & FL) là môn học cơ sở của ngành công nghệ thông tin Môn học trang bị cho người học những kiến thức cơ bản về thuật toán, ngôn ngữ thuật toán, các kỹ thuật xây dựng chương trình, xây dựng các hệ thống tự động và phương pháp tư duy liên quan đến khoa học máy tính Kiến thức về ngôn ngữ hình thức và automat là nền tảng cho nhiều lĩnh vực của khoa học máy tính và CNTT

• Nội dung chính của môn học TA&FL:

1 Cơ sở toán học của môn TA&FL

• Để học tốt môn học, ta cần đảm bảo các kiến thức nền sau:

+ Lý thuyết trong Toán rời rạc như tập hợp, đồ thị, cây, quan hệ, phương pháp chứng minh,…

+ Các kiến thức toán liên quan;

+ Khả năng lập trình (C, C++, C#,…)

• Sau khi nghiên cứu 3 nội dung đầu tiên, ta biết được rằng một

DFA(Deterministic Finite Automata ) có thể đoán nhận (hay nói cách khác là biểu diễn) ngôn ngữ chính quy Câu hỏi đặt ra là liệu 2 DFA khác nhau có cùng biểu diễn một ngôn ngữ chính quy hay không? Khi 2 DFA biểu diễn cùng một ngôn ngữ chính quy thì ta nói

hai DFA này là tương đương Để giải quyết thắc mắc, chúng ta sẽ

thực hiện bài toán sau:

Viết chương trình kiểm tra hai dfa có tương đương nhau không.

Trang 3

II CƠ SỞ LÝ THUYẾT

II.1 Định nghĩa DFA

II.1.1 Mô tả không hình thức

Automat hữu hạn đơn định là một cái máy đoán nhận xâu Gồm các bộ phận sau:

- Một băng vào được chia thành ô, dùng để ghi xâu vào, mỗi kí hiệu của xâu vào thuộc bảng chữ Σ được ghi trên một ô

- Một đầu đọc, mỗi thời điểm đọc (trỏ) đến một ô trên băng vào

- Một bộ điều khiển Q, gồm một số hữu hạn các trạng thái, tại mỗi thời điểm nó có một trạng thái

*Hoạt động của Automat được thực hiện như sau: Automat hoạt động theo từng bước Mỗi bước như sau: tùy theo trạng thái hiện thời của bộ điều khiển

và kí hiệu mà đầu đọc đang đọc, mà Automat chuyển sang một trạng thái mới, đồng thời đầu đọc dịch chuyển sang phải một ô

**Quy luật chuyển trạng thái của Automat hữu hạn đơn định được mô tả bởi một hàm, được gọi là hàm dich chuyển như sau:

Trong Q, có một trạng thái đầu, thường kí hiệu qo và một tập hợp các trạng thái cuối / thừa nhận, thường kí hiệu F (F ⊆ Q)

Trang 4

Ta nói Automat thừa nhận xâu vào w nếu sau khi xuất phát từ trạng thái đầu qo và đầu đọc chỉ vào kí hiệu bên trái nhất của xâu w, sau một số bước dịch chuyển hữu hạn, Automat đọc song xâu w và rơi vào một trong các trạng thái cuối thuộc F.

Tập hợp tất cả các xâu đoán nhận bởi Automat hợp thành ngôn ngữ được nhận bởi Automat đó

II.1.2 Mô tả hình thức:

Một DFA được định nghĩa như 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 đủ.

II.1.3 DFA xử lý xâu như thế nào?

Giả sử w = a0a1 an là xâu vào DFA sẽ bắt đầu với trạng thái q0, nó sẽ thực hiện dịch chuyển δ(q0, a1) giả sử cho q1 DFA bây giờ ở trạng thái q1 và kí hiệu tiếp theo sẽ đọc a2, nó thưc hiện dịch chuyển δ(q1, a2) giả sử cho q2 Nó cứ tiếp tục như thế, cho đến khi đọc an thì sẽ chuyển sang trạng thái qn nào đó, nếu qn thuộc tập F thì DFA thừa nhận xâu vào w, ngược lại thì xâu vào sẽ không được thừa nhận

Trang 5

II.1.4 Các cách biểu diễn đơn giản hơn của DFA

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.

a Bằng đồ thị có hướng:

Đồ 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 q0

Trang 6

II.2 SỰ TƯƠNG ĐƯƠNG CỦA CÁC AUTOMAT DFA

II.2.1 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) và δ*(q, w) cho kết quả hoặc cùng là trạng thái kết thúc hoặc cùng là trạng thái không kết thúc

• 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

• Để 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:

Bước 1: 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

Bước 2: 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

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 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 không được sử dụng

Trang 7

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ụ

II.2.2 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 8

a Dựa vào bảng đánh dấu sự tương đương các trạng thái

Giả sử có hai DFA M1 và M2 Xét DFA mới là hợp của hai DFA M1 và M2 Khi đó, DFA này có hai trạng thái đầu Nếu DFA M1 và M2 là tương đương thì cặp trạng thái đầu phải là cặp trạng thái tương đương và ngược lại

Á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 thái tương đương, vậy hai DFA là tương đương Tức

là cùng thừa nhận một ngôn ngữ

b Dựa vào tính đóng dưới phép giao

*Định lý: Nếu L1 và L2 là các ngôn ngữ chính quy thì L1 ∩ L2 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ữ L1∩ L2 từ các DFA thừa nhận L1 và L2

Giả sử M1= (Q1, Σ1, δ1, q01, F1) và M2 = (Q2, Σ2, δ2, q02, F2) là các DFA thừa nhận tương ứng L1 và L2 Chúng ta sẽ xây dựng DFA M thực hiện đồng thời M1 và M2:

- 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 M1 và một trạng thái của M2

- Bảng chữ của M sẽ là hợp của các bảng chữ của M1 và M2

Trang 9

- 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 M1 và M2 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 M1 và M2 cùng đoán nhận xâu vào

Như vậy, M được xây dựng như sau:

M=(Q1× Q2, Σ1∪ Σ2, δ, (q01, q02), F1× F2)

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, δ*((q01, q02), w) = (δ1 * (q01, w), δ2 * (q02, w)), như thế M chỉ chấp nhận w khi δ1 * (q01, w) ∈ F1 và δ2 * (q02, w) ∈ F2, nghĩa là M chỉ chấp nhận w khi M1 chấp nhận w và M2 chấp nhận w Vậy chấp nhận L(M1) ∪ L(M2)

Ví dụ: Cho L1 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 M1 (a) và L2 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 M2 (b) Chúng ta chỉ ra DFA M (c) thừa nhận ngôn ngữ giao của L1 và L2

Trang 10

DFA giao của hai DFAChú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 cho Ví dụDFA biểu diễn L1

DFA biểu diễn L2

Trang 11

DFA biểu diễn L2

Trang 12

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

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)= L1 ∩ L2 cũng rỗng

Suy ra hai DFA L1, L2 tương đương

III CẤU TRÚC CHƯƠNG TRÌNH

III.1 Cấu trúc

- Chương trình viết trên ngôn ngữ C# dạng winform Vì thuật toán 2 DFA tương đương có 2 cách nên chia làm 2 phần khác nhau

Trang 13

- Cả 2 cách đều có khả năng lấy dữ liệu từ File text,có khả năng Thêm, Sửa, Xóa dữ liệu, hoặc nhập trực tiếp dữ liệu từ màn hình, với bảng hiện thị dữ liệu là DataGridView

III.1.1 Cài đặt dựa theo trạng thái tương đương

 Hàm: NhapDuLieuVaoMang() Nhập dữ liệu từ file text vao mảng để tính toán

 Hàm: TaoMang(int [,] mt,int m) Lấy ra 1 dòng từ ma trận, lưu vào mảng

 Hàm : SS2Hang (int [,] d1,int [,] d2,int h1,int h2) So sánh 2 dòng

 Hàm : TimTrangThaiCuoi (int [,] d,int g) Tìm trạng thái kết thúc

 Hàm: SS2TT_BatKy( int [,] d1,int [,] d2,int n1,int n2) So sánh 2 trạng thái bất kỳ

 Ngoài ra trong bài còn có các Hàm hiển thị ma trận ra textbox, nhằm minh họa rõ ràng về dữ liệu nhập

III.1.2 Dựa vào tính đóng của phép giao 2 DFA

 Hàm: : NhapDuLieuVaoMang() Nhập dữ liệu từ file text vao mảng để tính toán

 Hàm: DFA_PhanBu2(int [,] d2 ,int n2 ) Kiểm tra phần bù của DFA2

 Hàm: DFA_PhanBu1(int[,] d1, int n1) ) Kiểm tra phần bù của DFA1

 Hàm: Dem_0(int [,]d1,int n1,int m) Đếm các giá trị 0 của các giá trị nhập vào

 Hàm: KiemTra(int [,] d1,int [,]d2,int n1,int n2)

III.2 Sơ đồ khối các bước giải quyết công việc:

III.2.1.Cài đặt dựa theo trạng thái tương đương

Start

Trang 14

III.2.2 Dựa vào tính đóng của phép giao 2 DFA

Nhập DFA

Hàm Tìm Trạng Thái Cuối(d1,n1) Hàm Tìm Trạng Thái Cuối(d2,n2)

Trang 15

III.3 GIAO DIỆN CHƯƠNG TRÌNH:

III.3.1 Cài đặt dựa theo trạng thái tương đương

*Giao diện chính:

Hàm Tìm DFA_PhanBu2 ( d2 , n2 ) Hàm Tìm DFA_PhanBu1 ( d1 , n1 )

kq1 = KiemTra ( d1 , d2 , n1 , n2 ) kq2 = KiemTra ( d1 , d2 , n1 , n2 ) kq1 + kq2 = 2 ?

Hiển Thị Ma Trận

Hiển Thị Kết Quả

Kết Thúc

Trang 16

III.3.2 Dựa vào tính đóng của phép giao 2 DFA

*Giao diện chính:

Trang 17

III.4 Cài đặt

Chú ý:

Dùng ma trận để mã hóa 2DFA

Trang 18

+ Ma trận có 3 cột, số hàng là số các trạng thái: cột 1 là trạng thái Q, cột 2 thể hiện hàm δ (Q, 0), cột 3 thể hiện hàm δ(Q, 1).

+ Các trạng thái không kết thúc được mã hóa là số 1, trạng thái kết thúc được mã hóa là số 0

Dùng cho các DFA không có trạng thái mồ côi, trạng thái kết thúc vẫn có hàm δ

III.4.1 Cài đặt dựa theo trạng thái tương đương

 Hàm: NhapDuLieuVaoMang () Nhập dữ liệu từ file text vao mảng để tính toán

{

n1 = Convert.ToInt32(this.txt_SoTragThai_DFA_1.Text);

n2 = Convert.ToInt32(this.txt_SoTrangThai_DFA_2.Text);

Convert.ToInt32(dgvDuLieu_TT_DFA.Rows[k].Cells[2].Value.ToString()); k++;

}

}

}

 Hàm: TaoMang ( int [,] mt , int m ) Lấy ra 1 dòng từ ma trận, lưu vào mảng

privateint [] TaoMang(int [,] mt,int m)

{

int [] mt1=newint [mt.Length];

for(int i=0;i<mt.GetLength(0);i++)

{

mt1[i]=mt[m,i];

Trang 19

}

return mt1;

}

 Hàm : SS2Hang ( int [,] d1 , int [,] d2 , int h1 , int h2 ) So sánh 2 dòng

privateint SS2Hang (int [,] d1,int [,] d2,int h1,int h2)

{

int kt = 1;

int[] Mang1Chieu1 = TaoMang(d1, h1);

int[] Mang1Chieu2 = TaoMang(d2, h2);

for (int l = 0; l < Mang1Chieu1.Length; l++)

 Hàm : TimTrangThaiCuoi ( int [,] d , gint ) Tìm trạng thái kết thúc

privateint TimTrangThaiCuoi (int [,] d,int g)

Trang 20

if(d1.GetLength(0) > d2.GetLength(0))

kt_Min=d2.GetLength(0);

else

kt_Min=d1.GetLength(0);

for(int i=0;i<n1;i++)

{

for(int j=0;j<n2;j++) {

for(int f=0;f<kt_Min;f++) {

if(SS2Hang(d1,d2,i,j)==0) dem++; }

}

}

return dem;//de kiem xem neu dem khac 0: tra ve k tuong duong } Ngoài ra trong bài còn có các Hàm hiển thị ma trận ra textbox, nhằm minh họa rõ ràng về dữ liệu nhập III.4.2 Cài đặt dựa vào tính đóng của phép giao 2 DFA  Hàm: NhapDuLieuVaoMang () Nhập dữ liệu từ file text vao mảng để tính toán  Hàm: DFA_PhanBu2 ( [,] int d2 , int n2 ) Kiểm tra phần bù của DFA2 privatevoid DFA_PhanBu2(int [,] d2 ,int n2 ) {

for(int i=0;i<n2;i++) for (int j = 0; j < 3; j++) {

if (d2[i, j] == 1) {

d2[i, j] = 0; }

else {

d2[i, j] = 1; }

}

}

Trang 21

 Hàm: DFA_PhanBu1 ( [,] int d1 , int n1 ) ) Kiểm tra phần bù của DFA1.

 Hàm: KiemTra ( int [,] d1 , int [,] d2 , int n1 , int n2 )

privateint XetKT(int[,] d1, int n1)

Trang 23

Trong suốt quá trình làm ĐỒ ÁN MÔN HỌC, với sự cố gắng của từng thành viên trong nhóm Chúng em đã hoàn thành được ĐỒ ÁN MÔN HỌC này, đồng thời qua Đồ án môn học kỹ năng lập trình đã có nhiều tiến bộ, cũng như khả năng làm việc theo nhóm được nâng cao Tuy nhiên chương trình không thể tránh khỏi những sai sót Chúng em vọng sẽ nhận được nhiểu hơn những sự đóng góp từ phía thầy để chương trình này được hoàn thiện hơn!

Qua đây chúng em cũng muốn gửi lời cám ơn đến thầy Hà Chí Trung đã tận tình hướng dẫn và giúp đỡ chúng em hoàn thành bài tập lớn này

Chúng em xin chân thành cảm ơn!

Trang 25

TÀI LIỆU THAM KHẢO

1. Giáo trình Lý thuyết ngôn ngữ hình thức và Automat – Nguyễn Thanh Bình- Khoa CNTT- trường ĐHBK- ĐH Đà Nẵng

2. Bài giảng của GVHD TS Hà Chí Trung

Ngày đăng: 27/03/2014, 11:00

HÌNH ẢNH LIÊN QUAN

Đồ thị chuyển là một đa đồ thị có hướng (có thể có khuyên) G: - Báo cáo bài tập lớn automata về hai DFA
th ị chuyển là một đa đồ thị có hướng (có thể có khuyên) G: (Trang 5)
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ề hai DFA
ng đánh dấu các cặp trạng thái phân biệt cho Ví dụ (Trang 7)

TỪ KHÓA LIÊN QUAN

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

w