c 2 :i vai trò a F[1] ho F[4], F[2] ho F[5] và F[3] ho F[6] T rn á ng dài 9 trong á t p tin F[1], F[2], F[3] thành 1 ng dài 23 và ghi vào trong t p tin F[4].
IV.4 LU TR THÔNG TIN TRONG TP TIN
IV.4.2- T ng t c cho các thao tác t p tin IV.4.3- T p tin b m
IV.4.4- T p tin ch m c IV.4.5- C u trúc B-cây
Trong ph n này ta s nghiên c u các c u trúc d li u và gi i thu t cho l u tr (storing) và l y thông tin (retrieving) trong các t p tin c l u tr ngoài. Chúng ta s coi m t t p tin nh là m t chu i tu n t các 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 các m u tin có dài c nh và kh o sát các thao tác trên t p tin là:
· Insert: Thêm m t m u tin vào trong m t t p tin, · Delete: Xoá m t m u tin t trong t p tin,
· Modify: S a i thông tin trong các m u tin c a t p tin, và · Retrieve: Tìm l i thông tin c l u trong t p tin.
Sau ây ta s nghiên c u m t s c u trúc d li u dùng l u tr t p tin. V i m i c u trúc chúng ta s trình bày t ch c, cách th c ti n hành các thao tác tìm, thêm, xoá m u tin và có ánh giá
cách t ch c ó. S ánh giá ây ch y u là ánh giá xem tìm m t m u tin thì ph i c bao nhiêu kh i vì các thao tác khác u ph i s d ng thao tác tìm.
IV.4.1- T p tin tu n t
ch c: T p tin tu n t là m t danh sách liên k t c a các kh i, các m u tin c l u tr trong các kh i theo m t th t b t k .
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 trong 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 khi tìm th y m u tin ho c duy t qua toàn b các kh i c a t p tin và trong tr ng h p ó thì m u tin không t n t i trong 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 này vào kh i cu i cùng 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 cùng ã h t ch thì xin c p thêm m t kh i m i, thêm m u tin vào kh i m i và 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 i r i th c hi n các s a i c n thi t sau ó ghi l i m u tin vào v trí c trong t p tin.
Xoá m u tin: xoá m t m u tin, tr c h t ta c ng c n tìm m u tin ó, n u tìm th y ta có th th c hi n m t trong các cách xoá sau ây:
M t là xoá m u tin c n xoá trong kh i l u tr nó, n u sau khi xoá, kh i tr nên r ng thì xoá kh i kh i danh sách (gi i phóng b nh ).
Hai là ánh d u xoá m u tin b ng m t cách nào ó. Ngh a là ch xoá m u tin m t cách logic, vùng không gian nh v n còn dành cho m u tin. Vi c ánh d u có th c th c hi n b ng m t trong
· Thay th m u tin b ng m t giá tr nào ó mà giá tr này không bao gi là giá tr th t c a t k m t m u tin nào.
· 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 1. V i ph ng pháp này thì m t m u tin sau khi 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 0.
ánh giá: ây là m t ph ng pháp t ch c t p tin n gi n nh t nh ng kém hi u qu nh t. Ta th y t p tin là m t danh sách liên k t c a các kh i nên các thao tác trên t p tin u òi h i ph i truy xu t h u nh t t c các kh i, t kh i u tiên n kh i cu i cùng.
I IV.4.2- T ng t c cho các thao tác t p tin
Nh c m c a cách t ch c t p tin tu n t trên là các thao tác trên t p tin r t ch m. c i thi n t c thao tác trên t p tin, chúng ta 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ác c u trúc sao cho khi tìm m t m u tin ch c n phép truy xu t m t s nh các kh i c a t p tin. t o ra các t ch c t p tin nh v y chúng ta ph i gi s r ng m i m u tin có m t khoá (key),
ó là m t t p h p các tr ng mà c n c vào ó ta có th phân bi t các m u tin v i nhau. Ch ng h n mã sinh viên trong m u tin v sinh viên, bi n s xe trong qu n lí các 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 là m t b ng có m ph n t , i ph n t c ánh s t 0 n m-1 ( n gi n nh t là 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 là m t con tr , tr t i ph n t u tiên c a danh sách liên k t các kh i. phân ph i các m u tin có khóa x vào trong các 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 0 n m-1. N u h(x) = i thì
u tin r có khóa x s c a vào m t kh i nào ó trong 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 là “nguyên hóa” giá tr khóa x (n u x không ph l 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 là các 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 chúng ta có th t ch c t p tin này vào trong b ng b m g m 7 ph n t và gi s m i kh i có th ch a c t i a 3 m u tin. V i m i m u tin r có khóa là x ta xác nh h(x) = x MOD 7 và
Tìm m u tin: tìm m t m u tin r có khóa là x, chúng ta xác nh h(x) ch ng h n h(x) = i khi ó ta ch c n tìm r trong 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 là 36, ta tính h(36) = 36 MOD 7 = 1. Nh v y n u m u tin r t n t i trong t p tin thì nó ph i thu c m t kh i nào ó c tr b i B[1].
Thêm m u tin: thêm m u tin r có khoá x, tr c h t ta ph i tìm xem ã có m u tin nào trong t p tin có khóa x ch a. N u có ta cho m t thông báo l i vì theo gi thi t các m u tin không có khoá trùng nhau. Ng c l i ta s tìm m t kh i (trong danh sách các kh i c a lô c tr b i B[h(x)]) còn ch tr ng cho m u tin r và thêm nó vào kh i này. N u không còn kh i nào ch cho m u tin
i ta yêu c u h th ng c p phát m t kh i m i và t m u tin r vào kh i này r i n i kh i m i này vào cu i danh sách liên k t c a lô.
Xoá m u tin: xoá m u tin r có khoá x, tr c h t ta tìm m u tin này và t bít xoá c a nó. Ta c ng có th xoá h n m u tin r và n u vi c xoá này làm kh i tr nên r ng thì ta gi i phóng kh i này (xoá kh i kh i danh sách liên k t các kh i).
ánh giá: Gi s t p tin có n m u tin và m i kh i l u tr c k m u tin thì 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úng ta ch tìm trong m t danh sách liên
t nên ta ch ph i truy xu t n/km kh i. S này 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 các kh i, t c là n/k kh i). Ch ng h n v i 24 m u tin nh trong ví
trên, v i cách t ch c t p tin tu n t ta c n úng 8 kh i l u tr (vì m i kh i ch a t i a 3 m u tin). Nh v y tìm m t m u tin, ch ng h n m u tin có khóa 36 chúng ta ph i c úng 8 kh i (do
u tin có khóa 36 n m trong kh i cu i cùng). Nh ng v i cách t ch c t p tin b ng b m chúng ta ch n trung bình 24/(3*7) l n c kh i . Trong th c t ta ch c n 2 l n c kh i (vì m u tin có khóa 36 m trong kh i th 2 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 là t p tin c s p x p theo khoá, r i chúng ta ti n hành tìm ki m nh là tìm m t t trong t n, t c là tìm ki m theo t u tiên trên m i trang.
th c hi n c u ó ta s d ng hai t p tin: T p tin chính và t p tin ch m c th a (sparse index). T p tin chính bao g m các kh i l u các m u tin ã c s p th t theo giá tr khóa. T p tin ch m c th a bao g m các kh i ch a các c p (x, p) trong ó x là khoá c a m u tin u tiên trong m t kh i c a t p tin chính, còn p là con tr , tr n kh i ó.
xây d ng c m t c u trúc nh v y, tr c h t ta s p x p các m u tin theo giá tr khóa và phân ph i chúng vào trong các kh i c a t p tin chính. Có hai cách phân ph i là: L p y các kh i b i các m u tin. Ho c ch phân ph i vào các kh i m t s ít m u tin còn nh ng ch tr ng c a kh i dành cho vi c xen các m u tin sau này. Sau khi phân ph i các m u tin, ta b t u duy 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 cùng v i a ch kh i t o thành m t
p trong t p tin ch m c. Cách phân ph i các c p (khóa, a ch ) vào cho các kh i c a t p tin ch m c ng c ti n hành b ng m t trong hai cách nh i v i t p tin chính.
Ví d 4-6: Ta có t p tin g m các m u tin v i khoá là các 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 các 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 3 m u tin, ta có th phân ph i các m u tin vào các kh i b ng cách p y các kh i b i 3 m u tin. Sau ó t o t p tin ch m c th a cho t p tin chính theo cách ã trình bày trên. K t qu ta c c u trúc nh trong hình sau:
Tìm ki m: tìm m u tin r có khoá x, ta ph i tìm c p (z,p) v i z là giá tr l n nh t và z x. M u tin r có khoá x n u t n t i thì s n m trong kh i c tr b i p.
Ch ng h n tìm m u tin r có khoá 11, ta tìm trong t p tin ch m c c c p (10, ·), ch a a ch kh i 2, Ta ch c n tìm m u tin có khoá 11 trong kh i này.
Tìm m t m u tin trong m t kh i c a t p tin chính 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 các m u tin trong m t kh i ã c s p th t .
Thêm m u tin: Gi s t p tin chính c l u trong các kh i B1, B2, ..., Bm. xen m t un tin r v i khóa x vào trong t p tin, ta ph i dùng th t c tìm ki m xác nh m t kh i Bi nào ó có th ch a m u tin r. N u Bi còn ch tr ng thì xen r vào úng v trí c a nó trong 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 trong kh i Bi. N u Bi không còn ch tr ng xen thì ta ph i xét kh i Bi+1 có th chuy n m u tin cu i cùng trong kh i Bi thành m u tin u tiên c a kh i Bi+1 và xen m u tin r vào úng v trí c a nó trong 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. Quá trình này có th d n n vi c ta ph i xét kh i Bm, u Bm ã h t ch thì 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ùng c a Bm sang Bm+1, m u tin cu i cùng c a Bm-1 sang Bm….xen m u tin r vào kh i Bi và c p nh t l i t p tin ch m c.
chính, n u còn tr l i m t s ch tr ng tuy có hao t n b nh ngoài nh ng l i r t thu n ti n cho vi c xen thêm các 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 trong t p tin c bi u di n trong hình 4-3. Th t c tìm x trong t p tin ch m c xác nh c kh i c n xen r là kh i 3. Vì kh i 3 có
3 m u tin nên ph i chuy n m u tin có khóa 27 sang kh i 4 và xen r vào kh i 3. Vì kh i 4 c ng ã 3 m u tin nên xét kh i 5 í chuy n m u tin có khóa 38 thành m u tin u tiên c a kh i 5. Vì m u tin u tiên c a kh i 4 bây gi có khóa 27 nên ta ph i s a l i giá tr này trong c p c a t p tin ch m c ng ng v i kh i 4. Ta c ng ph i làm t ng t i v i kh i 5. C u trúc c a t p tin sau khi thêm m u tin r có khóa 24 nh sau:
Xoá m u tin: xoá m u tin r có khoá x, tr c h t ta c n tìm r, n u không tìm th y thì thông báo l i, ng c l i ta xoá m u tin r trong kh i ch a nó, n u m u tin b xoá là m u tin u tiên c a kh i thì ph i c p nh t l i giá tr khoá trong t p tin ch m c. Trong tr ng h p kh i tr nên r ng sau khi xoá
u tin thì gi i phóng kh i ó và xoá c p (khoá, con tr ) c a kh i trong t p tin ch m c. Vi c xoá trong t p tin ch m c c ng có th d n n vi c gi i phóng kh i trong t p tin này.
á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 các kh i (m t kh i trong t p tin chính và m t s kh i trong t p tin ch m c). Tuy nhiên trong vi c xen thêm m u tin, nh trên ã nói, có th ph i c và ghi t t c các kh i trong t p tin chính. ây chính là 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) là s t ng quát hoá c a cây tìm ki m nh phân trong ó m i nút có th có m nút con. Gi s n1 và n2 là hai con c a m t nút nào ó, n1 bên trái n2 thì t t c các con
a n1 có giá tr nh h n giá tr c a các nút con c a n2.
Chúng ta s s d ng cây m-phân l u tr các m u tin trong t p tin trên b nh ngoài. M i t nút bi u di n cho m t kh i v t lý trong b nh ngoài. Trong ó các nút lá l u tr các m u tin c a p tin chính. Các nút trong l u tr m con tr , tr t i m nút con, nó c ng l u tr m-1 khoá phân chia các giá tr trong các nút con cháu.
N u ta dùng cây tìm ki m nh phân n nút l u tr m t t p tin thì 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 cây tìm ki m m-phân l u tr î m t t p tin thì ch c n logmn phép truy xu t kh i tìm ki m m t m u tin. Sau ây chúng ta s nghiên c u m t