Giải thuật dữ liệu và giải thuật lưu trữ ngoài

17 353 0
Tài liệu đã được kiểm tra trùng lặp
Giải thuật dữ liệu và giải thuật lưu trữ ngoài

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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 67 1. Mc tiêu 2. Kin thc c bn cn có  hc chng này 3. Tài liu tham kho có liên quan n chng 4. Ni dung: IV.1 - Mô hình x lý ngoài. IV.2 - ánh giá các gii thut x lý ngoài. IV.3 - Sp xp ngoài. IV.4 - Lu tr thông tin trong tp tin. Trong chng này chúng ta s nghiên cu hai vn  chính là sp xp d liu c l u trong  nh ngoài k thut lu tr tp tin. Trong k thut lu tr tp tin chúng ta s s dng các cu trúc  liu tun t, bng bm, tp tin ch mc cu trúc B-cây. IV.1- MÔ HÌNH X LÝ NGOÀI Trong các gii thut mà chúng ta ã  cp t trc ti nay, chúng ta ã gi s rng s lng các d liu vào là khá nh có th cha ht  b nh trong (main memory). Nhng u gì s xy ra u ta mun x lý phiu u tra dân s toàn quc hay thông tin v qun lý t ai c nc chng hn? Trong các bài toán nh vy, s lng d liu vt quá kh nng lu tr ca b nh trong.  có th gii quyt các bài toán ó chúng ta phi dùng b nh ngoài  lu tr x lý. Các thit b lu tr ngoài nh bng t, a tu có kh nng lu tr ln nhng c m truy nhp hoàn toàn khác vi b nh trong. Chúng ta cn tìm các cu trúc d liu gii thut thích hp cho vic x lý d liu lu tr trên b nh ngoài. Kiu d liu tp tin là kiu thích hp nht cho vic biu din d liu c lu trong b nh ngoài. Hu hành chia b nh ngoài thành các khi (block) có kích thc bng nhau, kích thc này thay i tùy thuc vào hu hành nhng nói chung là t 512 bytes n 4096 bytes. Trong quá trình x lý, vic chuyn giao d liu gia b nh trong b nh ngoài c tin hành thông qua vùng nhm (buffer). Bm là mt vùng dành riêng ca b nh trong mà kích thc bng vi kích thc ca mt khi ca b nh ngoài. Có th xem mt tp tin bao gm nhiu mu tin c lu trong các khi . Mi khi lu mt s nguyên vn các mu tin, không có mu tin nào b chia ct  lu trên hai khi khác nhau. Trong thao tác c, nguyên mt khi ca tp tin c chuyn vào trong bm ln lt c các mu tin có trong bm cho ti khi bm rng thì li chuyn mt khi t b nh ngoài vào m.  ghi thông tin ra b nh ngoài, các mu tin ln lt c xp vào trong bm cho n khi y bm thì nguyên mt khi c chuyn ra b nh ngoài. Khi ó bm tr nên rng li có th xp tip các mu tin vào trong ó. 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 68 Nh vy n v giao tip gia b nh trong bm là mu tin còn gia bm b nh ngoài là khi. Hình 4-1 mô t hat ng ca b nh trong, bm b nh ngoài trong thao tác c ghi p tin IV.2- ÁNH GIÁ CÁC GII THUT X LÝ NGOÀI i vi b nh ngoài thì thi gian tìm mt khi c vào b nh trong là rt ln so vi thi gian thao tác trên d liu trong khi ó. Ví d gi s ta có mt khi có th lu 1000 s nguyên c u trên a quay vi vn tc 1000 vòng/ phút thì thi gian a u t vào rãnh cha khi quay a a khi n chu t ht khong 100 mili giây. Vi thi gian này máy có th thc hin 100000 lnh, tc là  sp xp các s nguyên này theo gii thut QuickSort. Vì vy khi ánh giá các gii thut thao tác trên b nh ngoài, chúng ta tp trung vào vic xét s ln c khi vào b nh trong s ln ghi khi ra b nh ngoài ta gi chung là phép truy xut khi (block access). Vì kích thc các khi là cnh nên ta không th tìm cách tng kích thc mt khi mà chúng ta phi tìm cách gim s ln truy xut khi. IV.3- SP XP NGOÀI IV.3.1- Sp xp trn IV.3.2- Ci tin sp xp trn IV.3.3- Trn nhiu ng Sp xp d liu c t chc nh mt tp tin hoc tng quát hn, sp xp d liu c lu trên b nh ngoài gi là sp xp ngoài. IV.3.1- Sp xp trn (merge sorting) Khái nim vng ng  dài k là mt tp hp k mu tin ã oc sp th t theo khoá tc là, nu các mu tin r 1 , r 2 , ., r k có khoá ln lt là k 1 , k 2 , ., k k to thành mt ng thì k 1  k 2  .  k k . Cho tp tin cha các mu tin r 1 , r 2 , ., r n , ta nói tp tin c t chc thành ng có  dài k u ta chia tp tin thành các n k mu tin liên tip mi n là mt ng, n cui có th không có  k mu tin, trong trng hp này ta gi n y là uôi (tail). Ví d 4-1: Tp tin gm 14 mu tin có khóa là các s nguyên c t chc thành 4 ng  dài 3 mt uôi có  dài 2 5 6 9 13 26 27 1 5 8 12 14 17 23 25 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 69 Gii thut  sp xp tp tin F có n mu tin ta s dng 4 tp tin F1, F2, G1 G2. Khi u ta phân phi các mu tin ca tp tin ã cho F luân phiên vào trong hai tp tin F1 F2. Nh vy hai tp tin này c xem nhc t chc thành các ng  dài 1. c 1:c 2 ng, mi ng  dài 1 t hai tp tin F1, F2 trn hai ng này thành ng  dài 2 ghi luân phiên vào trong hai tp tin G1, G2. i vai trò ca F1 cho G1, F2 cho G2. c 2:c 2 ng, mi ng  dài 2 t hai tp tin F1, F2 trn hai ng này thành ng  dài 4 ghi luân phiên vào trong hai tp tin G1, G2. i vai trò ca F1 cho G1, F2 cho G2. Quá trình trên c tip tc sau i bc thì  dài ca mt ng là 2 i . Nu 2 i  n thì gii thut t thúc, lúc ó tp tin G2 s rng tp tin G1 cha các 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 c t 2 tp tin ghi vào 2 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c b mu tin thì mi bc n c ghi khi mà chúng ta cn logn bc vy tng cng chúng ta cn phép truy xut khi. Ví d 4-2: Cho tp tin F có 23 mu tin vi khóa là các s nguyên nh sau: F: 28 31 3 5 93 96 10 40 54 85 65 9 30 39 90 13 10 8 69 77 8 10 22  bt u ta phân phi các mu tin ca F luân phiên vào hai tp tin F1 F2 c t chc thành các ng có  dài 1 28 3 93 10 54 65 30 90 10 69 8 22 F1 31 5 96 40 85 9 39 13 8 77 10 F2 Bc 1: Trn các ng  dài 1 ca F1 F2 c các ng  dài 2 ghi luân phiên vào trong hai tp tin G1, G2: G1: 28 31 93 96 54 85 30 39 8 10 8 10 F1 G2: 3 5 10 40 9 65 13 90 69 77 22 F2 Bc 2: i vai trò ca F1 G1, F2 G2 cho nhau. Trn các ng  dài 2 trong hai tp tin F1 F2 c các ng  dài 4 ri ghi luân phiên vào trong hai tp tin G1 G2: G1: 3 5 28 31 9 54 65 85 8 10 69 77 F1 G2: 10 40 93 96 13 30 39 90 8 10 22 F2 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 70 Bc 3: i vai trò ca F1 G1, F2 G2 cho nhau. Trn các ng  dài 4 trong hai tp tin F1 F2 c các ng  dài 8 ri ghi luân phiên vào trong hai tp tin G1 G2: G1: 3 5 10 28 31 40 93 96 8 8 10 10 22 69 77 F1 G2: 9 13 30 39 54 65 85 90 F2 Bc 4: i vai trò ca F1 G1, F2 G2 cho nhau. Trn các ng  dài 8 trong hai tp tin F1 F2 c các ng  dài 16 ri ghi luân phiên vào trong 2 tp tin G1 G2. G1: 3 5 9 10 13 28 30 31 39 40 54 65 85 90 93 96 F1 G2: 8 8 10 10 22 69 77 F2 Bc 5: i vai trò ca F1 G1, F2 G2 cho nhau. Trn các ng  dài 16 trong hai tp tin F1 F2 c 1 ng  dài 23 ri ghi vào trong tp tin G1. G1: 3 5 8 8 9 10 10 10 13 22 28 30 31 39 40 54 65 77 85 90 93 96 Tp tin G1 cha các mu tin ã c sp còn tp tin G2 rng. Chng trình procedure Merge(k:integer; f1,f2,g1,g2: File of RecordType); {Th tc này trn các ng  dài k trong hai tp tin f1 f2 thành các ng  dài 2k ghi luân phiên vào trong hai tp tin g1 g2} var OutSwithh : boolean; {Nu OutSwitch = TRUE thì 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 nào trong hai tp tin f1 f2 sc ghi ra tp tin g1 hoc g2} Used: array[1 2] of integer; { Used[ij] ghi s mu tin ã c c trong 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 các mu tin trong 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 các mu tin trong ng hin hành ca tp tin fi hoc ã n cui tp tin fi thì t fin[i] = TRUE nu không thì c mt mu tin ca tp tin fi vào trong 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 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 71 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)) do begin {Bt u c các mu tin t trong 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]) do begin {Trn hai ng } { Chn Winner } if Fin[1] then Winner := 2 else if Fin[2] then Winner := 1 else if current[1].key < Current[2].key then Winner := 1 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 quá trình sp xp trn nói trên bt u t các ng  dài 1 cho nên 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 sao cho k mu tin có th cha trong b nh trong. Mi ln c vào b nh trong k mu tin, dùng p xp trong (chng hn dùng QuickSort)  sp xp k mu tin này ghi luân phiên vào hai tp tin F1 F2. Nh vy chúng ta bt u sp xp trn vi các tp tin c t chc thành các ng  dài k. Sau i bc thì  dài mi ng là k2 i . Gii thut s kt thúc khi k2 i  n hay i  log . Do ó  phép truy xut khi s là . D thy c là ta tng c t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 là các s nguyên nh trong ví d 4-2 F: 28 31 3 5 93 96 10 40 54 85 65 9 30 39 90 13 10 8 69 77 8 10 22 Ta gi s b nh trong có th cha c 3 mu tin, ta c ln lt 3 mu tin ca F vào b nh trong , dùng mt sp xp trong  sp xp chúng ghi phiên vào 2 tp tin F1 F2. 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 72 3 28 31 10 40 54 30 39 90 8 69 77 F1 5 93 96 9 65 85 8 10 13 10 22 F2 c 1: Trn các ng  dài 3 ca F1 F2 c các ng  dài 6 ghi luân phiên vào trong hai tp tin G1, G2: G1: 3 5 28 31 93 96 8 10 13 30 39 90 F1 G2: 9 10 40 54 65 85 8 10 22 69 77 F2 c 2:i vai trò ca F1 G1, F2 G2 cho nhau. Trn các ng  dài 6 trong 2 tp tin F1 F2 c các ng  dài 12 ri ghi luân phiên vào trong 2 tp tin G1 G2: G1: 3 5 9 10 28 31 40 54 65 85 93 96 F1 G2: 8 8 10 10 13 22 30 39 69 77 90 F2 c 3:i vai trò ca F1 G1, F2 G2 cho nhau. Trn các ng  dài 12 trong 2 tp tin F1 F2 c 1 ng ghi vào trong tp tin G1, còn G2 rng G1: 3 5 8 8 9 10 10 10 13 22 28 30 31 39 40 54 65 77 85 90 93 96 Tp tin G1 cha các mu tin ã c sp còn 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 là 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ng pháp nh sau (ta vn gi s b nh trong có th cha k mu tin). Khi u: Mi ln c t tp tin F vào b nh trong k mu tin, s dng mt sp xp trong  p xp k mu tin này thành mt ng ri ghi luân phiên vào các tp tin F[1], F[2], . , F[h]. c 1: Trn các 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 trong h tp tin F[h+1], F[h+2], . , F[m]. i vai trò ca F[i] F[h+i]] cho nhau (vi 1  i  h). c 2: Trn các ng  dài kh ca h tp tin F[1], F[2], ., F[h] thành mt ng  dài kh 2 ghi luân phiên vào trong h tp tin F[h+1], F[h+2], . , F[m]. i vai trò ca F[i] F[h+i]] cho nhau (vi 1  i  h). 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 73 Sau i bc thì  dài mi ng là khi gii thut kt thúc khi kh i  n khi ó tp tin ã c sp chính là mt ng ghi trong F[h+1]. ánh giá gii thut sp xp trn nhiu ng Theo trên thì gii thut kt thúc sau i bc, vi kh i  n hay . Mi bc ta phi c t h p tin ghi vào trong 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 thì mi bc phi truy xut khi. Do chúng ta cn c nên tng cng ta ch cn phép truy xut khi.Ta thy rõ ràng th tc mergeSort nói trên là mt trng hp c biêt khi h = 2. Ví d 4-4: Ly tp tin F có 23 mu tin vi khóa là các s nguyên nh trong ví d 4-2 F: 28 31 3 5 93 96 10 40 54 85 65 9 30 39 90 13 10 8 69 77 8 10 22. S dng 6 tp tin  sp xp tp tin F. Ta gi s b nh trong có th cha c 3 mu tin, ta c ln lt 3 mu tin ca F vào b nh trong , dùng mt sp xp trong  sp xp chúng ghi phiên vào 3 tp tin F[1], F[2] F[3] nh sau: F[1]: 3 28 31 9 65 85 8 69 77 F[2]: 5 93 96 30 39 90 10 22 F[3]: 10 40 54 8 10 13 c 1: Trn các ng ü dài 3 trong các tp tin F[1], F[2], F[3] thành các ng  dài 9 ghi vào trong các tp tin F[4], F[5] F[6]. F[4]: 3 5 10 28 31 40 54 93 96 F[1] F[5]: 8 9 10 13 30 39 65 85 90 F[2] F[6]: 8 10 22 69 77 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 các ng  dài 9 trong các tp tin F[1], F[2], F[3] thành 1 ng  dài 23 ghi vào trong tp tin F[4]. F[4]: 3 5 8 8 9 10 10 10 13 22 28 30 31 39 40 54 65 77 85 90 93 96 Tp tin F[4] cha các mu tin ã c sp còn F[5] F[6] rng. IV.4- LU TR THÔNG TIN TRONG TP TIN IV.4.1- Tp tin tun t 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 74 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 gii thut cho lu tr (storing) 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 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, · 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 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 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 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 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 75 · 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 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 a mu tin r vào trong mt khi ca danh sách liên kt c tr bi B[h(x)]. 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 76 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 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 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 t bít xoá ca nó. Ta cng có th xoá hn mu tin r 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 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 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 ó. [...]... áp d ng th t c xen quy xen vào P m t khóa k’ con tr p' ng ng c a nút lá L’ (k' là khoá c a m u tin u tiên trong L') Trong tr ng h p tr c khi xen k' p’ , P ã có m con thì ta ph i c p thêm m t kh i m i P’ chuy n m t s con c a P sang P’ xen con m i vào P ho c P’ sao cho c P P’ u có ít nh t [m/2] con Vi c chia c t P này òi h i phaií xen m t khóa m t con tr vào nút cha c a P Quá trình... 4-6: Ví d 4-10: Thêm m u tin r có khoá 23 vào trong t p tin bi u di n b i B-cây trong 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 lá L5 · Vì L5 ã 3 m u tin nên ph i t o ra m t nút lá m i L’5 chuy n 2 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 trong L’5 là 24, ta ph i xen 24 con tr c a L’5 vào P2, nh ng P2 ã có 5 con v y c n t o... thì gi i phóng L n u s con c a P bây gi nh n [m/2] thì ki m tra nút P’ ngay bên trái ho c bên ph i cùng m c v i P N u P’ có ít nh t [m/2] + 1 con, chúng ta chuy n m t con P’ sang P Lúc này c P P’ có ít nh t [m/2] con Sau ó ta ph i c p nh t l i giá tr khóa c a P P’ trong cha c a chúng, n u c n chúng ta ph i s a c trong t tiên c a chúng N u P’ có úng [m/2] con, ta n i P P’ thành m t... p khóa, con tr t ng ng i 34 38 sang P’2 xen c p con 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 là nút G C) m t c p khóa, con tr tr t i P’2 Con tr p0 c a nút P’2 tr t i nút lá L6, giá tr khóa u tiên c a L6 là 28 Giá tr này ph i c xen vào nút G C cùng v i con tr... nút g c c ng có th ph i chia c t nút g c, trong tr ng h p này ph i t o ra m t nút g c m i mà hai con c a nó là hai a c a nút g c c Khi ó chi u cao c a B-cây s t ng lên 1 Ví d 4-9: Thêm m u tin r có khoá 19 vào t p tin c bi u di n b i B-cây trong ví d 4-8 · Quá trình tìm ki m s xu t phát t G C i qua P2 d n t i nút lá L4 · Trong nút lá L4 còn K t qu vi c xen ta ch xen r vào úng v trí gi i thu... 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 lá 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 con tr c a L2 trong P1, P1 bây gi ch có 2 con (2 < [5/2]) · Xét nút P2, bên ph i cùng c p v i P1, P2 có úng [5/2] = 3 con nên ta n i P1 P2 P1 có úng 5 con, · Xóa khóa con tr c a P2 trong nút G C, ta Giáo trình môn Phân tích Gi... 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 xen m u tin r vào úng... 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 c p nh t l i t p tin ch m c n ây chúng ta s th y r ng cách phân ph i các m u tin vào trong các 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 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... là x vào trong B-cây, ta áp d ng th t c tìm ki m nói trên xác nh nút lá L mà m u tin này ph i n m trong ó N u kh i L này còn ch cho r thì ta thêm r vào sao cho úng th t c a nó trong kh i L gi i thu t k t thúc N u L không còn ch cho r thì ta yêu c u h th ng c p phát m t kh i m i L' D i [b/2] (b là s m u tin nhi u nh t có th l u trong 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 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 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 . trong và bm là mu tin còn gia bm và b nh ngoài là khi. Hình 4-1 mô t hat ng ca b nh trong, bm và b nh ngoài trong thao tác c và. thut thao tác trên b nh ngoài, chúng ta tp trung vào vic xét s ln c khi vào b nh trong và s ln ghi khi ra b nh ngoài ta gi chung là phép

