Tối ưu hóa mô hình

Một phần của tài liệu Nghiên cứu phương pháp xây dựng mô hình tự động (Trang 38)

Trong giải thuật 3.5, chúng ta đã đưa ra cách xây dựng một ôtômát để đoán nhận tập các dẫn xuất trên thành phần phần mềm C. Ôtômát thu được theo giải thuật trên là không đơn định, không tối tiểu. Tiếp theo, chúng ta sẽ nghiên cứu cách đơn định hóa và tối tiểu hóa ôtômát thu được.

Thuật toán Loại bỏ các quy tắc rỗng

Giải thuật 3.6 mô tả tuần tự các bước loại bỏ quy tắc rỗng (cung rỗng) của một ôtômát hữu hạn. Với mỗi cung rỗng từ đỉnh q1 đến đỉnh q2 trên đồ thị chuyển trạng thái, chúng ta thực hiện như sau:

 Nếu q2 không phải trạng thái kết thúc thì chúng ta sẽ tìm tất cả các cung xuất phát từ q2, sao đúp các cung tìm thấy sang bắt đầu từ đỉnh q1 với nhãn không đổi sang đỉnh tương ứng và loại bỏ cung rỗng.

 Nếu q2 là trạng thái kết thúc thì chúng ta sẽ tìm tất cả các cung đến đỉnh q1, sao đúp các cung tìm thấy sang kết thúc tại đỉnh q2 với nhãn không đổi từ đỉnh tương ứng và loại bỏ cung rỗng.

q18 q0 a q1 a q3 q4 b q5 q2 a q6 q7 c q8 c a b q9 q10 q11 q12 c b b q13 q14 q15 q16 a q17

 Loại bỏ các đỉnh không đến được từ đỉnh vào, các đỉnh không đến được đỉnh kết từ đó và các cung vào, cung ra của các đỉnh đó.

Thuật toán đơn định hóa

Giải thuật 3.7 mô tả phương pháp xây dựng một ôtômát đơn định từ ôtômát không đơn định. Với mỗi ôtômát không đơn định M = (Q, , , q0, F), chúng ta luôn xây dựng được một ôtômát đơn định M′ = (Q′, , ′, q0′, F) tương đương với M như sau:

 Q′ = 2Q,

Giải thuật 3.6: Loại bỏ cung rỗng ε Input: M = (Q, , , q0, F)

Output: M′ = (Q′, , ′, q0, F) không chứa cung rỗng 1: For each rule (q1, , q2) in do

2: if q2 in F then

3: For each rule (qi, a, q1) where a in do 4: add rule (qi, a, q2) to

5: delete rule (q1, , q2) from

6: End For

7: else

8: For each rule (q2, a, qi) where a in do 9: add rule (q1, a, qi) to

10: delete rule (q1, , q2) from 11: End For

12: For each state qi that is unreached from q0 or to state in F do 13: remove qi from Q

14: delete transactions outgoing from and ingoing to qi 15: End For

 q0′ = { q0},

 F′ là tập tất cả các tập con của Q có chứa phần tử của F: F′ = { S Q | S F }, và

 ′ được xác định như sau: ′({q1,q2,.., qk}, a) = .

Thuật toán tối tiểu hóa

Giải thuật 3.8 mô tả phương pháp tối tiểu hóa một ôtômát hữu hạn đơn định M. Tuần tự các bước của thuật toán được tiến hành như sau:

 Thiết lập phân hoạch 0 theo định nghĩa 0-tương đương. 0 ={Q1 0 ,Q2 0 } trong đó Q10 = F, Q2 0 = Q – F.  Xây dựng k+1 từ k. Xây dựng Qi k ( i = 1, 2, …) là các tập con của k và là các lớp (k+1)–tương đương. Hai trạng thái q1 và q2 nằm trong Qi

k nếu chúng là (k+1)–tương đương tức là (q1, a) và (q2, a) là k–tương đương với mọi a trên bảng chữ cái vào. Điều này có nghĩa là (q1, a) và (q2, a) nằm trong cùng một lớp tương đương nào đó của k.

Giải thuật 3.7: Đơn định hóa ôtômát Input: M = (Q, , , q0, F)

Output: M′ = (Q′, , ′, q0′, F′) là otomat đơn định 1: Khởi tạo, q0′ = { q0}, Q′ = { q0′} 2: do 3: lấy Q′ 4: do 5: Xét a 6: Tìm = ′( , a) = 7: Q′ = Q′ 8: while còn a chưa xử lý 9: while Q′ còn thay đổi

10: F′ = { Q′ | F } 11: return M′ (adsbygoogle = window.adsbygoogle || []).push({});

 Lặp lại bước 2 để thiết lập k cho đến khi k = k+1.

 Xây dựng ôtômát cực tiểu M′ với Q′ chính là tập các lớp tương đương của phân hoạch k. Các quy tắc thu được bằng cách thay trạng thái q bởi lớp tương đương tương ứng [q]. Tập trạng thái kết là các lớp tương đương chứa trạng thái kết của M. Trạng thái vào là các lớp tương đương chứa trạng thái q0 của M.

Giải thuật 3.8: Xây dựng ôtômát tối tiểu

Input: Cho trước ôtômát M = (Q, , , q0, F)

