2.2 Tìm k im dãy tr ng thái yđ
2.2.1 Th tc Searching_Sequence
Th t c đ c xây d ng d a trên ph ng pháp vét c n, cho phép li t kê các dãy
tr ng thái đ y đ i (nh ng đ ng đi Hamilton có th t topo) trên m t đ th
chuy n tr ng thái T có n đ nh cho tr c. Kh i đ u nh ng dãy i ch có m t đ nh
duy nh tv0(là đ nh kh i đ u c aT), sau đó là các đ nh khác c aTl n l t đ c ghi
vào icho đ n khi ilà m t dãy tr ng thái đ y đ [5].
Procedure SEARCHING_SEQUENCE
(* Input: đ th chuy n tr ng tháiT, đ nh kh i đ uv0, đ nh k t thúcvn-1.
t1 t2 t3 t4
18
Output: T h p l , các dãy tr ng thái đ y đ i , ghi k t qu ra File hay thông báoT
không h p l .*) Dem : integer; begin Kh i t o i, ban đ u ch cóv0; whileđ nh cu ikc a i < > vn-1do begin Dem := 0; for each ido(* v i m i i *) begin (*xét các đ nh li n k c ak *) for j ke(k) do begin ifj ke(k) do Dem := Dem + 1; end; if (Dem = 1) then Thêm jvào cu i i; if (Dem > 1) then begin
T o (Dem–1) dãy m i và ch s cho m i dãy tăng 1;
(* 2, 3, 4,..*)
Chép các đ nh trong it i các dãy m i;
Thêm các jkhác nhau vào cu i m i ivà các dãy m i;
end; end;
end;
if Tìm đ c dãy tr ng thái đ y đ then
begin
Thông báo Th p l ;
Thông báo các dãy tr ng thái đ y đ i;
Ghi k t qu ra File;
end; else
Thông báo l i (Tkhông h p l );
end;
Hình 2.3 Th t c Searching_Sequence [5]
2.2.2 K t qu th c hi n th t c
19
Hình 2.4 M t ví d tìm ki m dãy tr ng thái đ y đ trên đ th chuy n tr ngthái
Ta có k t qu th c hi n th t c nh sau:
Th p l (Tlà đ th n a Hamilton).
Các dãy tr ng thái đ y đ trênTnh sau:
s0 → s1 → s2 → s3 → s4 → s5 s0 → s1 → s2 → s4 → s3 → s5 s0 → s1 → s3 → s2 → s4 → s5
2.2.3 Phân tích th t c:
Xét th t c SEARCHING_SEQUENCE, vì v0, vn-1đã bi t tr c, hay nói cách khác,
đã c đ nh đ nh đ u và đ nh cu i nên ch có m t cách đ ch n đ nh đ u và đ nh k t
thúc.
G i d là b c c c đ i c a T. Khi đó, các đ nh trung gian có t i đa d cách l a ch n
(hay d c nh đi ra). Do đó, có t i đa 1*d*...*d*1 = dn-2 dãy tr ng thái đ y đ trênT,
hay đ ph c t p c a thu t toán (th t c) làO(dn-2).
2.2.4 Nh n xét và đánh giá
Th t c SEARCHING_SEQUENCE s d ng vòng l p nên gi m đ c chi phí b nh và cũng d qu n lý h n so v i th t c đ c xây d ng b ng thu t toán đ quy.
Trong ng d ng th c t , th t c SEARCHING_SEQUENCE ch đ c th c hi n
m t l n (k t qu đ c l u ra file) nên chi phí c a th t c không nh h ng đ n chi
S
S S
S
20
phí ki m tra ràng bu c toàn v n c a bài toán ng d ng trong lu n văn. H n n a, d
là khá nh so v i n, đ c bi t khi n th t l n (b cd c aT không thay đ i khi s đ nh
c a đ th tăng cao).
2.3 Ki m tra ràng bu c toàn v n trên đ th chuy n tr ng thái
Trong m c này, lu n văn t p trung vào vi c ki m tra ràng bu c toàn v n trên m t đ th chuy n tr ng thái cho tr c, và gi s m i đ nh c a nó t ng đ ng v i m t (nhóm) đ i t ng trong c s d li u th i gian.
Vi c c p nh t m t đ nh cũng gi ng nh c p nh t m t b (hay m t s b ) c a b ng. Do đó đ đ n gi n, chúng ta g i nó là c p nh t t i m t đ nh. Vi c ki m tra ràng
bu c toàn v n liên quan đ n các thao tác chèn (insert), s a (update), xoá (delete) và
ch c ch n liên quan đ n m t đ nh nào đó. Vì v y c n xét c th ba tr ng h p c a thao tác c p nh t.
Khi m t đ th chuy n đ i tr ng thái s t o thành nhi u dãy tr ng thái khác nhau, lúc đó vi c ki m tra toàn v n trên các dãy tr ng thái đó cũng s khác nhau, ta g i đó là vi c ki m tra ràng bu c toàn v n trên nhi u phiên b n
2.3.1 Thao tác chèn
M t đ i t ng Ob có th đ c chèn vào m t đ nh su c a m t đ th chuy n tr ng
thái. Đi u đó có nghĩa, Ob di chuy n t i su. Tuỳ vào các dãy tr ng thái đ y đ c a
đ th , có th các tr ng h p ki m tra ràng bu c toàn v n t isus khác nhau.
21
Hình 2.5 Đ th chuy n tr ng thái có hai dãy tr ng thái đ y đ
Trong ví d trên (Hình 2.5), s d ng m t đ th chuy n tr ng thái đ n gi n đ minh ho cho vi c ki m tra các ràng bu c toàn v n tuỳ theo tr ng thái mà ng i dùng l a ch n. Trong ví d này, nó có hai dãy tr ng thái đ y đ làs0, s1, s2, s3, s4 và s0, s1, s3, s2, s4. Vi c di chuy n c aOb trong đ th này đ c t ch n m ttrong hai dãy tr ng
thái trên.
- N u Ob đ c chèn vào đ nh s0 và hi n t i Ob ch a t n t i b t kỳ đ nh nào, không c n ki m tra ràng bu c toàn v n.
- N uObđang đ nhs1 và có m t thao tác chèn,Obcó th l a ch ns2 ho cs3. - N uObđang đ nhs2 và có m t thao tác chèn,Obcó th l a ch ns3 ho cs4. - N uObđang đ nhs3 và có m t thao tác chèn,Obcó th l a ch ns2 ho cs4. 2.3.2 Thao tác s a
Thao tác này không ph i ki m tra ràng bu c toàn v n vì đ i t ng có d li u t i m t đ nh, có nghĩa nó đã di chuy n đ n đ nh đó. Vì v y, đ i t ng không vi ph m các dãy tr ng thái đ y đ trong đ th chuy n tr ng thái. Tuy nhiên, c n c n ki m tra d li u có tính th i gian (valid-time) cho phù h p nh đ nh nghĩa 4 ho c n u nh đ i t ng là m t nhóm các đ i t ng con (nhóm g m nhi u h c ph n) thì c n ki m tra h p l vi c thay đ i (thay th ) các đ i t ng con.
S0 S1
S3
22 2.3.3 Thao tác xoá
M t đ i t ng có th b xoá t i m t đ nh (m t b b xoá). Thao tác này ph i đ c ki m tra xem có tho mãn đ nh nghĩa 3 (ràng bu c toàn v n trên dãy chuy n tr ng
thái) trong m c 2.1 hay không. N u đ nh nghĩa 3 không đ c tho , thao tác xoá b t ch i.
2.4 Các th t c ki m tra ràng bu c toàn v n.
Xét m t đ th chuy n tr ng tháiT có nđ nh, v is0là đ nh kh i đ u,sulà đ nh đ c c p nh t, ts, te là các giá tr th i gian h p l kh i đ u và k t thúc c a m t đ i t ng
Ob, TOblà m t b ng d li u (Data table), ghi l i các đ nh màObđã di chuy n qua. Gi s Th p l và ilà các dãy tr ng thái đ y đ trongT.
Quá trình th c hi n ràng bu c toàn v n và vi c ki m tra th c hi n ràng bu c toàn v n c a đ i t ng đ c mô t m t cách t ng quát nh Hình 2.6 bên d i.
23
Hình 2.6 Mô t t ng quát vi c ki m tra đ i t ng th c thi ràng bu c toàn v n
2.4.1 Ki m tra thao tác c p nh t
M i thao tác c p nh t Insert hay Delete c a m t Ob trên m t đ th chuy n tr ng
thái Tđ c g i là m t th c hi n ràng bu c toàn v n trênT.
Vi c ki m tra ràng bu c toàn v n v i các thao tác này đ c th c hi n b i các th t c INSERT_CHECK và DELETE_CHECK, đ c trình bày nh sau:
24 Procuedure INSERT_CHECK(us, ts, te, i) begin
if (su = s0 AND Obch a t n t i trongT ) then begin Chèn Ob vào su; Chèn su vào TOb ; end if (sulà đ nhObđã di chuy n đ n)then begin (* so sánh (ts, te) v i (t’s, t’e) – giá tr th i gian h p l c a Obđ c c p nh t t isutr c đó *)
if (ts ≥ t’s) then (* tho mãn đ nh nghĩa 4 *)
Chèn Ob vào su; else
Thông báo l i (Thao tác không h p l )
end;
if (su <> s0 AND Obch a di chuy n đ su) then begin T o m t danh sách r ngLtemp; MATCHING(Ltemp, i); if (su Ltemp) then begin Chèn Ob vào su; Chèn su vào TOb; end; else
Thông báo l i (Thao tác không h p l );
end; end;
Function MATCHING (Ltemp, i) t: integer;
begin t := 0;
for each ( i in T ) do
if (tph n t đ u tiên c a i = TOb ) then begin Chèn ph n t (t+1) c a i vào Ltemp ; Lo i b t ph n t trùng, ch gi l i nh ng ph n t phân bi t trong Ltemp ; end; (* return Ltemp *) end;
25 Procedure DELETE_CHECK (su)
Begin
If (Tho mãn đ nh nghĩa 3)then Xoá Obt i đ nhsu; End; Procedure CHECK (* global variables: T, Ob *) Begin Do case of Ob inserted : INSERT_CHECK (su, ts, te, i ) Ob deleted : DELETE_CHECK (su); End; End; Hình 2.7 Ki m tra thao tác c p nh t 2.4.2 Ki m tra th c hi n ràng bu c toàn v n
Vi c ki m tra th c hi n ràng bu c toàn v n chính là ki m tra đ i t ng th c thi các ràng bu c có th t trên nh ng dãy tr ng thái đ y đ iđ c tìm ra t đ th chuy n tr ng tháiT.
Th t c CHECKING
B t c lúc nào, ng i s d ng cũng có th ki m tra quá trình đã th c hi n các ràng bu c toàn v n c a m t đ i t ng. N u đ i t ng tho mãn đ y đ các ràng bu c toàn v n thì t t c các ph n t trong m t dãy tr ng thái đ y đ nào đó đ c đánh d u, nghĩa là đã đ c đ c li t kê đ y đ trongTOb(Xem th t c trong Hình 2.7).
Theo đó, th t c Checking ho c thông báo đ i t ng đã th c hi n xong các ràng bu c toàn v n ho c hi n th m t danh sách các ràng bu c toàn v n mà đ i t ng đã th c hi n. Th t c CHECKING đ c trình bày nh sau:
26 Procedure CHECKING
t: integer; begin
t ≔0;
for each (su in Tob) do t = t+1;
for each ( i in T) do
if (t = n) AND Tob = i) then
Thông báo (Obđã th c hi n xong các RBTV)
else Các RBTV đã th c hi n làTOb; Thông báo ng i s d ng có th l a ch n các ph n t (t+1) c a i; end; Hình 2.8 Ki m tra th c hi n ràng bu c toàn v n Tính đúng đ n c a th t c Checking
Th t c CHECKING luôn mang l i nh ng k t qu đúng.
Gi s chúng ta cókdãy tr ng tháiđ y đ (k> 0), m i dãy cón ph n t (n> 1) nh
sau:
1 = (s0, ..., sn-1) 2 = (s0, ..., sn-1) ...
k = (s0, ..., sn-1)
Các ph n t n m trong kho ng s0 đ n sn-1 là gi ng nhau, ch khác nhau v th t . M i l n th c hi n, th t c INSERT_CHECK ch ra m t đ nh su mà ng i s d ng l a ch n, có th đ c c p nh t hay không. N u su đ c c p nh t, nó s đ c ghi
vào TOb. Nh v y, sau m t th i gian th c thi ràng bu c toàn v n s có ít nh t m t dãy tr ng thái đ y đ imà các ph n t c a nó đ c đánh d u, nghĩa là đ c li t kê đ y đ trong TOb. Nói cách khác, đ i t ng đã th c hi n xong các ràng bu c toàn v n đ c gán cho nó. N u không, m t danh sách các ràng bu c toàn v n su mà đ i t ng đã th c hi n s đ c hi n th .
27
2.4.3 Ví d minh ho v vi c ki m tra th c hi n ràng bu c toàn v n
Xét đ th chuy n tr ng thái nh Hình 2.4, và gi s đây là mô hình đào t o cho sinh viên theo h c t i m t c s đào t o nào đó.
Theo đó, đ hoàn thành ch ng trình đào t o, m t sinh viên ph i h c đ các h c ph n t s0đ s5 (trong đó s0 là nhóm h c ph n c s ph i h c đ u tiên,s5 là nhóm
h c ph n đ t t nghi p) tho mãn các ràng bu c toàn v n đ c ch ra trong k t qu th c hi n th t c SEARCHING_SEQUENCE (đã trình bày trong m c 2.2.2 bên trên):
s0→ s1→ s2→ s3→ s4 → s5 (1) s0→ s1→ s2→ s4→ s3 → s5 (2) s0→ s1→ s3→ s2→ s4 → s5 (3)
D a trên các th t c đã đ c trình bày trong các m c 2.4.1 và 2.4.2, sinh viên này
có th đăng ký, tham gia vào các nhóm h c ph n sucũng nh theo dõi quá trình h c t p c a mình nh sau:
T i th i đi mt0:
T t c các sinh viên ph i hoàn t t nhóm h c ph n c s . Vì v ys0đ c chèn vào c s d li u th i gian, và đ c đánh d u:TOb = {s0}
T i th i đi mt1 ngay sau t0:
Khi đã k t thúc nhóm h c ph ns0.
Thông báo (h c ph n đã đ c th c hi n: s0. Sinh viên có th đăng ký h c ph n ti p
theo: s1).
Lúc này, n u nhà tr ng đã chu n b nhóm h c ph n s1, sinh viên này có th đăng ký đ theo h c s1. Vì v ys1 đ c chèn vào c s d li u th i gian, đ c đánh d u: TOb = {s0, s1}.
28
Khi đã k t thúc nhóm h c ph n s1, và gi s , lúc này nhà tr ng đã chu n b c 2 nhóm h c ph ns2 và s3, tuỳ theo l trình sinh viên đã ch n lúc đ u mà có thông báo t ng ng đ sinh viên có th ch ns2 hay s3. Vì v ys2ho cs3đ c chèn vào c s d li uth i gian, s2ho cs3đ c đánh d u:
TOb = {s0,s1, s2} (n u sinh viên đã ch n l trình (1) hay (2)) Ho cTOb = {s0,s1, s3} (n u sinh viên đã ch n l trình (3)).
T i th i đi mt3 sau t2:
Khi đã k t thúc nhóm h c ph ns2(ho cs3).
- Thông báo (h c ph n đã th c hi n: s0, s1, s2 – Sinh viên có th đăng ký h c: s3). Do tr c đó nhà tr ng đã có m s3 (cho l trình (3)) nên sinh viên có th đăng
ký s3. Do v ys3đ c chèn vào c s d li u th i gian và s3đ c đánh d u: TOb = {s0,s1, s2, s3} (n u sinh viên đã ch n l trình (1))
- T ng t : Thông báo (h c ph n đã th c hi n:s0, s1, s3– Sinh viên có th đăng ký h c:s2). S2đ c chèn vào c s d li u th i gian và đ c đánh d u:
TOb = {s0,s1, s3, s2} (n u sinh viên đã ch n l trình (3)). - Riêng v i sinh viên ch n l trình (2):
Thông báo (h c ph n đã th c hi n:s0, s1, s2–B n có th đăng ký h c: s4). N u lúc này nhà tr ng đã chu n b nhóm h c ph n s4 thì sinh viên có th đăng ký s4. Do
v y,s4đ c chèn vào c s d li u th i gian và đ c đánh d u: TOb = {s0,s1, s2, s4}
T i th i đi mt4 sau t3:
29
- Thông báo (h c ph n đã th c hi n:s0, s1, s2, s3– Sinh viên có th đăng ký h c: s4). Do tr c đó nhà tr ng đã có m s4 (cho l trình (2)) nên sinh viên có th đăng
ký s4. Do v ys4đ c chèn vào c s d li u th i gian và s3đ c đánh d u: TOb = {s0,s1, s2, s3, s4} (n u sinh viên đã ch n l trình (1))
- T ng t ta có thông báo t ng ng và chèn vào c s d li u cũng nh đánh d u các nhóm h c ph n nh sau: TOb = {s0,s1, s2, s4, s3} (n u sinh viên đã ch n l trình (2)) Ho c TOb = {s0,s1, s3, s2, s4} (n u sinh viên đã ch n l trình (3)) T i th i đi mt5 sau t4: Khi đã k t thúc nhóm h c ph ns2 (s3ho cs4). Vì đã đ n nhóm h c ph n cu i đ t t nghi p nên:
- V i sinh viên đăng ký theo l trình (1) thì:
Thông báo (h c ph n đã th c hi n:s0, s1, s2, s3, s4–B n có th đăng ký h c:s5). N u lúc này nhà tr ng đã có m s5thì sinh viên có th đăng ký s5. Do v ys5đ c chèn vào c s d li u th i gian vàs5đ c đánh d u:
TOb = {s0,s1, s2, s3, s4, s5} (n u sinh viên đã ch n l trình (1))
- T ng t cho sinh viên đăng ký theo l trình (2) hay (3) s có thông báo t ng ng và đ c đánh d u nh sau:
TOb = {s0,s1, s2, s4, s3, s5} (n u sinh viên đã ch n l trình (2)) Hay
TOb = {s0,s1, s3, s2, s4, s5} (n u sinh viên đã ch n l trình (3)) T i th i đi mt6 sau t5:
30
Khi đã k t thúc nhóm h c ph ns5.
- Thông báo (h c ph n đã th c hi n: s0, s1, s2, s3, s4, s5 – B n đã hoàn thành