Thuật toán kiểm chứng LDI tổng quát

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Cải tiến thuật toán chứng minh tính đúng đắn công thức khoảng (Trang 35 - 38)

CHƯƠNG 3: THUẬT TOÁN CẢI TIẾN

Thuật toán LDI được xây dựng ở trên vẫn còn độ phức tạp thời gian cao, hàm mũ trong trường hợp xấu nhất khi phải duyệt tất cả các trạng thái, chu trình đồ thị. Mặc dù thuật toán LDI đã cung cấp câu trả lời tính thoả hay không thoả nhưng do số trạng thái là nhiều nên ảnh hưởng đến hiệu quả của kiểm chứng. Vì vậy vấn đề được đặt ra là giảm độ phức tạp thuật toán, giảm thời gian xử lí. Trong chương này luận văn xin trình bày phương pháp giảm độ phức tạp bằng cách cải tiến đồ thị trọng số LDI.

3.1.Ý TƯỞNG

Trong quá trình duyệt đồ thị LDI ta thấy: Đặc tính của LDI là gồm các cung có độ dài = 0 hoặc 1, cạnh e = (v, v’, l, u) sẽ được chia thành u - 1 đỉnh. Với các cung có độ dài liên tiếp bằng 1 thì xảy ra trường hợp:

+ Trường hợp 1: duyệt hết các cung này hệ thống vẫn thoả công thức kiểm chứng thì lãng phí rất nhiều thời gian duyệt, thay vì duyệt từng cung như vậy ta có thể gộp các cung này thành 1 cung lớn có trọng số bằng tổng các cung thành phần, như vậy số đỉnh sẽ được rút lại rất nhiều (kết hợp xem hình 3.1, 3.2).

+ Trường hợp 2: là khi gộp mà yếu tố l(p)  B, ta chưa quay lui thuật toán mà tiến hành duyệt các đỉnh con (chia như cũ) xem điều kiện ( )pM có thoả mãn hay không, nếu trong trường hợp duyệt 1 đỉnh “con” không thoả mãn ( )pMthì dừng thuật toán ngay và trả lời không thoả mãn.

Nhìn một cách trực quan ta có thể hình dung:

Hình 3-1: Minh hoạ 2 cung được xây dựng trong đồ thị có trọng số

Xuất phát từ y tưởng trên ta phải xây dựng thuật toán cho phù hợp. Như vậy ta có thể gộp lại bước xây dựng đồ thị LDI. Từ RG ta xây dựng nếu:

Với e = (v, v’, l, u):

Bước 1: Giữ nguyên tập đỉnh, cung: V = V’, E = E’

Bước 2: với mỗi cung (vi, vj, [l, u]) thì V, E,  của G được xác định như sau: + Nếu l = u, G sẽ giữ nguyên e = (v, v’)

+ Nếu l < u:  E = E- e  E = E (v vi , il) , (v vi, il)l  E = E  1  1 ij ij ij ij ij ij ij ij (vk,vk ) |k l ,...,u 1 ,(vk,vk ) 1, k l ...u 1         E = E  1  1 ij ij ij ij ij ij ij ij (vk,vk ) |k l ,...,u 1 ,(vk,vk ) 0, k l ...u 1       

3.2.THUẬT TOÁN CẢI TIẾN

Với cách xây dựng đồ thị như vậy thì ta phải cải tiến thuật toán duyệt đồ thị cho phù hợp:

Bước 1: Chuyển ôtômat sang đồ thị vùng đạt được nguyên.

Tại bước này vẫn được giữ nguyên như thuật toán cũ.

Bước 2: Chuyển đồ thị vùng nguyên sang đồ thị trọng số LDI cải tiến: các cung có trọng số bằng l, 1, 0.

Cách chuyển đã được xây dựng ở mục 3.1.

Bước 3: Duyệt đồ thị trọng số LDI để tính toán và đưa ra kết luận hệ ôtômat có thoả LDI hay không.

Trong thuật toán cải tiến ở bảng 3-1 so với thuật toán được mô tả trong bảng 2- 2. Việc cải tiến thể hiện ở các bước sau:

- Cải tiến 1 bước 4 khi thực hiện push(v, Adj(v), p); thì đồng thời cũng thực hiện tính toán lại:

l(p) = l(p) + li (1 < li = độ dài của cung (p, v)) θ(p) = θ(p) + θ(li) (θ(li) = giá của cung (p, v))

- Cải tiến 2 bước 7:

Ở bước này ta xét các trường hợp xảy ra:

TH 1: l(p) thực sự lớn hơn B, tức là nếu ta phân tích li thành: + x = 1, 2, … k … l. L(p) = l(p) + x với x < k.

+ l(p) = l(p) + xi, xi = 1, 2 , …k và ( )p < M .

+ l(p) = l(p) + xi > B, xi = k+1, …, li ở trường hợp này thuật toán quay lui.

TH2: l(p) > B nhưng tồn tại số k (1  k < li) sao cho:

l(p) = l(p) + xi B và θ(p) > M tại trường hợp này thì thuật toán phải dừng. Trong cải tiến bước 7 đã bao quát tất cả các trường hợp có thể xảy ra nếu l(p) > B

{input : G =(V,E),D} {Đồ thị LDI cải tiến}

{output : TRUE nếu và chỉ nếu G(vstart) |= D}

Function Traverse(vstart):Boolean;

Begin

Bước 1: p = rong; push(vstart, Adj(vstart), p);

Bước 2: While p <>  do

Begin

Bước 4.1: v = succ(p);

Bước CT1: if l(p) < A then begin reach = 0; end;

Bước 4.2: push(v, Adj(v), p);

Bước 5: if l(p) < A then begin reach = 0; loop; end;

Bước 6: if reach = 0 then begin preach = v; reach =1; end;

Bước 7 CT2 : if l(p) > B then begin {TrƯH1,TH2: xem phân tích dưới}

if TH2 then begin return FALSE;

if TH1 begin pop(p); loop; end; {quay lui}

end;

Bước 8: if (θ(p) >M) then return FALSE; {A ≤ l(p) ≤ B}

Bước 9: if ∃C (đoạn từ preach đến v) và B = ∞ then

begin

Bước 10: if θ(C) > 0 then return FALSE;

Bước 11: if θ(C) ≤ 0 then pop(p); {quaylui}

end ;

end;

Return TRUE;

End;

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Cải tiến thuật toán chứng minh tính đúng đắn công thức khoảng (Trang 35 - 38)

Tải bản đầy đủ (PDF)

(61 trang)