Output: Ôtômát tối tiểu M′ = (Q′, , ′, q0′, F′) tương đương với M 1: Khởi tạo, Q1 0 = F, Q2 0 = Q – F 2: do 3: for each Qj k-1 in k do 4 do 5: Qi k = {qj1} where qj1 in Qj k-1 6: for each qjt in Qj k-1 do 7: if qjt k+1 qj1 then 8: add qjt to Qik 9: remove qjt from Qjk-1 10: end if 11: end for 12: add Qi k to k+1 13: while Qj k-1 is not empty 14: while k k+1

15: for each rule (q1, a, q2) in do 16: replace by ([q1], a, [q2]) 17: return M′

Ví dụ 3.3: Cho ôtômát như trên hình 3.6-d thu được từ ví dụ 3.2. Hãy tối tiểu hóa ôtômát trên.

1) Loại bỏ các quy tắc rỗng (theo thuật toán 3.6)

Với cung rỗng từ q0 đến q1, chúng ta tìm được các cung từ q1 đi ra là (q1, a, q2). Chúng ta loại bỏ cung rỗng từ q0 đến q1 và thêm vào cung từ q0 đến q2 với nhãn là a. Tiến hành tương tự với các cung rỗng từ q0 đến q3, q6, q9, q13. Tiếp theo, ta loại bỏ các đỉnh không đến được từ trạng thái q0 và các cung đi ra từ các đỉnh đó. Các đỉnh q1, q3, q6, q9, q13 và các cung (q1, a, q2), (q3, a, q4), (q6, a, q7), (q9, b, q10), (q13, b, q14) bị loại bỏ.

Với cung rỗng từ q2 đến q18, chúng ta tìm được các cung đi vào q2 là (q0, a, q2). Chúng ta tiến hành loại bỏ cung rỗng từ q2 đến q18 và thêm vào cung từ q0 đến q18 với nhãn là a. Tiến hành tương tự cho các cung rỗng từ q5, q8, q12, q17. Tiếp theo ta loại bỏ tất cả các đỉnh không đến được đỉnh kết từ đó và các cung vào tương ứng với các đỉnh đó.

Đánh số lại thứ tự các đỉnh chúng ta thu được đồ thị tương ứng đã loại bỏ các quy tắc rỗng được mô tả trong hình 3.7–a.

Hình 3.7–a: Ôtômát đã loại bỏ quy tắc rỗng. q0 q1 q2 q3 q4 q5 q6 q7 a a a c b c a b b c a b q8

2) Đơn định hóa ôtômát (theo thuật toán 3.7)

Xây dựng ôtômát M′ = (Q′, , ′, q0′, F′) đơn định, tương đương với ôtômát trên hình 3.7–a. Chúng ta xây dựng các quy tắc chuyển trạng thái của M′ như sau:

Chúng ta xây dựng các quy tắc chuyển trạng thái đến các phần tử kế tiếp theo thuật toán 3.7, bắt đầu từ tập trạng thái khởi tạo {q0}, ký hiệu [q0]. Ta thấy từ [q0] có thể đến được [q8, q1, q2] qua các cung với nhãn là a và đến được [q3, q5] qua các cung với nhãn là b. Các tập trạng thái [q8, q1, q2], [q3, q5] được kết nạp vào tập trạng thái Q′ của ôtômát M′. Từ trạng thái [q8, q1, q2] có thể đến được trạng thái [q8] qua các cung với nhãn là b và c. Trạng thái [q8] được kết nạp vào Q′. Tiến hành tương tự như trên cho đến khi Q′ không có sự thay đổi thì chúng ta thu được ôtômát đơn định M′ với tập trạng thái kết F′ = { [q1, q2, q8], [q8] }, đánh số lại các trạng thái của ôtômát M′ ta thu được đồ thị chuyển trạng thái được mô tả trong hình 3.7–b.

Hình 3.7–b: Ôtômát đơn định. 3) Tối tiểu hóa (Thuật toán 3.8)

Xây dựng ôtômát tối tiểu tương đương với ôtômát có đồ thị chuyển trạng thái như trên hình 3.7–b.

Theo thuật toán 3.8 chúng ta xây dựng được phân hoạch 0 = {Q10, Q20} trong đó Q10 = {q1, q5}, Q20 = { q0, q2, q3, q4} q0 q2 q3 q4 a c b c a a b q5 q1 b

Chúng ta xét tiếp các quan hệ 1–tương đương để tính 1. Ta dễ dàng kiểm tra được q1 và q5 không phải là 1–tương đương nên Q1

1

= {q1 }, Q2 1

= { q5}. Tương tự ta xây dựng được Q3

1 = {q0, q3}, Q4 1 = {q2}, Q5 1 = {q4}.

Tiếp theo chúng ta xét các quan hệ 2–tương đương để tính 2. Trước tiên ta có Q1

2

= {q1 }, Q2 2

= { q5}. Các trạng thái q0 và q3 không phải là quan hệ 2–tương đương nên Q3

2 = {q0}, Q4 2 = { q3} và Q5 2 = {q2 }, Q6 2 = { q4}. Như vậy mỗi một lớp tương đương trong phân hoạch 2 đều chỉ chứa một trạng thái qi Q nên phân hoạch kế tiếp 3 không thay đổi so với phân hoạch 2 và số lớp tương đương của phân hoạch 2 đúng bằng số trạng thái của ôtômát có đồ thị chuyển như trên hình 3.7–b. Vậy ôtômát trên là tối tiểu.

Một phần của tài liệu Nghiên cứu phương pháp xây dựng mô hình tự động (Trang 38)