Tải bản đầy đủ (.doc) (29 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (415.21 KB, 29 trang )

PHỤ LỤC
CHƯƠNG I
Automat đơn định (Deterministic Finite Automat –
DFA) Tr 1
I.1. Mô tả không hình thức Tr 1
I.2. Mô tả hình thức Tr 2
I.3. DFA xử lý xâu như thế nào Tr
2
I.4. Các cách biểu diễn đơn giản hơn của DFA Tr
4
a. Biểu đồ dịch chuyển Tr 4
b. Bảng dịch chuyển Tr 5
I.5. Hàm dịch chuyển mở rộng Tr
5
I.6. Ngôn ngữ được thừa nhận bởi DFA Tr
7
CHƯƠNG II
Sự tương đương của các Automat DFA Tr 9
II.1. Sự tương đương của các trạng thái Tr
9
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
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
CHƯƠNG I
AUTOMAT ĐƠN ĐỊNH


(Deterministic Finite Automat – DFA)
I.1. Mô tả không hình thức.
-Automat hữu hạn là một cái máy đoán nhận xâu. Nó bao 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:
Nguyễn Thái Thành-Tin Học 2
Trang 2
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
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).
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 đó.
I.2. Mô tả hình thức
Định nghĩa: Một Automat hữu hạn đơn định DFA được định nghĩa như là một
bộ năm: (Q, Σ, δ, q
0

, F), trong đó:
. Q là tập hợp hữu hạn các trạng thái.
. Σ là bộ chữ cái nhập hữu hạn.
. δ là hàm chuyển ánh xạ từ Q × Σ → Q, tức là δ(q, a) là một trạng thái được
cho bởi phép chuyển từ trạng thái q trên ký hiệu nhập a thì nó chuyển sang trạng
thái q’.
. q
0
∈ 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 = a
0
a
1
a
n
là xâu vào. DFA sẽ bắt đầu với trạng thái q
0
, nó sẽ thực
hiện dịch chuyển δ(q
0
, a
1
) giả sử cho q
1
. DFA bây giờ ở trạng thái q
1
và kí hiệu tiếp
theo sẽ đọc a

2
, nó thưc hiện dịch chuyển δ(q
1
, a
2
) giả sử cho q
2
. 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 q
n
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.
Ví dụ: Xây dựng DFA thừa nhận các xâu gồm các kí hiệu 0, 1 và chứa ít nhất
một lần xâu 01, nghĩa là chúng ta có thể mô tả ngôn ngữ L này như sau:
Nguyễn Thái Thành-Tin Học 2
Trang 3
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
L = { x01y / x và y gồm các kí tự 0 và 1 bất kì }
Để xây dựng DFA thừa nhận L, DFA M cần phải ghi nhớ các khả năng sau:
DFA đã đọc xâu 01, như thế sau đó nó có thể thừa nhận xâu vào.
DFA chưa bao giờ đọc kí tự 0, nhưng nó đã đọc ít nhất kí tự 1, trong trường
hợp này nó có thể tiếp tục đọc các kí tự 1 cho đến khi nào đó một kí tự 0 đầu tiên,
thì nó có thể sau đó đọc một kí tự 1 đi liền sau.
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ừa
nhậ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ột
trạ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 q
2

, ở trạng thái này, DFA có thể tiếp tục đọc bất kì kí hiệu nào.
Như thế δ(q
2
, 0) = δ(q
2
, 1) = q
2
.
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ế δ(q
0
, 1) = q
0
, δ(q
0
, 0) = q
1
.
Trường hợp (3) sẽ tương ứng với trạng thái q
1
, 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 q
1
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 q
2
. Như thế
δ(q
1

, 0) = δ(q
1
, 1) =q
2
.
Vậy cuối cùng chúng ta có DFA như sau:
M=({q
0
, q
1
, q
2
}, {0, 1}, δ, q
0
, {q
2
})
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ận
bởi automata M.
Nguyễn Thái Thành-Tin Học 2
Trang 4
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
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ịch

