PDA

View Full Version : Help Me !!!



ndphuong74
18-03-2008, 11:21
Mình đang làm báo cáo về BẢNG MÃ TÁCH ĐƯỢC,nhưng không viết được code,xin các bác giúp dùm!nếu viết bằng C hoặc C++ thi rất tốt,em xin cám ơn
ĐÂY LÀ GIẢI THUẬT
Bài toán: Kiểm tra xem bảng mã W={a, c, ad, abb, bad, deb, bbcde} có phải là bảng mã tách được hay không?

Áp dụng Giải thuật kiểm tra tính tách được của một bảng mã:
Bước khởi tạo: S0={a, c, ad, abb, bad, deb, bbcde}
Bước 1: Tính S1
Khởi tạo S1={}
Vì a là tiền tố của ad nên đưa phần hậu tố “d” vào S1 => S1={d}.
Vì a là tiền tố của abb nên đưa phần hậu tố “bb” vào S1 => S1={d, bb}.
Kiểm tra điều kiện dừng: không thỏa -> qua bước 2.

Bước 2: Tính S2 từ S0 và S1.
Khởi tạo S2={}.
Vì d thuộc S1 là tiền tố của deb thuộc S0 nên đưa phần hậu tố “eb” vào S2
=> S2={eb}
Vì bb thuộc S1 là tiền tố của bbcde thuộc S0 nên đưa phần hậu tố “cde” vào S2
=> S2={eb, cde}
Kiểm tra điều kiện dừng: không thỏa -> qua bước 3.
Bước 3: Tính S3 từ S0 và S2.
Khởi tạo S3={}.
Vì c thuộc S0 là tiền tố của cde thuộc S2 nên đưa phần hậu tố “de” vào S3
=> S3={de}
Kiểm tra điều kiện dừng: không thỏa -> qua bước 4.
Bước 4: Tính S4 từ S0 và S3.
Khởi tạo S4={}.
Vì de thuộc S3 là tiền tố của deb thuộc S0 nên đưa phần hậu tố “b” vào S4
=> S4={b}
Kiểm tra điều kiện dừng: không thỏa -> qua bước 5.

Bước 5: Tính S5 từ S0 và S4.
+ khởi tạo S5={}.
+ Vì b thuộc S4 là tiền tố của bad thuộc S0 nên đưa phần hậu tố “ad” vào S5 => S5={ad}
+ Vì b thuộc S4 là tiền tố của bbcde thuộc S0 nên đưa “bcde” vào S5
=> S5={ad, bcde}
Kiẻm tra điều kiện dừng: Vì S5 có chứa từ mã ad nên dừng lại và kết luận đây là bảng mã không tách được.
ĐIỀU KIỆN DỪNG CỦA GIẢI THUẬT
-Nếu Sk = rỗng thì dừng và kết luận bảng mã tách được
-Nếu tồn tại từ mã wi trong Sk trung với các từ mã trong S0( có nghĩa là Sk giao S0 khác Ø thì dừng) và kết luận bảng mã không tách được.
-Nếu Sk=St<k thì dừng và kết luận bảng mã tách được (có nghĩa là vòng lặp quay lại những bước trên thành một chu trình khép kín)
EM XIN CÁM ƠN CÁC ANH RẤT NHIỀU