Ngày đăng: 29/09/2013, 11:20

Hình ảnh liên quan

Hình 4-1 mô th at ng ca b nh trong, bm và b nh ngoài trong thao tá cc và ghi - Giải thuật dữ liệu và giải thuật lưu trữ ngoài

Hình 4.

1 mô th at ng ca b nh trong, bm và b nh ngoài trong thao tá cc và ghi Xem tại trang 2 của tài liệu.
trên. Kt qu ta c cu trúc nh trong hình sau: - Giải thuật dữ liệu và giải thuật lưu trữ ngoài

tr.

ên. Kt qu ta c cu trúc nh trong hình sau: Xem tại trang 11 của tài liệu.
trong hình 4-3. Th tc tìm x trong tp tin ch mc xác nh c khi cn xen r là khi 3. Vì khi 3 có - Giải thuật dữ liệu và giải thuật lưu trữ ngoài

trong.

hình 4-3. Th tc tìm x trong tp tin ch mc xác nh c khi cn xen r là khi 3. Vì khi 3 có Xem tại trang 12 của tài liệu.
(hình 4-5) - Giải thuật dữ liệu và giải thuật lưu trữ ngoài

hình 4.

5) Xem tại trang 14 của tài liệu.
(hình 4-6). - Giải thuật dữ liệu và giải thuật lưu trữ ngoài

hình 4.

6) Xem tại trang 15 của tài liệu.

Tài liệu cùng người dùng

Tài liệu liên quan