chuyể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
Ví dụ:
Nguyễn Thái Thành-Tin Học 2
Trang 5
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");
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
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ạng
thá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 định
nghĩ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ởi
mộ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
p.
Định nghĩa: Hàm dịch chuyển mở rộng được định nghĩa đệ quy trên độ dài
của xâu như sau:
δ
*
(q, ε) =q, với mọi trạng thái q, nếu DFA không đọc kí hiệu vào nào sẽ ở lại
trạng thái đó.
δ
*
(q, w)= δ (δ
*
(q, x), a), với w = x a, x ∈ Σ
*


và a ∈ Σ.
Nguyễn Thái Thành-Tin Học 2
Trang 6
Môn học Automat và NNHT Đề tài: Hai DFA tương đương

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ếp
cá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ạng
thái tương ứng với hai khả năng trên.
Ta xây dựng DFA như sau:
M = ({q
0
, q
1
}, {0, 1}, δ, q
0
, {q
1
})
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:
Nguyễn Thái Thành-Tin Học 2
Trang 7
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
δ 0 1
q
0
q
0
q
1


*
q
1
q
0
q
1
Sử dụng hàm dịch chuyển mở rộng để đoán nhận xâu w = 101101 của ngôn
ngữ L.
δ
*
(q
0
, ε) = q
0
δ
*
(q
0
, 1) = δ


*
(q
0
, ε), 1) = δ(q
0
, 1) = q
1

δ
*
(q
0
, 10) = δ(δ
*
(q
0
, 1), 0) = δ

(q
1
, 0) = q
0
δ
*
(q
0
, 101) = δ(δ
*
(q
0
, 10), 1) = δ

(q
0
, 1) = q
1
δ
*

(q
0
, 1011) = δ(δ
*
(q
0
, 101), 1) = δ

(q
1
, 1) = q
1
δ
*
(q
0
, 10110) = δ(δ
*
(q
0
, 1011), 0) = δ

(q
1
, 0) = q
0
δ
*
(q
0

, 101101) = δ(δ
*
(q
0
, 10110), 1) = δ

(q
0
, 1) = q
1
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:
q
0
- 101101  q
1
- 01101  q
0
-1101  q
1
-101  q
1
-01 q
0
-1 q
1
∈ F
I.6. Ngôn ngữ được thừa nhận bởi DFA
Định nghĩa: Cho DFA M = (Q, Σ, δ, q
0

, 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 ∈ Σ
*
/ δ
*
(q
0
, w) = q
f
, q
f
∈ 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 q
0
, sau khi đọc hết xâu w thì đạt đến một trong các trạng thái q
f
thuộc F.
Nguyễn Thái Thành-Tin Học 2
Trang 8
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
Đị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ởi
mộ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 = {aba
n
b

m
/ n, m > 0} là ngôn ngữ chính
quy.
Để chứng minh một ngôn ngữ là chính quy, ta chỉ ra rằng tồn tại DFA thừa
nhận ngôn ngữ đó. Thật vậy L được thừa nhận bởi DFA sau:
Nguyễn Thái Thành-Tin Học 2
Trang 9
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
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ạ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.
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
Nguyễn Thái Thành-Tin Học 2
Trang 10
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
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
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ụ
Nguyễn Thái Thành-Tin Học 2
Trang 11
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
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ên
bả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 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.
Á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.
Nguyễn Thái Thành-Tin Học 2
Trang 12
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
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 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 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

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.
Dễ dàng nhận thấy rằng L(M) = L(M1) ∩ L(M2).
Thật vậy, δ
*
((q
01
, q

02
), w) = (δ
1

*
(q
01
, w), δ
2

*
(q
02
, w)), như thế M chỉ chấp
nhận w khi δ
1

*
(q
01
, w) ∈ F
1
và δ
2

*
(q
02
, w) ∈ F
2

, nghĩa là M chỉ chấp nhận w khi
M
1
chấp nhận w và M
2
chấp nhận w. Vậy chấp nhận L(M
1
) ∪ L(M
2
)
Ví dụ: Cho L
1
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 M
1
(a) và L
2
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 M
2
(b). Chúng ta chỉ ra DFA M (c) thừa nhận ngôn ngữ giao
của L
1
và L
2
.
Nguyễn Thái Thành-Tin Học 2
Trang 13
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
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
kí hiệu 0 và ít nhất một kí hiệu 1.

*
Áp dụng thuật toán
Để chứng minh hai DFA
1
L

2
L
tương đương thì ta chứng minh như sau:
1
L
=
2
L
thì
1
L

2
L
=
1
L

2
L
= L(M) = ∅.

Automat DFA rỗng: Nếu không tồn tại một đương đi từ trạng thái đầu đến
một trong các trạng thái cuối thì là rỗng, ngược lại thì không rỗng.
Áp dụng cho Ví dụ
Nguyễn Thái Thành-Tin Học 2
Trang 14
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
DFA biểu diễn
1
L
DFA biểu diễn
2
L
DFA biểu diễn
2
L
Nguyễn Thái Thành-Tin Học 2
Trang 15
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
DFA biểu diễn
1
L

2
L
= 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)=
1
L


