Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................Trang 67
1. Mc tiêu
2. Kin thc c bn cn có hc chng này
3. Tài liu tham kho có liên quan n chng
4. Ni dung:
IV.1 - Mô hình x lý ngoài.
IV.2 - ánh giá các gii thut x lý ngoài.
IV.3 - Sp xp ngoài.
IV.4 - Lu tr thông tin trong tp tin.
Trong chng này chúng ta s nghiên cu hai vn chính là sp xp d liu c l
u trong
nh ngoài và k thut lu tr tp tin. Trong k thut lu tr tp tin chúng ta s s dng các cu trúc
liu tun t, bng bm, tp tin ch mc và cu trúc B-cây.
IV.1- MÔ HÌNH X LÝ NGOÀI
Trong các gii thut mà chúng ta ã cp t trc ti nay, chúng ta ã gi s rng s lng
các d liu vào là khá nh có th cha ht b nh trong (main memory). Nhng u gì s xy ra
u ta mun x lý phiu u tra dân s toàn quc hay thông tin v qun lý t ai c nc chng hn?
Trong các bài toán nh vy, s lng d liu vt quá kh nng lu tr ca b nh trong. có th
gii quyt các bài toán ó chúng ta phi dùng b nh ngoài lu tr và x lý. Các thit b lu tr
ngoài nh bng t, a tu có kh nng lu tr ln nhng c m truy nhp hoàn toàn khác vi b
nh trong. Chúng ta cn tìm các cu trúc d liu và gii thut thích hp cho vic x lý d liu lu tr
trên b nh ngoài.
Kiu d liu tp tin là kiu thích hp nht cho vic biu din d liu c lu trong b nh
ngoài. Hu hành chia b nh ngoài thành các khi (block) có kích thc bng nhau, kích thc này
thay i tùy thuc vào hu hành nhng nói chung là t 512 bytes n 4096 bytes.
Trong quá trình x lý, vic chuyn giao d liu gia b nh trong và b nh ngoài c tin
hành thông qua vùng nhm (buffer). Bm là mt vùng dành riêng ca b nh trong mà kích
thc bng vi kích thc ca mt khi ca b nh ngoài.
Có th xem mt tp tin bao gm nhiu mu tin c lu trong các khi . Mi khi lu mt s
nguyên vn các mu tin, không có mu tin nào b chia ct lu trên hai khi khác nhau.
Trong thao tác c, nguyên mt khi ca tp tin c chuyn vào trong bm và ln lt
c các mu tin có trong bm cho ti khi bm rng thì li chuyn mt khi t b nh ngoài vào
m.
ghi thông tin ra b nh ngoài, các mu tin ln lt c xp vào trong bm cho n khi
y bm thì nguyên mt khi c chuyn ra b nh ngoài. Khi ó bm tr nên rng và li có
th xp tip các mu tin vào trong ó.
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN TH........................................................................Trang 68
Nh vy n v giao tip gia b nh trong và bm là mu tin còn gia bm và b nh
ngoài là khi.
Hình 4-1 mô t hat ng ca b nh trong, bm và b nh ngoài trong thao tác c và ghi
p tin
IV.2- ÁNH GIÁ CÁC GII THUT X LÝ NGOÀI
i vi b nh ngoài thì thi gian tìm mt khi c vào b nh trong là rt ln so vi thi
gian thao tác trên d liu trong khi ó. Ví d gi s ta có mt khi có th lu 1000 s nguyên c
u trên a quay vi vn tc 1000 vòng/ phút thì thi gian a u t vào rãnh cha khi và quay
a a khi n chu t ht khong 100 mili giây. Vi thi gian này máy có th thc hin
100000 lnh, tc là sp xp các s nguyên này theo gii thut QuickSort. Vì vy khi ánh giá
các gii thut thao tác trên b nh ngoài, chúng ta tp trung vào vic xét s ln c khi vào b nh
trong và s ln ghi khi ra b nh ngoài ta gi chung là phép truy xut khi (block access). Vì kích
thc các khi là cnh nên ta không th tìm cách tng kích thc mt khi mà chúng ta phi tìm
cách gim s ln truy xut khi.
IV.3- SP XP NGOÀI
IV.3.1- Sp xp trn
IV.3.2- Ci tin sp xp trn
IV.3.3- Trn nhiu ng
Sp xp d liu c t chc nh mt tp tin hoc tng quát hn, sp xp d liu c lu
trên b nh ngoài gi là sp xp ngoài.
IV.3.1- Sp xp trn (merge sorting)
Khái nim vng
ng dài k là mt tp hp k mu tin ã oc sp th t theo khoá tc là, nu các mu tin
r
1
, r
2
, ..., r
k
có khoá ln lt là k
1
, k
2
, ..., k
k
to thành mt ng thì k
1
k
2
... k
k
.
Cho tp tin cha các mu tin r
1
, r
2
, ..., r
n
, ta nói tp tin c t chc thành ng có dài k
u ta chia tp tin thành các n k mu tin liên tip và mi n là mt ng, n cui có th
không có k mu tin, trong trng hp này ta gi n y là uôi (tail).
Ví d 4-1: Tp tin gm 14 mu tin có khóa là các s nguyên c t chc thành 4 ng
dài 3 và mt 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 Gii Thut – I C CN TH........................................................................Trang 69
Gii thut
sp xp tp tin F có n mu tin ta s dng 4 tp tin F1, F2, G1 và G2.
Khi u ta phân phi các mu tin ca tp tin ã cho F luân phiên vào trong hai tp tin F1 F2.
Nh vy hai tp tin này c xem nhc t chc thành các ng dài 1.
c 1:c 2 ng, mi ng dài 1 t hai tp tin F1, F2 và trn hai ng này thành
ng dài 2 và ghi luân phiên vào trong hai tp tin G1, G2. i vai trò ca F1 cho G1, F2 cho G2.
c 2:c 2 ng, mi ng dài 2 t hai tp tin F1, F2 và trn hai ng này thành
ng dài 4 và ghi luân phiên vào trong hai tp tin G1, G2. i vai trò ca F1 cho G1, F2 cho G2.
Quá trình trên c tip tc và sau i bc thì dài ca mt ng là 2
i
. Nu 2
i
n thì gii thut
t thúc, lúc ó tp tin G2 s rng và tp tin G1 cha các mu tin ã c sp.
ánh giá gii thut sp xp trn
Ta thy gii thut kt thúc sau i bc vi i logn. Mi bc phi c t 2 tp tin và ghi vào 2
p tin, mi tp tin có trung bình n/2 mu tin. Gi s mi mt khi lu trc b mu tin thì mi bc
n c và ghi khi mà chúng ta cn logn bc vy tng cng chúng ta cn phép
truy xut khi.
Ví d 4-2: Cho tp tin F có 23 mu tin vi 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
bt u ta phân phi các mu tin ca F luân phiên vào hai tp tin F1 và F2 c t chc
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
Bc 1: Trn các ng dài 1 ca F1 và F2 c các ng dài 2 và ghi luân phiên vào
trong hai tp 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
Bc 2: i vai trò ca F1 và G1, F2 và G2 cho nhau. Trn các ng dài 2 trong hai tp
tin F1 và F2 c các ng dài 4 ri ghi luân phiên vào trong hai tp tin G1 và 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 Gii Thut – I C CN TH........................................................................Trang 70
Bc 3: i vai trò ca F1 và G1, F2 và G2 cho nhau. Trn các ng dài 4 trong hai tp
tin F1 và F2 c các ng dài 8 ri ghi luân phiên vào trong hai tp tin G1 và 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
Bc 4: i vai trò ca F1 và G1, F2 và G2 cho nhau. Trn các ng dài 8 trong hai tp
tin F1 và F2 c các ng dài 16 ri ghi luân phiên vào trong 2 tp tin G1 và 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
Bc 5: i vai trò ca F1 và G1, F2 và G2 cho nhau. Trn các ng dài 16 trong hai tp
tin F1 và F2 c 1 ng dài 23 ri ghi vào trong tp 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
Tp tin G1 cha các mu tin ã c sp còn tp tin G2 rng.
Chng trình
procedure Merge(k:integer; f1,f2,g1,g2: File of RecordType);
{Th tc này trn các ng dài k và trong hai tp tin f1 và f2 thành các ng dài 2k và
ghi luân phiên vào trong hai tp tin g1 và g2}
var
OutSwithh : boolean; {Nu OutSwitch = TRUE thì ghi vào tp tin g1, ngc li ghi vào g2}
Winner: integer; { chnh mu tin hin hành nào trong hai tp tin f1 và f2 sc ghi ra tp
tin g1 hoc g2}
Used: array[1..2] of integer; { Used[ij] ghi s mu tin ã c c trong ng hin ti ca tp
tin fj }
Fin : array[1..2] Of boolean; {Fin[j] s có giá tr TRUE nu ã c ht các mu tin trong ng
hin hành ca fj hoc ã dn cui tp tin fj }
Current: array[1..2] Of RecordType; { Current[j] lu mu tin hin hành ca tp tin f[j]}
procedure GetRecord(i:integer);
{Nu ã c ht các mu tin trong ng hin hành ca tp tin fi hoc ã n cui tp tin fi thì
t fin[i] = TRUE nu không thì c mt mu tin ca tp 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 Gii Thut – I C CN TH........................................................................Trang 71
else if i=1 then Read(f1, current[1])
else read(f2, current[2]);
end;
begin
{ Khi to }
OutSwitch := TRUE;
ReSet(f1);
ReSet(f2);
ReWrite(g1);
ReWrite(g2);
while (not eof(f1)) or (not eof(f2)) do begin
{Bt u c các mu tin t trong hai ng hin hành ca hai tp 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
{Trn hai ng }
{ Chn 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.Ci tin sp xp trn
Ta thy quá trình sp xp trn nói trên bt u t các ng dài 1 cho nên phi sau logn
c gii thut mi kt thúc. Chúng ta có th tit kim thi gian bng cách chn mt s k thích hp
sao cho k mu tin có th cha trong b nh trong. Mi ln c vào b nh trong k mu tin, dùng
p xp trong (chng hn dùng QuickSort) sp xp k mu tin này và ghi luân phiên vào hai tp tin
F1 và F2. Nh vy chúng ta bt u sp xp trn vi các tp tin c t chc thành các ng dài
k.
Sau i bc thì dài mi ng là k2
i
. Gii thut s kt thúc khi k2
i
n hay i log . Do ó
phép truy xut khi s là . D thy c là ta tng c tc sp xp trn.
Ví d 4-3: Ly tp tin F có 23 mu tin vi 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 cha c 3 mu tin, ta c ln lt 3 mu tin ca F vào b nh
trong , dùng mt sp xp trong sp xp chúng và ghi phiên vào 2 tp tin F1 và F2.
Collected by The_Wall (11/10/2005)
Giáo trình môn Phân tích Gii Thut – I C CN 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: Trn các ng dài 3 ca F1 và F2 c các ng dài 6 và ghi luân phiên vào
trong hai tp 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ò ca F1 và G1, F2 và G2 cho nhau. Trn các ng dài 6 trong 2 tp tin
F1 và F2 c các ng dài 12 ri ghi luân phiên vào trong 2 tp tin G1 và 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ò ca F1 và G1, F2 và G2 cho nhau. Trn các ng dài 12 trong 2 tp
tin F1 và F2 c 1 ng ghi vào trong tp tin G1, còn G2 rng
G1: 3 5 8 8 9 10 10 10 13 22 28 30 31 39 40 54 65 77 85 90 93 96
Tp tin G1 cha các mu tin ã c sp còn tp tin G2 rng.
IV.3.3- Trn nhiu ng (multiway merge)
Gii thut
sp xp tp tin F có n mu tin ta s dng m tp tin (m là mt s chn) F[1], F[2], ..., F[m].
Trong trng hp m=4 ta có gii thut sp xp trn bình thng.
Gi h = m/2, ta có ni dung ca phng pháp nh sau (ta vn gi s b nh trong có th cha
k mu tin).
Khi u: Mi ln c t tp tin F vào b nh trong k mu tin, s dng mt sp xp trong
p xp k mu tin này thành mt ng ri ghi luân phiên vào các tp tin F[1], F[2], ... , F[h].
c 1: Trn các ng dài k ca h tp tin F[1], F[2], ..., F[h] thành mt ng dài kh
và ghi luân phiên vào trong h tp tin F[h+1], F[h+2], ... , F[m]. i vai trò ca F[i] và F[h+i]] cho nhau
(vi 1 i h).
c 2: Trn các ng dài kh ca h tp tin F[1], F[2], ..., F[h] thành mt ng dài
kh
2
và ghi luân phiên vào trong h tp tin F[h+1], F[h+2], ... , F[m]. i vai trò ca F[i] và F[h+i]] cho
nhau (vi 1 i h).