Giáo trình MS SQL Server 7.0
Collected by The_Wall (11/10/2005) M c tiêu Ki n th c c b n c n có h c ch ng Tài li u tham kh o có liên quan n ch ng N i dung: I.1 - S c n thi t ph i phân tích gi i thu t I.2 - Th i gian th c hi n c a gi i thu t I.3 - T su t t ng ph c t p c a gi i thu t I.4 - Cách tính ph c t p I.5 - Phân tích ch ng trình quy V n nghiên c u c a trang k ti p Trong ch ng s nghiên c u v n sau: · S c n thi t ph i phân tích gi i thu t · Th i gian th c hi n c a ch · T su t t ng ng trình ph c t p c a gi i thu t · Tính th i gian th c hi n c a ch · Phân tích ch I.1- S ng trình ng trình quy C N THI T PH I PHÂN TÍCH GI I THU T Trong gi i m t tốn có th có m t s gi i thu t khác nhau, v n c n ph i ánh giá gi i thu t ó l a ch n m t gi i thu t t t (nh t) Thơng th ng ta s c n c vào tiêu chu n sau: 1.- Gi i thu t úng n 2.- Gi i thu t n gi n 3.- Gi i thu t th c hi n nhanh V i yêu c u (1), ki m tra tính úng n c a gi i thu t có th cài t gi i thu t ó cho th c hi n máy v i m t s b d li u m u r i l y k t qu thu c so sánh v i k t qu ã bi t Th c cách làm khơng ch c ch n b i có th gi i thu t úng v i t t c b d li u ã th nh ng l i sai v i m t b d li u ó V l i cách làm ch phát hi n gi i thu t sai ch ch a ch ng minh c úng Tính úng n c a gi i thu t c n ph i c ch ng minh ng toán h c T t nhiên u không n gi n v y s không c p n ây Khi vi t m t ch ng trình s d ng m t vài l n yêu c u (2) quan tr ng nh t Chúng ta c n m t gi i thu t d vi t ch ng trình nhanh chóng có c k t q a , th i gian th c hi n ch ng trình khơng c cao dù ch ng trình ó c ng ch s d ng m t vài l n mà Tuy nhiên m t ch Giáo trình mơn Phân tích Gi i Thu t – ng trình I c s d ng nhi u l n thì yêu c u ti ït ki m th i gian C C N TH Trang Collected by The_Wall (11/10/2005) th c hi n ch ng trình l i r t quan tr ng c bi t i v i nh ng ch ng trình mà th c hi n c n d li u nh p l n ó yêu c u (3) s c xem xét m t cách k Ta g i hi u qu th i gian th c hi n c a gi i thu t I.2- TH I GIAN TH C HI N C A GI I THU T I.2.1- Th i gian th c hi n ch ng trình I.2.2n v o th i gian th c hi n I.2.3- Th i gian th c hi n tr ng h p x u nh t M t ph ng pháp xác nh hi u qu th i gian th c hi n c a m t gi i thu t l p trình o ng th i gian th c hi n c a ho t ng m t máy tính xác nh i v i t p h p c ch n l c li u vào Th i gian th c hi n không ch ph thu c vào gi i thu t mà ph thu c váo t p ch th a máy tính, ch t l ng c a máy tính k x o c a ng i l p trình S thi hành c ng có th u ch nh th c hi n t t t p c bi t d li u vào c ch n v t qua tr ng i này, nhà khoa h c máy tính ã ch p nh n tính ph c t p c a th i gian c ti p c n nh m t s o l ng c n s th c thi c a gi i thu t Thu t ng tính hi u qu s c p n s o l ng c bi t i i s ph c t p th i gian tr ng h p x u nh t I.2.1- Th i gian th c hi n ch ng trình Th i gian th c hi n m t ch ng trình m t hàm c a kích th kích th c ( l n) c a d li u vào Ví d 1-1: Ch t h ng s c d li u vào, ký hi u T(n) ó n ng trình tính t ng c a n s có th i gian th c hi n T(n) = cn ó c Th i gian th c hi n ch ng trình m t hàm khơng âm, t c T(n) ≥0 ∀n≥0 I.2.2n v o th i gian th c hi n n v c a T(n) không ph i n v o th i gian bình th ng nh gi , phút giây mà th c xác nh b i s l nh c th c hi n m t máy tính lý t ng ch Ví d 1-2: Khi ta nói th i gian th c hi n c a m t ch ng trình y c n cn ch th th c thi ng ng trình T(n) = cn có ngh a I.2.3- Th i gian th c hi n tr ng h p x u nh t Nói chung th i gian th c hi n ch ng trình khơng ch ph thu c vào kích th c mà cịn ph thu c vào tính ch t c a d li u vào Ngh a d li u vào có kích th c nh ng th i gian th c hi n ch ng trình có th khác Ch ng h n ch ng trình s p x p dãy s nguyên t ng d n, ta cho vào dãy có th t th i gian th c hi n khác v i ta cho vào dãy ch a có th t , ho c ta cho vào m t dãy ã có th t t ng th i gian th c hi n c ng khác so v i ta cho vào m t dãy ã có th t gi m Vì v y th ng ta coi T(n) th i gian th c hi n ch ng trình tr ng h p x u nh t li u vào có kích th óc n, t c là: T(n) th i gian l n nh t th c hi n ch ng trình i v i m i d li u vào có kích th c n I.3- T SU T T NG VÀ Giáo trình mơn Phân tích Gi i Thu t – PH C T P C A GI I THU T I C C N TH Trang Collected by The_Wall (11/10/2005) I.3.1- T su t t ng I.3.2- Khái ni m ph c t p c a gi i thu t I.3.1- T su t t ng Ta nói r ng hàm khơng âm T(n) có n0 cho T(n) f(n) v i m i n n0 Ta có th ch ng minh su t t ng f(n) c a nó” su t t ng (growth rate) f(n) n u t n t i h ng s c c r ng “Cho m t hàm không âm T(n) b t k , ta ln tìm ct Ví d 1-3: Gi s T(0) = 1, T(1) = t ng quát T(n) = (n+1)2 t n0 = c = v i m i n d dàng ch ng minh r ng T(n) = (n+1)2 4n2 v i m i n 1, t c t su t t ng c a T(n) n2 Ví d 1-4: T su t t ng c a hàm T(n) = 3n3 + 2n2 n3 Th c v y, cho n0 = c = ta d dàng ch ng minh r ng v i m i n 3n3 + 2n2 5n3 I.3.2- Khái ni m ph c t p c a gi i thu t Gi s ta có hai gi i thu t P1 P2 v i th i gian th c hi n t ng ng T1(n) = 100n2 (v i t su t t ng n2) T2(n) = 5n3 (v i t su t t ng n3) Gi i thu t s th c hi n nhanh h n? Câu tr i ph thu c vào kích th c d li u vào V i n < 20 P2 s nhanh h n P1 (T2a[j] then Swap(a[j-1], a[j]); end; Trong cách vi t trên, ch ng trình Bubble g i ch ng trình Swap, ó tính th i gian th c hi n c a Bubble, tr c h t ta c n tính th i gian th c hi n c a Swap D th y th i gian th c hi n a Swap O(1) ch bao g m l nh gán Trong Bubble, l nh {3} g i Swap nên ch t n O(1), l nh {2} th c hi n n-i l n, m i l n t n O(1) nên t n O(n-i) L nh {1} th c hi n n-1 l n nên I.5- PHÂN TÍCH CÁC CH NG TRÌNH QUY I.5.1- Thành l p ph ng trình quy I.5.2- Gi i ph ng trình quy V i ch ng trình có g i ch ng trình quy, ta khơng th áp d ng cách tính nh a trình bày m c I.4.4 b i m t ch ng trình quy s g i b n thân ph quy V i ch ng trình quy, tr c h t ta c n thành l p ph ng trình quy, sau ó gi i ng trình quy, nghi m c a ph ng trình quy s th i gian th c hi n c a ch ng trình I.5.1- Thành l p ph ng trình quy Ph ng trình quy m t ph ng trình bi u di n m i liên h gi a T(n) T(k), ó T(n) th i gian th c hi n ch ng trình v i kích th c d li u nh p n, T(k) th i gian th c hi n ch ng trình v i kích th c d li u nh p k, v i k < n thành l p c ph ng trình quy, ta ph i c n c vào ch ng trình quy Ví d 1-9: Xét hàm tính giai th a vi t b ng gi i thu t quy nh sau: function Giai_thua(n:integer): integer; begin if n=0 then Giai_thua :=1 else Giai_thua := n* Giai_thua(n-1); end; i T(n) th i gian th c hi n vi c tính n giai th a, T(n-1) th i gian th c hi n vi c tính n-1 giai th a Trong tr ng h p n=0 ch ng trình ch th c hi n m t l nh gán Giai_thua:=1, nên t n O(1), ó ta có T(0) = C1 Trong tr ng h p n>0 ch ng trình ph i g i quy Giai_thua(n-1), vi c i quy t n T(n-1), sau có k t qu c a vi c g i quy, ch ng trình ph i nhân k t qu ó i n gán cho Giai_thua Th i gian th c hi n phép nhân phép gán m t h ng C2 V y ta có Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang Collected by The_Wall (11/10/2005) ây ph ng trình quy tính th i gian th c hi n c a ch ng trình quy Giai_thua Ví d 1-10: Chúng ta xét th t c MergeSort m t cách phác th o nh sau: function MergeSort (L:List ; n:integer) : List; var L1,L2 : List; begin if n = then return(L) else begin Chia L thành n a L1 L2 , m i m t n a có dài n/2; return(Merge(MergeSort (L1 , n/2), MergeSort(L2, n/2))); end; end; Ch ng h n s p x p danh sách L g m ph n t 7, 4, 8, 9, 3, 1, 6, ta có mơ hình minh h a a MergeSort nh sau: Hàm MergeSort nh n m t danh sách có dài n tr v m t danh sách ã c s p x p Th c Merge nh n hai danh sách ã c s p L1 L2 m i danh sách có dài n/2, tr n chúng l i v i c m t danh sách g m n ph n t có th t Gi i thu t chi ti t c a Merge ta s bàn sau, ch ý r ng th i gian Merge danh sách có dài n/2 O(n) Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang Collected by The_Wall (11/10/2005) G i T(n) th i gian th c hi n MergeSort m t danh sách n ph n t T(n/2) th i gian th c hi n MergeSort m t danh sách n/2 ph n t , ta có th vi t ph ng trình quy nh sau: Trong ó c1 th i gian ph i t n L có dài Trong tr ng h p n > 1, th i gian c a MergeSort c chia làm hai ph n Ph n g i quy MergeSort m t danh sách có dài n/2 T(n/2) ó ta có 2T(n/2) Ph n th hai bao g m phép th n >1, chia danh sách L thành hai n a b ng Merge Ba thao tác l y th i gian không i i v i phép th ho c t l v i n i v i ng t Merge Nh v y h ng c2 c ch n c2n th i gian t ng làm vi c ó ngo i tr g i quy I.5.2- Gi i ph Có ba ph ng trình quy ng pháp gi i ph ng trình 1.- Ph ng pháp truy h i 2.- Ph quy: ng pháp oán nghi m 3.- L i gi i t ng quát c a m t l p ph Ph ng trình quy ng pháp truy h i Dùng quy thay th b t k T(m) v i m < n vào phía ph i c a ph ng trình cho n t t T(m) v i m > c thay th b i bi u th c c a T(1) Vì T(1) ln h ng nên có cơng th c c a T(n) ch a s h ng ch liên quan n n h ng s Gi i ph ng trình Ví d 1-10: Gi i ph ng trình: Ta có: Gi s n = 2k, trình suy r ng s k t thúc i =k, ó ta có: T(n) = 2kT(1) + kC2n Vì 2k = n nên k = logn v i T(1) =C1 nên ta có Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang Collected by The_Wall (11/10/2005) T(n) = C1n + C2nlogn Hay T(n) O(nlogn) oán nghi m Ta oán m t nghi m f(n) dùng ch ng minh quy n p Thông th ch ng t r ng T(n) f(n) v i m i n ng f(n) m t hàm quen thu c nh logn, n, nlogn, n2, n3, 2n, n!, nn ch ốn d ng c a f(n) ó có m t vài tham s ch a xác nh (ch ng h n f(n) = an v i a ch a xác nh) trình ch ng minh quy n p ta s suy di n giá tr thích p c a tham s Ví d 1-11: Gi i ph ng trình quy Gi s oán f(n) = anlogn V i n = ta th y r ng cách ốn nh v y khơng cb i anlog n có giá tr khơng ph thu c vào giá tr c a a Vì th ta th ti p theo f(n) = anlogn + b V i n = ta có, T(1) = C1 f(1) = b, mu n T(1) Gi s r ng T(k) Gi s n f(1) b C1 (*) aklogk + b v i m i k < n (I.2).Ta s ch ng minh T(n) anlogn + b 2, t (I.1) ta có T(n) = 2T(n/2) + C2n Áp d ng (I.2) v i k = n/2 < n ta có: T(n) = 2T(n/2) + C2n 2[an/2log(n/2) + b] + C2n T(n) anlogn - an + 2b + C2n T(n) (anlogn + b) + [b + (C2 - a)n] N u l y a T(n) (anlogn + b) + [b +(C2 - C2 - b )n ] T(n) (anlogn + b) + (1-n) b T(n) an logn + b C2 + b (**) ta N u ta l y a b cho c (*) (**) u tho mãn T(n) D dàng ta có b = C1 a= C1 +C2 ta c T(n) Giáo trình mơn Phân tích Gi i Thu t – I c an logn + b v i m i n (C1 + C2)nlogn + C1 v i m i n C C N TH Trang Collected by The_Wall (11/10/2005) Hay nói cách khác T(n) O(nlogn) i gi i t ng quát cho m t l p ph ng trình quy gi i tốn kích th c n, ta chia toán ã cho thành a tốn con, m i tóan có kích th c n/b Gi i toán t ng h p k t qu l i c k t qu c a toán ã cho i toán c ng làm nh v y K thu t s d n n m t ch ng trình quy Gi thi t r ng m i tốn kích th c l y m t n v th i gian th i gian chia tốn kích th c n thành tốn kích th c n/b t ng h p k t qu t toán c l i gi i c a toán ban u d(n) (Ch ng h n i v i thí d MergeSort, có a = b = 2, d(n) = C2n/C1 Xem C1 m t n v ) G i T(n) th i gian Ta s d ng ph Gi s n = bk ta gi i tốn kích th ng pháp truy h i gi i ph c n ta có ph ng trình quy: ng trình c: T(n/bk) = T(1) = Thay vào v i i = k ta có: Hàm ti n tri n, nghi m thu n nh t nghi m riêng Trong ph ng trình quy (I.1) hàm th i gian d(n) c g i hàm ti n tri n (driving function) Trong công th c (I.2), ak = nlogba c g i nghi m thu n nh t (homogeneous solutions) Nghi m thu n nh t nghi m xác d(n) = v i m i n Nói m t cách khác, nghi m thu n nh t bi u di n th i gian gi i t t c toán Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang 10 Collected by The_Wall (11/10/2005) Gi i thu t s p x p t p tin F có n m u tin ta s d ng t p tin F1, F2, G1 G2 Kh i u ta phân ph i m u tin c a t p tin ã cho F luân phiên vào hai t p tin F1 F2 Nh v y hai t p tin c xem nh c t ch c thành ng dài ng c 1: c ng, m i ng dài t hai t p tin F1, F2 tr n hai ng thành dài ghi luân phiên vào hai t p tin G1, G2 i vai trò c a F1 cho G1, F2 cho G2 ng c 2: c ng, m i ng dài t hai t p tin F1, F2 tr n hai ng thành dài ghi luân phiên vào hai t p tin G1, G2 i vai trò c a F1 cho G1, F2 cho G2 Quá trình c ti p t c sau i b c dài c a m t ng 2i N u 2i t thúc, lúc ó t p tin G2 s r ng t p tin G1 ch a m u tin ã c s p ánh giá gi i thu t s p x p tr n Ta th y gi i thu t k t thúc sau i b c v i i logn M i b c ph i p tin, m i t p tin có trung bình n/2 m u tin Gi s m i m t kh i l u tr n c ghi truy xu t kh i kh i mà c n logn b n gi i thu t c t t p tin ghi vào c b m u tin m i b c c v y t ng c ng c n phép Ví d 4-2: Cho t p tin F có 23 m u tin v i khóa s nguyên nh sau: F: 28 31 93 96 10 40 54 85 65 30 39 90 13 10 69 77 10 22 b t u ta phân ph i m u tin c a F luân phiên vào hai t p tin F1 F2 thành ng có dài 28 31 93 28 G2: 31 54 96 40 85 B c 1: Tr n hai t p tin G1, G2: G1: 10 93 10 40 30 39 13 ng 96 65 90 77 10 dài c a F1 F2 54 85 30 10 39 69 22 c t ch c F1 F2 c 65 13 90 69 77 22 ng 10 dài ghi luân phiên vào 10 F1 F2 B c 2: i vai trò c a F1 G1, F2 G2 cho Tr n ng dài hai t p tin F1 F2 c ng dài r i ghi luân phiên vào hai t p tin G1 G2: G1: G2: 10 28 31 40 93 54 65 85 96 Giáo trình mơn Phân tích Gi i Thu t – 13 I 30 39 10 69 77 F1 90 10 22 F2 C C N TH Trang 69 Collected by The_Wall (11/10/2005) B c 3: i vai trò c a F1 G1, F2 G2 cho Tr n ng dài hai t p tin F1 F2 c ng dài r i ghi luân phiên vào hai t p tin G1 G2: G1: G2: 13 10 28 31 40 93 96 30 39 54 65 85 10 10 22 69 77 F1 90 F2 B c 4: i vai trò c a F1 G1, F2 G2 cho Tr n ng dài hai t p tin F1 F2 c ng dài 16 r i ghi luân phiên vào t p tin G1 G2 G1: G2: 10 13 28 30 31 39 40 54 65 85 90 93 96 F1 10 10 22 69 77 F2 B c 5: i vai trò c a F1 G1, F2 G2 cho Tr n tin F1 F2 c1 ng dài 23 r i ghi vào t p tin G1 G1: ng dài 16 hai t p 8 10 10 10 13 22 28 30 31 39 40 54 65 77 85 90 93 96 T p tin G1 ch a m u tin ã Ch c s p cịn t p tin G2 r ng ng trình procedure Merge(k:integer; f1,f2,g1,g2: File of RecordType); {Th t c tr n ng dài k hai t p tin f1 f2 thành ghi luân phiên vào hai t p tin g1 g2} ng dài 2k var OutSwithh : boolean; {N u OutSwitch = TRUE ghi vào t p tin g1, ng c l i ghi vào g2} Winner: integer; { ch nh m u tin hi n hành hai t p tin f1 f2 s c ghi t p tin g1 ho c g2} Used: array[1 2] of integer; { Used[ij] ghi s m u tin ã c c ng hi n t i c a t p tin fj } Fin : array[1 2] Of boolean; {Fin[j] s có giá tr TRUE n u ã c h t m u tin ng hi n hành c a fj ho c ã d n cu i t p tin fj } Current: array[1 2] Of RecordType; { Current[j] l u m u tin hi n hành c a t p tin f[j]} procedure GetRecord(i:integer); {N u ã c h t m u tin ng hi n hành c a t p tin fi ho c ã n cu i t p tin fi t fin[i] = TRUE n u khơng c m t m u tin c a t p tin fi vào current[i]} begin Used[i] := Used[i] + 1; if (Used[i] = k+1 ) or (i = 1) and ( eof(f1)) or (i = 12 and ( eof(f2)) then fin[i] := TRUE Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang 70 Collected by The_Wall (11/10/2005) else if i=1 then Read(f1, current[1]) else read(f2, current[2]); end; begin { Kh i t o } OutSwitch := TRUE; ReSet(f1); ReSet(f2); ReWrite(g1); ReWrite(g2); while (not eof(f1)) or (not eof(f2)) begin {B t u c m u tin t hai ng hi n hành c a hai t p tin f1,f2 } Used[1] := 0; Used[2] := 0; Fin[1] := FALSE ; Fin[2] := FALSE ; GetRecord(1) ; GetRecord(2); while ( not fin[1] ) or (not fin[2]) begin {Tr n hai ng } { Ch n Winner } if Fin[1] then Winner := else if Fin[2] then Winner := else if current[1].key < Current[2].key then Winner := else Winner := 2; if OutSwitch then Write(g1, Current[winner] ) else Write(g2, current[winner] ); GetRecord(Winner); end; OutSwitch := Not OutSwitch; end; end; IV.3.2.C i ti n s p x p tr n Ta th y trình s p x p tr n nói b t u t ng dài ph i sau logn c gi i thu t m i k t thúc Chúng ta có th ti t ki m th i gian b ng cách ch n m t s k thích h p cho k m u tin có th ch a b nh M i l n c vào b nh k m u tin, dùng p x p (ch ng h n dùng QuickSort) s p x p k m u tin ghi luân phiên vào hai t p tin F1 F2 Nh v y b t u s p x p tr n v i t p tin c t ch c thành ng dài k Sau i b c ng k2i Gi i thu t s k t thúc k2i dài m i phép truy xu t kh i s D th y c ta t ng n hay i log Do ó ct c s p x p tr n Ví d 4-3: L y t p tin F có 23 m u tin v i khóa s nguyên nh ví d 4-2 F: 28 31 93 96 10 40 54 85 65 30 39 90 13 10 69 77 10 22 Ta gi s b nh có th ch a c m u tin, ta c l n l t m u tin c a F vào b nh , dùng m t s p x p s p x p chúng ghi phiên vào t p tin F1 F2 Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang 71 Collected by The_Wall (11/10/2005) 28 31 10 40 54 93 96 30 39 90 65 85 c 1: Tr n hai t p tin G1, G2: 69 77 10 13 ng dài c a F1 F2 F1 10 22 c G1: 28 31 93 96 10 13 30 39 90 10 40 54 65 85 10 22 69 77 ng dài ghi luân phiên vào F1 G2: F2 F2 F1 F2 c 2: i vai trò c a F1 G1, F2 G2 cho Tr n ng dài t p tin c ng dài 12 r i ghi luân phiên vào t p tin G1 G2: G1: 10 28 31 40 54 65 85 93 96 F1 G2: 8 10 10 13 22 30 39 69 77 90 F2 c 3: tin F1 F2 G1: i vai trò c a F1 G1, F2 G2 cho Tr n c1 ng ghi vào t p tin G1, G2 r ng ng dài 12 t p 8 10 10 10 13 22 28 30 31 39 40 54 65 77 85 90 93 96 T p tin G1 ch a m u tin ã c s p t p tin G2 r ng IV.3.3- Tr n nhi u ng (multiway merge) Gi i thu t s p x p t p tin F có n m u tin ta s d ng m t p tin (m m t s ch n) F[1], F[2], , F[m] Trong tr ng h p m=4 ta có gi i thu t s p x p tr n bình th ng G i h = m/2, ta có n i dung c a ph k m u tin) ng pháp nh sau (ta v n gi s b nh có th ch a Kh i u: M i l n c t t p tin F vào b nh k m u tin, s d ng m t s p x p p x p k m u tin thành m t ng r i ghi luân phiên vào t p tin F[1], F[2], , F[h] c 1: Tr n ng dài k c a h t p tin F[1], F[2], , F[h] thành m t ng dài kh ghi luân phiên vào h t p tin F[h+1], F[h+2], , F[m] i vai trò c a F[i] F[h+i]] cho (v i i h) c 2: Tr n ng dài kh c a h t p tin F[1], F[2], , F[h] thành m t ng dài kh ghi luân phiên vào h t p tin F[h+1], F[h+2], , F[m] i vai trò c a F[i] F[h+i]] cho (v i i h) Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang 72 Collected by The_Wall (11/10/2005) dài m i ng gi i thu t k t thúc khi ng ghi F[h+1] Sau i b c c s p m t ánh giá gi i thu t s p x p tr n nhi u n ó t p tin ã ng Theo gi i thu t k t thúc sau i b c, v i n hay M i b c ta ph i c t h p tin ghi vào h t p tin, trung bình m i t p tin có n/h m u tin Ta v n gi s m i kh i l u c b m u tin m i b ta ch c n tr ng h p c ph i truy xu t kh i Do c n phép truy xu t kh i.Ta th y rõ ràng c biêt h = c nên t ng c ng th t c mergeSort nói m t Ví d 4-4: L y t p tin F có 23 m u tin v i khóa s ngun nh ví d 4-2 F: 28 31 93 96 10 40 54 85 65 30 39 90 13 10 69 77 10 22 S d ng t p tin s p x p t p tin F Ta gi s b nh có th ch a c m u tin, ta c l n l t m u tin c a F vào b nh , dùng m t s p x p s p x p chúng ghi phiên vào t p tin F[1], F[2] F[3] nh sau: F[1]: 28 31 65 85 69 F[2]: 93 96 30 39 90 10 22 F[3]: 10 40 54 10 77 13 c 1: Tr n ng ü dài t p tin F[1], F[2], F[3] thành ghi vào t p tin F[4], F[5] F[6] F[4]: 10 28 31 40 54 93 96 10 13 30 39 65 85 90 F[2] F[6]: 10 22 69 77 dài F[1] F[5]: ng F[3] c 2: i vai trò c a F[1] cho F[4], F[2] cho F[5] F[3] cho F[6] Tr n t p tin F[1], F[2], F[3] thành ng dài 23 ghi vào t p tin F[4] ng dài F[4]: 8 10 10 10 13 22 28 30 31 39 40 54 65 77 85 90 93 96 T p tin F[4] ch a m u tin ã IV.4- L U TR c s p F[5] F[6] r ng THÔNG TIN TRONG T P TIN IV.4.1- T p tin tu n t Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang 73 Collected by The_Wall (11/10/2005) IV.4.2- T IV.4.3- T IV.4.4- T IV.4.5- C ng t c cho thao tác t p tin p tin b m p tin ch m c u trúc B-cây Trong ph n ta s nghiên c u c u trúc d li u gi i thu t cho l u tr (storing) l y thông tin (retrieving) t p tin c l u tr Chúng ta s coi m t t p tin nh m t chu i tu n t m u tin, m i m u tin bao g m nhi u tr ng (field) M t tr ng có th có dài c nh ho c dài thay i ây ta s xét m u tin có dài c nh kh o sát thao tác t p tin là: · Insert: Thêm m t m u tin vào m t t p tin, · Delete: Xoá m t m u tin t t p tin, · Modify: S a i thông tin m u tin c a t p tin, · Retrieve: Tìm l i thông tin Sau ây ta s nghiên c u m t s c s trình bày t ch c, cách th c ti cách t ch c ó S ánh giá ây ch nhiêu kh i thao tác khác u ph i s c l u t p tin u trúc d li u dùng l u tr t p tin V i m i c u trúc n hành thao tác tìm, thêm, xố m u tin có ánh giá y u ánh giá xem tìm m t m u tin ph i c bao d ng thao tác tìm IV.4.1- T p tin tu n t ch c: T p tin tu n t m t danh sách liên k t c a kh i, m u tin kh i theo m t th t b t k c l u tr Tìm m u tin: Vi c tìm ki m m t m u tin có giá tr xác nh c th c hi n b ng cách c ng kh i, v i m i kh i ta tìm m u tin c n tìm kh i, n u khơng tìm th y ta l i c ti p m t kh i khác Quá trình c ti p t c cho n tìm th y m u tin ho c t qua toàn b kh i c a t p tin tr ng h p ó m u tin khơng t n t i t p tin Thêm m u tin m i: Vi c thêm m t m u tin có th th c hi n n gi n b ng cách a m u tin vào kh i cu i c a t p tin n u nh kh i ó cịn ch tr ng Ng c l i n u kh i cu i ã h t ch xin c p thêm m t kh i m i, thêm m u tin vào kh i m i n i kh i m i vào cu i danh sách a i m u tin: s a i m t m u tin có giá tr cho tr c, ta tìm m u tin c n s a th c hi n s a i c n thi t sau ó ghi l i m u tin vào v trí c t p tin Xoá m u tin: xoá m t m u tin, tr th c hi n m t cách xoá sau ây: ir i c h t ta c ng c n tìm m u tin ó, n u tìm th y ta có th M t xố m u tin c n xoá kh i l u tr nó, n u sau xố, kh i tr nên r ng xố kh i kh i danh sách (gi i phóng b nh ) Hai ánh d u xoá m u tin b ng m t cách ó Ngh a ch xố m u tin m t cách logic, vùng không gian nh v n dành cho m u tin Vi c ánh d u có th c th c hi n b ng m t Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang 74 Collected by The_Wall (11/10/2005) · Thay th m u tin b ng m t giá tr ó mà giá tr không bao gi giá tr th t c a t k m t m u tin · M i m t m u tin có m t bít xóa, bình th ng bit xóa c a m u tin có giá tr 0, mu n xóa u tin ta t cho bit xóa giá tr V i ph ng pháp m t m u tin sau b ánh d u xoá c ng có th ph c h i c b ng cách t bit xoá c a m u tin giá tr ánh giá: ây m t ph ng pháp t ch c t p tin n gi n nh t nh ng hi u qu nh t Ta th y t p tin m t danh sách liên k t c a kh i nên thao tác t p tin u òi h i ph i truy xu t h u nh t t c kh i, t kh i u tiên n kh i cu i I IV.4.2- T ng t c cho thao tác t p tin Nh c m c a cách t ch c t p tin tu n t thao tác t p tin r t ch m c i thi n t c thao tác t p tin, ph i tìm cách gi m s phép truy xu t kh i Mu n v y ph i tìm c u trúc cho tìm m t m u tin ch c n phép truy xu t m t s nh kh i c a t p tin t o t ch c t p tin nh v y ph i gi s r ng m i m u tin có m t khố (key), ó m t t p h p tr ng mà c n c vào ó ta có th phân bi t m u tin v i Ch ng h n mã sinh viên m u tin v sinh viên, bi n s xe qu n lí ph ng ti n v n t i ng b Sau ây ta s xét m t s c u trúc nh th IV.4.3- T p tin b m (hash files) ch c: Ta s s d ng b ng b m m l u tr t p tin B ng b m m t b ng có m ph n t , i ph n t c ánh s t n m-1 ( n gi n nh t m ng m t chi u B g m m ph n t B[0], B[1], , B[m-1]) M i ph n t m t tr , tr t i ph n t u tiên c a danh sách liên k t kh i phân ph i m u tin có khóa x vào danh sách liên k t, ta dùng hàm b m (hash function) Hàm b m h(x) ánh x m i giá tr khoá x v i m t s nguyên t n m-1 N u h(x) = i u tin r có khóa x s c a vào m t kh i ó danh sách liên k t c tr b i B[i] Có nhi u ph ng pháp xác nh hàm b m Cách n gi n nh t “nguyên hóa” giá tr khóa x (n u x khơng ph l m t s nguyên) sau ó ta cho h(x) = x MOD m Ví d 4-5: M t t p tin có 24 m u tin v i giá tr khóa s nguyên: 3, 5, 12, ,65, 34, 20, 21, 17, 56, 1, 16, 2, 78, ,94, 38 ,15 ,23, 14, 10, 29, 19, 6, 45, 36 Gi s có th t ch c t p tin vào b ng b m g m ph n t gi s m i kh i có th ch a c t i a m u tin V i m i m u tin r có khóa x ta xác nh h(x) = x MOD a m u tin r vào m t kh i c a danh sách liên k t c tr b i B[h(x)] Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang 75 Collected by The_Wall (11/10/2005) Tìm m u tin: tìm m t m u tin r có khóa x, xác nh h(x) ch ng h n h(x) = i ó ta ch c n tìm r danh sách liên k t c tr b i B[i] Ch ng h n tìm m u tin r có khóa 36, ta tính h(36) = 36 MOD = Nh v y n u m u tin r t n t i t p tin ph i thu c m t kh i ó c tr b i B[1] Thêm m u tin: thêm m u tin r có khố x, tr c h t ta ph i tìm xem ã có m u tin t p tin có khóa x ch a N u có ta cho m t thơng báo l i theo gi thi t m u tin khơng có khố trùng Ng c l i ta s tìm m t kh i (trong danh sách kh i c a lô c tr b i B[h(x)]) ch tr ng cho m u tin r thêm vào kh i N u khơng cịn kh i ch cho m u tin i ta yêu c u h th ng c p phát m t kh i m i t m u tin r vào kh i r i n i kh i m i vào cu i danh sách liên k t c a lơ Xố m u tin: xố m u tin r có khố x, tr c h t ta tìm m u tin t bít xố c a Ta c ng có th xố h n m u tin r n u vi c xoá làm kh i tr nên r ng ta gi i phóng kh i (xoá kh i kh i danh sách liên k t kh i) ánh giá: Gi s t p tin có n m u tin m i kh i l u tr c k m u tin t p tin c n n/k kh i Trung bình m i danh sách liên k t có n/km kh i, mà ch tìm m t danh sách liên t nên ta ch ph i truy xu t n/km kh i S nh h n m l n so v i cách t ch c t p tin tu n t (trong p tin tu n t ta c n truy xu t t t c kh i, t c n/k kh i) Ch ng h n v i 24 m u tin nh ví trên, v i cách t ch c t p tin tu n t ta c n úng kh i l u tr (vì m i kh i ch a t i a m u tin) Nh v y tìm m t m u tin, ch ng h n m u tin có khóa 36 ph i c úng kh i (do u tin có khóa 36 n m kh i cu i cùng) Nh ng v i cách t ch c t p tin b ng b m ch n trung bình 24/(3*7) l n c kh i Trong th c t ta ch c n l n c kh i (vì m u tin có khóa 36 m kh i th c a lô c tr b i B[1]) IV.4.4- T p tin ch m c (index file) ch c: M t cách khác th ng g p t p tin c s p x p theo khoá, r i ti n hành tìm ki m nh tìm m t t t n, t c tìm ki m theo t u tiên m i trang th c hi n c u ó ta s d ng hai t p tin: T p tin t p tin ch m c th a (sparse index) T p tin bao g m kh i l u m u tin ã c s p th t theo giá tr khóa T p tin ch m c th a bao g m kh i ch a c p (x, p) ó x khố c a m u tin u tiên m t kh i c a t p tin chính, cịn p tr , tr n kh i ó Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang 76 Collected by The_Wall (11/10/2005) xây d ng c m t c u trúc nh v y, tr c h t ta s p x p m u tin theo giá tr khóa phân ph i chúng vào kh i c a t p tin Có hai cách phân ph i là: L p y kh i b i m u tin Ho c ch phân ph i vào kh i m t s m u tin nh ng ch tr ng c a kh i dành cho vi c xen m u tin sau Sau phân ph i m u tin, ta b t u t qua t ng kh i l p ch m c b ng cách l y khoá c a m u tin u tiên c a m i kh i v i a ch kh i t o thành m t p t p tin ch m c Cách phân ph i c p (khóa, a ch ) vào cho kh i c a t p tin ch m c ng c ti n hành b ng m t hai cách nh i v i t p tin Ví d 4-6: Ta có t p tin g m m u tin v i khoá s nguyên: 5, 8, 3, 11, 23, 10, 28, 25, 27, 38, 16, 46, 42, 31 u tiên ta s p th t m u tin theo giá tr khóa: 3, 5, 8, 10, 11, 16, 23, 25, 27, 28, 31, 38, 42, 46 Gi s m i kh i ch a c m u tin, ta có th phân ph i m u tin vào kh i b ng cách p y kh i b i m u tin Sau ó t o t p tin ch m c th a cho t p tin theo cách ã trình bày K t qu ta c c u trúc nh hình sau: Tìm ki m: z tìm m u tin r có khố x, ta ph i tìm c p (z,p) v i z giá tr l n nh t x M u tin r có khố x n u t n t i s n m kh i c tr b i p Ch ng h n tìm m u tin r có khố 11, ta tìm t p tin ch m c ch kh i 2, Ta ch c n tìm m u tin có khố 11 kh i c c p (10, ·), ch a a Tìm m t m u tin m t kh i c a t p tin có th ti n hành b ng tìm ki m tu n t ho c ng tìm ki m nh phân b i l m u tin m t kh i ã c s p th t Thêm m u tin: Gi s t p tin c l u kh i B1, B2, , Bm xen m t un tin r v i khóa x vào t p tin, ta ph i dùng th t c tìm ki m xác nh m t kh i Bi ó có th ch a m u tin r N u Bi ch tr ng xen r vào úng v trí c a Bi Ta ph i ch nh l i p tin ch m c n u m u tin m i tr thành m u tin u tiên kh i Bi N u Bi khơng cịn ch tr ng xen ta ph i xét kh i Bi+1 có th chuy n m u tin cu i kh i Bi thành m u tin u tiên c a kh i Bi+1 xen m u tin r vào úng v trí c a kh i Bi u ch nh l i t p tin ch c cho phù h p v i tr ng thái m i c a Bi+1 Q trình có th d n n vi c ta ph i xét kh i Bm, u Bm ã h t ch yêu c u h th ng c p thêm m t kh i m i Bm+1, chuy n m u tin cu i c a Bm sang Bm+1, m u tin cu i c a Bm-1 sang Bm….xen m u tin r vào kh i Bi c p nh t l i t p tin ch m c n ây s th y r ng cách phân ph i m u tin vào kh i c a t p tin Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang 77 Collected by The_Wall (11/10/2005) chính, n u tr l i m t s ch tr ng có hao t n b nh ngồi nh ng l i r t thu n ti n cho vi c xen thêm m u tin Ví d 4-7: Ch ng h n ta c n xen m u tin r v i khóa x=24 vào t p tin c bi u di n hình 4-3 Th t c tìm x t p tin ch m c xác nh c kh i c n xen r kh i Vì kh i có m u tin nên ph i chuy n m u tin có khóa 27 sang kh i xen r vào kh i Vì kh i c ng ã m u tin nên xét kh i í chuy n m u tin có khóa 38 thành m u tin u tiên c a kh i Vì m u tin u tiên c a kh i bây gi có khóa 27 nên ta ph i s a l i giá tr c p c a t p tin ch m c ng ng v i kh i Ta c ng ph i làm t ng t i v i kh i C u trúc c a t p tin sau thêm m u tin r có khóa 24 nh sau: Xoá m u tin: xoá m u tin r có khố x, tr c h t ta c n tìm r, n u khơng tìm th y thơng báo l i, ng c l i ta xố m u tin r kh i ch a nó, n u m u tin b xoá m u tin u tiên c a kh i ph i c p nh t l i giá tr khoá t p tin ch m c Trong tr ng h p kh i tr nên r ng sau xoá u tin gi i phóng kh i ó xoá c p (khoá, tr ) c a kh i t p tin ch m c Vi c xoá t p tin ch m c c ng có th d n n vi c gi i phóng kh i t p tin ánh giá: Ta th y vi c tìm m t m u tin ch òi h i ph i c ch m t s nh kh i (m t kh i t p tin m t s kh i t p tin ch m c) Tuy nhiên vi c xen thêm m u tin, nh ã nói, có th ph i c ghi t t c kh i t p tin ây nh c m c a p tin ch m c IV.4.5- C u trúc B-cây Cây tìm ki m m-phân Cây tìm ki m m-phân (m-ary tree) s t ng qt hố c a tìm ki m nh phân ó m i nút có th có m nút Gi s n1 n2 hai c a m t nút ó, n1 bên trái n2 t t c a n1 có giá tr nh h n giá tr c a nút c a n2 Chúng ta s s d ng m-phân l u tr m u tin t p tin b nh M i t nút bi u di n cho m t kh i v t lý b nh Trong ó nút l u tr m u tin c a p tin Các nút l u tr m tr , tr t i m nút con, c ng l u tr m-1 khoá phân chia giá tr nút cháu N u ta dùng tìm ki m nh phân n nút l u tr m t t p tin c n trung bình logn phép truy xu t kh i tìm ki m m t m u tin N u ta dùng tìm ki m m-phân l u tr ỵ m t t p tin ch c n logmn phép truy xu t kh i tìm ki m m t m u tin Sau ây s nghiên c u m t tr ng h p c bi t c a tìm ki m m-phân B-cây B-cây (B-tree) B-cây b c m tìm ki m m-phân cân b ng có tính ch t sau: Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang 78 Collected by The_Wall (11/10/2005) · Nút g c ho c ho c có nh t hai nút con, · M i nút, tr nút g c nút lá, có t [m/2] · Các ng i t g c t i có ch c: Ta có th s d ng B-cây b c m n m nút dài l u tr t p tin nh sau: M i nút m t kh i a, m u tin c a t p tin c s p th t theo khoá c l u tr nút B-cây Gi s m i nút l u tr c nhi u nh t b m u tin M i nút không ph i nút có d ng (p0, k1, p1, k2, p2, , kn, pn), v i pi (0 tr , tr t i nút th i c a nút ó ki giá tr khóa Các khố m t nút c k1 < k2 < < kn i n) làì c s p th t , T t c khoá c tr b i p0 u nh h n k1 T t c khoá n m c tr b i pi (1 i n) u l n h n ho c b ng ki nh h n ki+1 T t c khoá n m c tr b i pn u l n h n ho c b ng kn Ví d 4-8: Cho t p tin bao g m 20 m u tin v i giá tr khóa s nguyên thành B-cây c v i nút ch a c nhi u nh t m u tin c t ch c Tìm ki m: tìm ki m m t m u tin r có khố x s l n t nút g c n nút ch a r (n u r t n t i t p tin) T i m i b c ta a nút (p0, k1, p1, , kn, pn) vào b nh xác nh m i quan h gi a x v i giá tr khóa ki · N u ki x < ki+1 (1 i < n) s xét ti p nút c tr b i pi, · N u x < k1 ta s xét ti p nút c tr b i p0 ·N ux c tr b i pn kn ta s xét ti p nút Quá trình s d n n vi c xét m t nút Trong nút ta s tìm m u tin r v i khóa x ng tìm ki m tu n t ho c tìm ki m nh phân Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang 79 Collected by The_Wall (11/10/2005) Thêm m u tin: thêm m t m u tin r có khố x vào B-cây, ta áp d ng th t c tìm ki m nói xác nh nút L mà m u tin ph i n m ó N u kh i L cịn ch cho r ta thêm r vào cho úng th t c a kh i L gi i thu t k t thúc N u L khơng cịn ch cho r ta yêu c u h th ng c p phát m t kh i m i L' D i [b/2] (b s m u tin nhi u nh t có th l u m t kh i) m u tin n m phân n a cu i kh i L sang L' r i xen r vào L ho c L' cho vi c xen m b o th t khoá kh i Gi s nút P cha c a L (P ph i c bi t th t c tìm i t g c n L ph i thông qua P) Bây gi ta áp d ng th t c xen quy xen vào P m t khóa k’ tr p' ng ng c a nút L’ (k' khoá c a m u tin u tiên L') Trong tr ng h p tr c xen k' p’ , P ã có m ta ph i c p thêm m t kh i m i P’ chuy n m t s c a P sang P’ xen m i vào P ho c P’ cho c P P’ u có nh t [m/2] Vi c chia c t P ịi h i phaií xen m t khóa m t tr vào nút cha c a P Q trình có th s d n t i nút g c c ng có th ph i chia c t nút g c, tr ng h p ph i t o m t nút g c m i mà hai c a hai a c a nút g c c Khi ó chi u cao c a B-cây s t ng lên Ví d 4-9: Thêm m u tin r có khố 19 vào t p tin c bi u di n b i B-cây ví d 4-8 · Q trình tìm ki m s xu t phát t G C i qua P2 d n t i nút L4 · Trong nút L4 K t qu vi c xen ta ch xen r vào úng v trí gi i thu t k t thúc c B-cây hình 4-6: Ví d 4-10: Thêm m u tin r có khoá 23 vào t p tin bi u di n b i B-cây ví d 4-8 (hình 4-5) · Quá trình tìm ki m i t nút G C, qua P2 t i nút L5 · Vì L5 ã m u tin nên ph i t o m t nút m i L’5 chuy n m u tin có khóa 24, 26 sang L’5 sau ó xen r vào L5 · Giá tr khóa c a m u tin u tiên L’5 24, ta ph i xen 24 tr c a L’5 vào P2, nh ng P2 ã có v y c n t o m t nút m i P’2, chuy n c p khóa, tr t ng ng i 34 38 sang P’2 xen c p tr , khóa 24 vào P2 Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang 80 Collected by The_Wall (11/10/2005) · Do có m t nút m i P’2 nên ph i xen vào cha c a P2 ( ây nút G C) m t c p khóa, tr tr t i P’2 Con tr p0 c a nút P’2 tr t i nút L6, giá tr khóa u tiên c a L6 28 Giá tr ph i c xen vào nút G C v i tr c a P’2 Xóa m t m u tin: xóa m u tin r có khóa x, tr c h t ta tìm n nút L ch a m u tin r, xóa r kh i L N u r m u tin u tiên c a L, ta ph i quay lui lên nút P cha c a L t l i giá tr khóa c a L P, giá tr m i b ng giá tr khóa c a m u tin m i u tiên c a L Trong tr ng p L u tiên c a P, khóa c a L không n m P mà n m t tiên c a P, ph i quay lui lên mà s a i N u sau xóa m u tin r mà L tr nên r ng gi i phóng L n u s c a P bây gi nh n [m/2] ki m tra nút P’ bên trái ho c bên ph i m c v i P N u P’ có nh t [m/2] + con, chuy n m t P’ sang P Lúc c P P’ có nh t [m/2] Sau ó ta ph i c p nh t l i giá tr khóa c a P P’ cha c a chúng, n u c n ph i s a c t tiên c a chúng N u P’ có úng [m/2] con, ta n i P P’ thành m t nút có m Sau ó ta ph i xóa khóa tr c a P’ nút cha c a P’ Vi c xóa có th ph i quay lui lên t tiên c a P’ K t qu c a q trình xóa quay lui có th d n t i vi c n i hai c a nút g c, t o nên m t g c m i gi i phóng nút g c c , cao c a gi m i Ví d 4-11: Xóa m u tin r có khóa 38 t p tin bi u di n b i B-cây k t qu c a ví d 4-10 (hình 4-6) · Q trình tìm ki m, xu t phát t nút G C, i qua P’2 l n n nút L8, · Xóa m u tin r kh i L8 · M u tin u tiên c a L8 bây gi có khóa 40, · S a l i giá tr khóa c a L8 P’2 (thay 38 b i 40) ta Giáo trình mơn Phân tích Gi i Thu t – I c k t qu B-cây sau: C C N TH Trang 81 Collected by The_Wall (11/10/2005) Ví d 12: Xóa m u tin r có khóa 10 t p tin bi u di n b i B-cây k t qu c a ví d 10 · Quá trình tìm ki m, xu t phát t nút G C, i qua P1 l n n nút L2 · Xóa m u tin r kh i L2 · L2 bây gi tr nên r ng, gi i phóng L2 · Xóa giá tr khóa 10 tr c a L2 P1, P1 bây gi ch có (2 < [5/2]) · Xét nút P2, bên ph i c p v i P1, P2 có úng [5/2] = nên ta n i P1 P2 P1 có úng con, · Xóa khóa tr c a P2 nút G C, ta Giáo trình mơn Phân tích Gi i Thu t – I c B-cây k t qu nh sau: C C N TH Trang 82 Collected by The_Wall (11/10/2005) Giáo trình mơn Phân tích Gi i Thu t – I C C N TH Trang 83 ... ng trình mà g i ã c ánh giá Cu i ta tính th i gian cho ch ng trình Gi s ta m t h th ng ch ng trình g i theo s sau: Ch ng trình A g i hai ch ng trình B C, ch ng trình B g i hai ch B1 B2, ch ng trình. .. CH NG TRÌNH QUY I.5.1- Thành l p ph ng trình quy I.5.2- Gi i ph ng trình quy V i ch ng trình có g i ch ng trình quy, ta khơng th áp d ng cách tính nh a trình bày m c I.4.4 b i m t ch ng trình. .. ch ng trình quy, tr c h t ta c n thành l p ph ng trình quy, sau ó gi i ng trình quy, nghi m c a ph ng trình quy s th i gian th c hi n c a ch ng trình I.5.1- Thành l p ph ng trình quy Ph ng trình