2
L
cũng rỗng.
Suy ra hai DFA
1
L
,
2
L
tương đương.
II.3. Cài đặt
Chú ý:
Dùng ma trận để mã hóa 2DFA
Nguyễn Thái Thành-Tin Học 2
Trang 16
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
+ 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
δ.
a. Cài đặt dựa theo trạng thái tương đương
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
#include<math.h>
#include<fstream.h>
int n1;int d1[20][20];

int n2;int d2[20][20];
void nhapmt1(int d1[][20], int n1)
{
for(int i=0;i<n1;i++)
for(int j=0;j<3;j++)
{
cout<<"\n d1["<<i<<", "<<j<<"]=";
cin>>d1[i][j];
}
}
void inmt1(int d1[][20], int n1)
{
for(int i=0;i<n1;i++)
Nguyễn Thái Thành-Tin Học 2
Trang 17
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
{ for(int j=0;j<3;j++)
cout<<setw(4)<<d1[i][j];
cout<<endl;
}
}
Nguyễn Thái Thành-Tin Học 2
Trang 18
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
void nhapmt2(int d2[][20], int n2)
{
for(int i=0;i<n2;i++)
for(int j=0;j<3;j++)
{
cout<<"\n d2["<<i<<", "<<j<<"]=";

cin>>d2[i][j];
}
}
void inmt2(int d2[][20], int n2)
{
for(int i=0;i<n2;i++)
{
for(int j=0;j<3;j++)
cout<<setw(4)<<d2[i][j];
cout<<endl;
}
}
// so sanh 2 dong cua 2 ma tran
int ss2dong(int d1[][20], int d2[][20], int i, int j)
{ int kt=1;
for(int k=0;k<3;k++)
{
if(d1[i][k]!=d2[j][k])
kt=0;
}
return kt;
}
Nguyễn Thái Thành-Tin Học 2
Trang 19
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
// so sanh hai trang thai dau
int ss2ttd (int d1[][20], int d2[][20])
{ /
*
int td1, td2;

cout<<"\n nhap trang thai dau cua DFA 1:";
cin>>td1;
cout<<"\n nhap trang thai dau cua DFA 2:";
cin>>td2;
*
/
if(ss2dong(d1, d2, 0, 0)==1)
return 1;
else
return 0;
}
// tim vi tri trang thai cuoi cua DFA 1
int timttc1(int d1[][20], int n1)
{ int vt1=-1;
for(int i=0;i<n1;i++)
{
if(d1[i][0]==0)
vt1=i;
}
return vt1;
}
// 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++)
{
Nguyễn Thái Thành-Tin Học 2
Trang 20
Môn học Automat và NNHT Đề tài: Hai DFA tương đương

if(d2[i][0]==0)
vt2=i;
}
return vt2;
}
// so sanh 2 trang thai cuoi
int ss2ttc(int d1[][20], int d2[][20], int n1, int n2)
{
if(ss2dong(d1, d2, timttc1(d1, n1), timttc2(d2, n2))==1)
return 1;
else
return 0;
}
// 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)
{ //int kt=1;
int dem=0;
for(int i=0;i<n1;i++)
{
for(int j=0;j<n2;j++)
{
if(ss2dong(d1, d2, i, j)==1)
dem++;
}
}
if(dem>=n1)
return 1;
Nguyễn Thái Thành-Tin Học 2
Trang 21

Môn học Automat và NNHT Đề tài: Hai DFA tương đương
else
return 0;
}
void DFAtd(int d1[][20], int d2[][20], int n1, int n2)
{
if(ss2ttd(d1, d2)==0)
{
cout<<"\n hai DFA khong tuong duong";
//cout<<endl;
}
if(ss2ttc(d1, d2, n1, n2)==0)
{
cout<<"\n hai DFA khong tuong duong";
//cout<<endl;
}
if(ss2dongbk(d1, d2, n1, n2)==0)
{
cout<<"\n hai DFA khong tuong duong";
//cout<<endl;
}
if(ss2dongbk(d2, d1, n2, n1)==0)
{
cout<<"\n hai DFA khong tuong duong";
//cout<<endl;
}
else
cout<<"\n hai DFA tuong duong";
}
Nguyễn Thái Thành-Tin Học 2

