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 tương đương

29 1,3K 3
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 29
Dung lượng 472 KB

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

Nội dung

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ạngthái cuối thừa nhận, thường kí hiệu F F ⊆ Q.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

Trang 1

II.2 Sự tương đương của các DFA Tr 11

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

thái Tr 11

b Dựa vào tính đóng dưới phép giao Tr 12 II.3 Cài đặt Tr

15

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

b Dựa vào tính đóng của phép giao 2 DFA Tr 22

Trang 2

- 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

Trang 3

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ạngthái cuối thừa nhận, thường kí hiệu F (F ⊆ Q).

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ịchchuyể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ốithuộ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ữ đượcnhận bởi Automat đó

q0∈ Q là trạng thái bắt đầu

F ⊆ Q là tập các trạng thái kết thúc

I.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ựchiệ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ếptheo 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

Trang 4

DFA chưa đọc xâu 01, nhưng ngay trước đó ít nhất một kí tự 0, như thế nó cóthể tiếp tục đọc kí tự 0 cho đến khi gặp một kí tự 1 thì có thể chuyển sang thừanhận xâu vào.

Với nhận xét trên chúng ta dễ dàng thấy mỗi trường hợp trên sẽ ứng với mộttrạng thái ghi nhớ của DFA Trường hợp (1) sẽ tương ứng với trạng thái thừa nhận,

kí hiệu trạng thái q2, ở trạng thái này, DFA có thể tiếp tục đọc bất kì kí hiệu nào.Như thế δ(q2, 0) = δ(q2, 1) = q2

Trường hơp (2) sẽ tương ứng với trạng thái đầu q0, khi ở trạng thái này DFA

có thể tiếp tục đọc kí tự cho đến khi gặp kí tự 0 thì chuyển sang trạng thái khác.Như thế δ(q0, 1) = q0, δ(q0, 0) = q1

Trường hợp (3) sẽ tương ứng với trạng thái q1, khi đã đọc trước đó ít nhất một

kí tự 0, nhưng chưa bao giờ đọc xâu 01.Ở trạng thái q1 thì DFA có thể tiếp tục đọc

kí tự 0 cho đến khi gặp kí tự 1, thì chuyển sang trạng thái thừa nhận q2 Như thếδ(q1, 0) = δ(q1, 1) =q2

Vậy cuối cùng chúng ta có DFA như sau:

M=({q0, q1, q2}, {0, 1}, δ, q0, {q2})

Với δ được định nghĩa như trên

Giải thuật mô phỏng hoạt động của một DFA

Mục đích: kiểm tra một chuỗi nhập x có thuộc ngôn ngữ L(M) đoán nhậnbởi automata M

Trang 5

Input: chuỗi nhập x$

Output: câu trả lời ‘YES’ hoặc ‘NO’

Giải thuật:

I.4 Các cách biểu diễn đơn giản của DFA

Cách mô tả DFA bằng bộ năm như trên là tương đối khó hiểu và ít trực quan

Có hai cách mô tả đơn giản hơn một DFA là: biểu đồ dịch chuyển và bảng dịchchuyển

a Biểu đồ dịch chuyển

Mỗi trạng thái trong Q là một nút

Với mỗi trạng thái q ∈ Q và mỗi kí hiệu a ∈ Σ, có δ(q, a) = p ∈ Q Như thế,biểu đồ dịch chuyển có một cung đi từ nút p đến q mang nhãn a, nếu có nhiều kíhiệu tạo ta dịch chuyển từ q đến p thì chỉ cần biểu diễn một cung mang nhãn làdanh sách các kí hiệu đó

Có một mũi tên đi vào nút q0 để kí hiệu trạng thái đầu

Các trạng thái kết thúc F là các nút được biểu diễn bởi hai vòng tròn

Các trạng thái không thuộc F là các nút được biểu diễn bởi chỉ một vòng tròn

q := q 0 ;

c := nextchar ; {c là ký hiệu nhập được đọc tiếp theo}