Trang 22
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
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:";
cin>>n2;
nhapmt2(d2, n2);
cout<<"\n ma tran cua DFA 1 la \n ";
cout<<endl;
inmt1(d1, n1);
cout<<"\n ma tran cua DFA 2 la \n";
cout<<endl;
inmt2(d2, n2);
DFAtd(d1, d2, n1, n2);
//cout<<" ss 1d o mt1va 1d DFA 2 la :"<<ss2dongbk(d2, d1, n2, n1);
getch();
}
Nguyễn Thái Thành-Tin Học 2
Trang 23
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
b. Dựa vào tính đóng của phép giao 2 DFA
#include<iostream.h>
#include<conio.h>

#include<iomanip.h>
#include<math.h>
#include<fstream.h>
int n1;int d1[20][20];
int n2;int d2[20][20];
void nhapmt1(int d1[][20], int n1)
{
for(int i=0;i<n1;i++)
for(int j=0;j<3;j++)
{
cout<<"\n d1["<<i<<", "<<j<<"]=";
cin>>d1[i][j];
}
}
void inmt1(int d1[][20], int n1)
{
for(int i=0;i<n1;i++)
{
for(int j=0;j<3;j++)
cout<<setw(4)<<d1[i][j];
cout<<endl;
}
Nguyễn Thái Thành-Tin Học 2
Trang 24
Môn học Automat và NNHT Đề tài: Hai DFA tương đương
}
void nhapmt2(int d2[][20], int n2)
{
for(int i=0;i<n2;i++)
for(int j=0;j<3;j++)

{
cout<<"\n d2["<<i<<", "<<j<<"]=";
cin>>d2[i][j];
}
}
void inmt2(int d2[][20], int n2)
{
for(int i=0;i<n2;i++)
{
for(int j=0;j<3;j++)
cout<<setw(4)<<d2[i][j];
cout<<endl;
}
}
void dfa_pb(int d1[][20], int n1)
{ for(int i=0;i<n1;i++)
for(int j=0;j<3;j++)
{
if(d1[i][j]==1)
d1[i][j]=0;
else
d1[i][j]=1;
}
Nguyễn Thái Thành-Tin Học 2
Trang 25

×