While c <> $ do begin

q := δ(q, c);

c := nextchar ; end

If (q in F) then write("YES") else write("NO");

Trang 6

DFA biểu diễn ngôn ngữ trong Ví dụ

b Bảng dịch chuyển

Bảng dịch chuyển cho một DFA là một quy ước biểu diễn dạng bảng của hàm,

mà ở đây là dịch chuyển với hai tham số: các trạng thái và các kí hiệu vào Trạngthái đầu được đánh dấu bởi dấu , các trạng thái cuối sẽ được đánh các dấu ( * )

Bảng dịch chuyển của DFA xây dựng trong Ví dụ

I.5 Hàm dịch chuyển mở rộng

Một cách không hình thức chúng ta có thể nhận thấy rằng, một DFA địnhnghĩa ngôn ngữ gồm các xâu là kết quả của quá trình dịch chuyển từ trạng thái đầuđến một trong các trạng thái thừa nhận Để xác định ngôn ngữ được thừa nhận bởimột DFA, chúng ta sẽ định nghĩa hàm dịch chuyển mở rộng Hàm dịch chuyển mởrộng, kí hiệu là δ* , sẽ nhận tham số là trạng thái q và xâu w và trả về trạng thái p.Nghĩa là DFA đang ở trạng thái q, sau khi xử lý xâu w thì DFA đạt đến trạng thái

Trang 7

Ví dụ: Xây dựng DFA thừa nhận ngôn ngữ

L = {w / w chỉ chứa các kí hiệu 0, 1 và luôn kết thúc bởi kí hiệu 1}

DFA phải phân biệt hai khả năng:

Khi nó đọc kí hiệu 1, thì ngay sau đó có thể kết thúc

Khi nó đọc kí hiệu 0 thì ngay sau đó không được kết thúc, mà phải đọc tiếpcác kí hiệu khác cho đến khi gặp kí hiệu 1 Như thế, DFA sẽ có ít nhất hai trạngthái tương ứng với hai khả năng trên

Ta xây dựng DFA như sau:

M = ({q0, q1}, {0, 1}, δ, q0, {q1})

Trong đó, hàm δ như sau:

DFA cho Ví dụHay chúng ta có thể biểu diễn hàm δ bởi bảng dịch chuyển như sau:

Trang 8

Như vậy, xâu vào w = 101101 được thừa nhận bởi DFA

Chúng ta có thể biểu diễn quá trình đoán nhận đơn giản hơn như sau:

q0- 101101  q1- 01101  q0-1101  q1-101  q1-01 q0-1 q1∈ F

I.6 Ngôn ngữ được thừa nhận bởi DFA

Định nghĩa: Cho DFA M = (Q, Σ, δ, q0, F), ngôn ngữ được thừa nhận bởi M,được kí hiệu là L(M), được định nghĩa như sau:

L(M) = { w ∈ Σ* / δ*(q0, w) = qf, qf∈ F}

Nghĩa là, ngôn ngữ L(M) gồm các xâu w sao cho M xuất phát từ trạng tháiđầu q0, sau khi đọc hết xâu w thì đạt đến một trong các trạng thái qf thuộc F

Trang 9

Định nghĩa: Cho DFA M, một ngôn ngữ L = L(M) được gọi là ngôn ngữchính quy (regular language) Hay nói cách khác, ngôn ngữ được thừa nhận bởimột Automat hữu hạn đơn định là ngôn ngữ chính quy.

Ví dụ: Xây dựng Automat thừa nhận ngôn ngữ L gồm các xâu trên bảng chữΣ= {a, b} được bắt đầu bởi xâu aa

Ví dụ: Chứng minh rằng ngôn ngữ L = {abanbm / n, m > 0} là ngôn ngữ chínhquy

Để chứng minh một ngôn ngữ là chính quy, ta chỉ ra rằng tồn tại DFA thừanhận ngôn ngữ đó Thật vậy L được thừa nhận bởi DFA sau:

Trang 10

CHƯƠNG II

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

II.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) cho kết quả là trạng thái kết thúc và δ*(q, w) cho kết quả cũng là trạngthá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) chokết quả 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 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ộttrong hai dịch chuyển δ*(p, w) và δ*(q, w) cho trạng thái kết thúc và dịch chuyểncò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ánxâ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ặptrạ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áiphâ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ânbiệt r và s, nghĩa là chỉ có một trong hai dịch chuyển δ*(r, w) và δ*(s, w) cho kếtquả 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

Trang 11

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 đenkhông được sử dụng Ban đầu, không có cặp nào bị đánh dấu Chúng ta thực hiệnviệ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áikhô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ôngtì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ụ

Trang 12

II.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ênbảng chữ {0, 1} kết thúc bởi kí hiệu 0

a Dựa vào bảng đánh dấu sự tương đương 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 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 Tuy nhiên, 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 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ì M1 và M2 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

Trang 13

A B C D

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ừanhận tương ứng L1 và L2 Chúng ta sẽ xây dựng DFA M bắt chước thực hiện đồngthờ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 Một dịch chuyển trong M được xây dựng tương ứng một dịch chuyển đồngthờ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 đồngthờ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ựngnhư 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ấpnhậ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ừanhận bởi DFA M (a) và L là ngôn ngữ chính quy có ít nhất một kí hiệu 1 được

Trang 14

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

Trang 15

DFA biểu diễn L1

DFA biểu diễn L2

DFA biểu diễn L2

Trang 16

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)

Trang 17

+ 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

Trang 19

void nhapmt2(int d2[][20], int n2)

// so sanh 2 dong cua 2 ma tran

int ss2dong(int d1[][20], int d2[][20], int i, int j)

Trang 20

// so sanh hai trang thai dau

int ss2ttd (int d1[][20], int d2[][20])

// tim vi tri trang thai cuoi cua DFA 1

int timttc1(int d1[][20], int n1)

// tim vi tri trang thai cuoi cua DFA 2

int timttc2(int d2[][20], int n2)

{

int vt2=-1;

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

Trang 21

// so sanh 2 trang thai cuoi

int ss2ttc(int d1[][20], int d2[][20], int n1, int n2)

// so sanh xem dong co ton tai 1 dong o ma tran d1 bang voi

// mot dong o ma tran d2 hay ko

int ss2dongbk(int d1[][20], int d2[][20], int n1, int n2)

}

Trang 23

void main()

{

clrscr();

cout<<"nhap du lieu cho DFA 1";

cout<<"\n nhap so trang thai cua DFA 1: ";

cin>>n1;

cout<<"\n trang thai ket thuc =0, trang thai ko ket thuc =1";

nhapmt1(d1, n1);

cout<<"\n nhap du lieu cho DFA 2";

cout<<"\n nhap so trang thai cua DFA 2:";

Trang 24

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

Trang 28

void main()

{ clrscr();

cout<<"nhap du lieu cho DFA 1";

cout<<"\n nhap so trang thai cua DFA 1: ";

cin>>n1;

cout<<"\n trang thai ket thuc =0, trang thai ko ket thuc =1";

nhapmt1(d1, n1);

cout<<"\n nhap du lieu cho DFA 2";

cout<<"\n nhap so trang thai cua DFA 2:";

Trang 29

TÀI LIỆU THAM KHẢO

Nguyễn Văn Xuất-HVKTQS.

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

HÌNH ẢNH LIÊN QUAN

Bảng dịch chuyển của DFA xây dựng trong Ví dụ - Báo cáo bài tập lớn automata về  hai DFA tương đương
Bảng d ịch chuyển của DFA xây dựng trong Ví dụ (Trang 6)
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 tương đương
ng đánh dấu các cặp trạng thái phân biệt cho Ví dụ (Trang 11)

TỪ KHÓA LIÊN QUAN

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

w