Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
1
Ch ng 2
Phân tích ph c t p c a m t sgi i thu t s p th t và tìm ki m
2
N i dung
1. Vài ph ng pháp s p th t c n b n2. Quicksort3. X p th t d a vào c s4. X p th t b ng ph ng pháp tr n5. X p th t ngo i6. Vài ph ng pháp tìm ki m c n b n
3
Nguyên t c v s p th t
Xét nh ng ph ng pháp s p th t m t t p tin g m cácm u tin (record) có ch a khóa (key). Khóa mà là m t ph nc a m u tin, c dùng i u khi n vi c s p th t .
M c tiêu: s p x p các m u tin sao cho các tr khóa c achúng có th t theo m t qui lu t th t nào ó.
N u các t p tin c s p th t có th ch a trong b nhchính thì gi i thu t s p th t c g i là s p th t n i(internal sorting).
Vi c s p th t t p tin l u b nh ph c g i là s p tht ngo i (external sorting).
4
Hai nhóm ph ng pháp s p th t
Chúng ta quan tâm n th i gian tính toán c a cácgi i thu t s p th t .
1. M t nhóm g m 4 ph ng pháp c n b n òi h ith i gian tính toán t l v i N2 s p th t Nph n t .
2. Các ph ng pháp tiên ti n h n có th s p th t Nph n t trong th i gian ch y t l v i NlgN.
M t c tính c a ph ng pháp s p th t là tính n nh(stability). M t ph ng pháp s p th t c g i là n nhkhi nó b o toàn c th t t ng i c a các ph n tcùng tr khóa trong t p tin.
5
1. Nhóm ph ng pháp c n b n
V i nhóm này, có hai ph ng pháp s p th t cch n kh o sát:
- s p th t b ng ph ng pháp ch n (selection sort)
- s p th t b ng ph ng pháp chèn (insertion sort)
V i m c ích t p trung vào khía c nh gi i thu t, ta slàm vi c v i các ph ng pháp mà nó ch s p th tcác m ng s nguyên theo th t l n d n c a s .
6
S p th t b ng ph ng pháp ch n
Ý t ng:“Tr c tiên tìm ph n t nh nh t trong m ng và hoán i
nó v i ph n t ang v trí th nh t trong m ng, và r itìm ph n t nh th nhì trong m ng và hoán i nó v iph n t ang v trí th nhì trong m ng, và c th cho
n khi toàn m ng ã c s p th t .”
390 45 45 45 45205 205 182 182 182182 182 205 205 20545 390 390 390 235235 235 235 235 390
7
Gi i thu t s p th t b ng ph ng pháp ch n
procedure selection;var i, j, min, t: integer;begin
for i :=1 to N-1 dobegin
min :=i;for j :=i+1 to N do
if a[j]<a[min] then min :=j;t :=a[min]; a[min] :=a[i];a[i] :=t;
end;end;
8
Phân tích ph c t p c a selection sort
Vòng l p trong (tác v so sánh) c th c hi n v it ng s l n nh sau:(N-1)+(N-2)+...+1 =N(N-1)/2
=O(N2)Vòng l p ngoài c th c thi N-1 l n.
Tính ch t 1.1: Selection sort th c thi kho ng N hoánv và N2/2 so sánh.
Ghi chú: Th i gian tính toán c a selection sort thìc l p i v i d li u nh p.
9
S p th t b ng ph ng pháp chèn
Ý t ng :Gi i thu t xem xét t ng ph n t m t, chèn nó vào v trí úngc a nó trong nhóm các ph n t ã c s p th t r i.
390 205 182 45 45205 390 205 182 182182 182 390 205 20545 45 45 390 235235 235 235 235 390
10
Gi i thu t s p th t b ng ph ng pháp chèn
procedure insertion;var i; j; v:integer;begin
for i:=2 to N dobegin
v:=a[i]; j:= i;while a[j-1]> v dobegin
a[j] := a[j-1]; // pull downj:= j-1 end;
a[j]:=v;end;
end;
11
Nh ng l ý v gi i thu t insertion sort
1. Chúng ta dùng m t tr khóa “c m canh” (sentinel) t ia[0], làm cho nó nh h n ph n t nh nh t trong m ng.
2. Vòng l p ngoài c a gi i thu t c th c thi N-1 l n.Tr ng h p x u nh t x y ra khi m ng ã có th t ong c. Khi ó, vòng l p trong c th c thi v i t ng sl n sau ây:(N-1) + (N-2) + ... + 1 =N(N-1)/2
=O(N2)S b c chuy n = N(N-1)/2 S so sánh = N(N-1)/2
3. Trung bình có kho ng ch ng (i-1)/2 so sánh c th cthi trong vòng l p trong. Do ó, trong tr ng h p trungbình, t ng s l n so sánh là:(N-1)/2 + (N-2)/2 + ... + 1/2 =N(N-1)/4
=O(N2)
12
ph c t p c a s p th t b ng ph ng phápch n và ph ng pháp chèn
Tính ch t 1.2: S p th t b ng ph ng pháp ch nth c thi kho ng N2/2 so sánh và N2/4 hoán v trongtr ng h p x u nh t.
Tính ch t 1.3: S p th t b ng ph ng pháp chènth c thi kho ng N2/4 so sánh và N2/8 hoán v trongtr ng h p trung bình.
Tính ch t 1.4: S p th t b ng ph ng pháp chèn cóph c t p tuy n tính i v i m t m ng ã g n có
th t .
13
2. Gi i thu t Quick sort
Gi i thu t c n b n c a Quick sort c phát minh n m1960 b i C. A. R. Hoare.
Quicksort c a chu ng vì nó không quá khó hi nth c hóa.Quicksort ch òi h i kho ng ch ng NlgN thao tác c n b n
s p th t N ph n t .
Nh c i m c a Quick sort g m:- Nó là m t gi i thu t quy- Nó c n kho ng N2 thao tác c n b n trong tr ng h p
x u nh t- Nó d b l i khi l p trình (fragile).
14
Gi i thu t c n b n c a QuicksortQuicksort là m t ph ng pháp x p th t theo ki u “chia
tr ”. Nó th c hi n b ng cách phân ho ch m t t p tinthành hai ph n và s p th t m i ph n m t cách c l pv i nhau.Gi i thu t có c u trúc nh sau:
procedure quicksort1(left,right:integer);var i: integer;begin
if right > left thenbegin
i:= partition(left,right);quicksort(left,i-1);quicksort(i+1,right);
end;end;
15
Phân ho ch
Ph n then ch t c a Quicksort là th t c phân ho ch(partition), mà s p x p l i m ng sao cho th a mãn 3 i uki n sau:
i) ph n t a[i] c a v v trí úng n c a nó, v i m tgiá tr i nào ó,
ii) t t c nh ng ph n t trong nhóm a[left], ..., a[i-1] thì nhh n hay b ng a[i]
iii) t t c nh ng ph n t trong nhóm a[i+1], ..., a[right] thìl n h n hay b ng a[i]
Example:
53 59 56 52 55 58 51 57 5452 51 53 56 55 58 59 57 54
16
Thí d v phân ho ch
Gi s chúng ta ch n ph n t th nh t hay ph n t t n cùng trái (leftmost ) nh là ph n t s c a v v trí úng c anó ( Ph n t này c g i là ph n t ch t - pivot).
40 15 30 25 60 10 75 45 65 35 50 20 70 55
40 15 30 25 20 10 75 45 65 35 50 60 70 55
40 15 30 25 20 10 35 45 65 75 50 60 70 55
35 15 30 25 20 10 40 45 65 75 50 60 70 55
nh h n 40 sorted l n h n 40
17
Gi i thu t Quicksortprocedure quicksort2(left, right: integer);var j, k: integer;begin
if right > left thenbegin
j:=left; k:=right+1;//start partitioningrepeat
repeat j:=j+1 until a[j] >= a[left];repeat k:=k-1 until a[k]<= a[left];if j< k then swap(a[j],a[k])
until j>k;swap(a[left],a[k]); //finish partitioningquicksort2(left,k-1);quicksort2(k+1,right)
end;end;
18
Phân tích ph c t p: tr ng h p t t nh t
Tr ng h p t t nh t x y ra v i Quicksort là khi m i l nphân ho ch chia t p tin ra làm hai ph n b ng nhau.
i u này làm cho s l n so sánh c a Quicksort th a mãn hth c truy h i:
CN = 2CN/2 + N.
S h nh 2CN/2 là chi phí c a vi c s p th t hai n a t p tinvà N là chi phí c a vi c xét t ng ph n t khi phân ho ch l n
u.T ch ng 1, vi c gi i h th c truy h i này ã a n l igi i:
CN N lgN.
19
Phân tích ph c t p: tr ng h p x u nh t
M t tr ng h p x u nh t c a Quicksort là khi t p tin ã cóth t r i.
Khi ó, ph n t th nh t s òi h i n so sánh nh n ra r ng nó nên úng v trí th nh t. H n n a, sau ó phân
o n bên trái là r ng và và phân o n bên ph i g m n – 1ph n t . Do ó v i l n phân ho ch k , ph n t th hai sòi h i n-1 so sánh nh n ra r ng nó nên úng v trí th
hai. Và c ti p t c nh th .
Nh v y t ng s l n so sánh s là:n + (n-1) + … + 2 + 1 = n(n+1)/2 =
(n2 + n)/2 = O(n2).
ph c t p tr ng h p x u nh t c a Quicksort là O(n2).
20
ph c t p tr ng h p trung bình c a Quicksort
Công th c truy h i chính xác cho t ng s so sánh mà Quicksort c n s p th t N ph n t c hình thành m t cáchng u nhiên:
N
CN = (N+1) + (1/N) (Ck-1 + CN-k)1
v i N 2 và C1 = C0 = 0
S h ng (N+1) bao g m s l n so sánh ph n t ch t v i t ngph n t khác, thêm hai l n so sánh hai pointer giao nhau.Ph n còn l i là do s ki n m i ph n t v trí k có cùng xácxu t 1/N c làm ph n t ch t mà sau ó chúng ta cóhai phân o n v i s ph n t l n l t là k-1 và N-k.
21
Chú ý r ng, C0 + C1 + … + CN-1 thì gi ng h t
CN-1 + CN-2 +… + C0, nên ta cóN
CN = (N+1) + (1/N) 2Ck-11
Ta có th lo i tr i l ng tính t ng b ng cách nhân c hai vv i N và r i tr cho cùng công th c nhân v i N-1:
NCN – (N-1) CN-1 = N(N+1) – (N-1)N + 2CN-1
T ó ta c
NCN = (N+1)CN-1 + 2N
22
Chia c hai v v i N(N+1) ta c h th c truy h i:
CN/(N+1) = CN-1/N + 2/(N+1)
= CN-2 /(N-1) + 2/N + 2/(N+1)
.
.N
= C2 /3 + 2/(k+1)3
N N
CN/(N+1) 2 1/k 2 1/x dx = 2lnN1 1
Suy ra:
CN 2NlnN
23
ph c t p tr ng h p trung bình c aQuicksort (tt.)
Vì ta có:
lnN = (log2N).(loge2) =0.69 lgN
2NlnN 1.38 NlgN.
T ng s so sánh trung bình c a Quicksort ch kho ngch ng 38% cao h n trong tr ng h p t t nh t.
M nh . Quicksort c n kho ng 2NlnN so sánh trongtr ng h p trung bình.
24
Kh quy gi i thu t Quicksort
procedure quicksort3;var t, i, left, right : integer;begin
left :=1; right:= N;stackinit;push(left); push(right);repeat
if right > left thenbegin
i=: partition(left,right);if (i –left) > (right –i) then
begin push(left); push(i-1);left := i+1 end
elsebegin
push (i+1);push(right);right:=i-1
end;endelsebegin right := pop; left := popend;
until stackempty;end;
Dùng ng n x p (stack) ta có th chuy n Quicksort thành m tgi i thu t không quy
25
3. S p th t d a vào c s
Trong nhi u ng d ng, các tr khóa có th là nh ng khóathu c m t t m h n nh nào ó.
Các ph ng pháp s p th t mà l i d ng tính ch t s c acác khóa c g i là s p th t d a vào c s (radix sort).
Nh ng ph ng pháp này không ch so sánh các tr khóachúng x lý và so sánh các ph n c a khóa.
S p th t d a vào c s coi các tr khóa nh là nh ng sc bi u di n d ng h c s M và làm vi c v i t ng ký
s (digit) n l .
V i h u h t m i máy tính, th t ti n l i làm vi c v i cs 2 (M =2), h n là c s th p phân (M =10).
26
Bit
Cho m t khóa c di n t d i d ng m t s nh phân,m t tác v c n thi t là trích các t p bit k nhau t m t s .
V I ngôn ng máy, các bit c trích t s nh phân nhcác tác v nh “and” và “shift” trên các bit.
Thí d : Ta có th trích hai bit u c a m t s 10 bit b ngcách dùng tác v “shift right”(d ch sang ph i) 8 bit r i th chi n tác v “and” t ng bit v i m t n 0000000011.
Trong ngôn ng Pascal, nh ng tác v trên có th c gil p b ng hai tác v div và mod.
27
Làm vi c trên bitHai bit u c a m t s m i bit c trích b i: (x div 256)mod 4.
“d ch s x sang ph i k v trí bit” c th c hi n b i:
x div 2k
“gán zero t t c tr j bit t n cùng ph i “ c th c hi n b i:
(x div 2 k) mod 2j
Trong gi i thu t s p th t d a vào c s , gi s ã t n t ihàm bits(x,k,j :integer):integer mà tr v j bit xu t hi n cách kbit k t m c bên ph i trong s x.
28
Gi i thu t s p th t hoán v c s
Ph ng pháp c n b n c a gi i thu t s p th t hoán v c s(exchange radix sort) là xem xét t ng bit c a tr khóa t tráisang ph i.
Ý t ng: K t qu c a s so sánh gi a hai tr khóa ch tùythu c vào giá tr c a t ng bit t i v trí u tiên mà chúng khácnhau ( c t trái sang ph i).
29
S p th t hoán v c s
S p th t hoán v c s (Radix Exchange Sort)
Vi c s p th t t p tin c th c hi n theo m t cách gi ngnh thao tác phân ho ch trong Quicksort.
duy t t trái sang ph i tìm tr khóa mà b t u b ngbit 1,
duy t t ph i sang trái tìm tr khóa mà b t u b ngbit 0,
hoán v hai tr khóa này,
và ti p t c quá trình này cho n khi hai con tr giaonhau.
30
procedure radix_exchange(1, r, b : integer);var t, i, j: integer;begin
if (r >1) and (b>=0) thenbegin
i:= 1; j:= r;repeat
while (bits(a[i], b, 1)=0) and (i <j) do i:=i+1;while (bits(a[j], b, 1)=1) and (i<j) do j:= j-1;swap(a[i],a[j]);
until j=i;if bits(a[r], b, 1)= 0 then j:=j +1 ;radix_exchange(1, j-1, b-1); radix_exchange(j, r, b-1);
endend;
31
S p th t hoán v c s (tt.)
Gi s m ng a[1..N] ch a các s nguyên d ng nh h n 232
(sao cho chúng có th c di n t thành các s nh phân 31-bit).
Thì l nh g i radix_echange (1,N,30) s s p th t c cho dãy.
Bi n b theo dõi các bit t bit th 30 (t n cùng trái) cho n bitth 0 (t n cùng ph i).
Hình v sau ây minh h a s phân ho ch theo bi u di n nhphân c a các tr khóa. M t phép mã hóa 5 bit c dùng cho khóa.
32
A 0 0 0 0 1 A 0 0 0 0 1 A 0 0 0 0 1 A 0 0 0 0 1 A 0 0 0 0 1 A 0 0 0 0 1
S 1 0 0 1 1 E 0 0 1 0 1 E 0 0 1 0 1 A 0 0 0 0 1 A 0 0 0 0 1 A 0 0 0 0 1
O 0 1 1 1 1 O 0 1 1 1 1 A 0 0 0 0 1 E 0 0 1 0 1 E 0 0 1 0 1 E 0 0 1 0 1
R 1 0 0 1 0 L 0 1 1 0 0 E 0 0 1 0 1 E 0 0 1 0 1 E 0 0 1 0 1 E 0 0 1 0 1
T 1 0 1 0 0 M 0 1 1 0 1 G 0 0 1 1 1 G 0 0 1 1 1 G 0 0 1 1 1 G
I 0 1 0 0 1 I 0 1 0 0 1 I 0 1 0 0 1 I 0 1 0 0 1 I I
N 0 1 1 1 0 N 0 1 1 1 0 N 0 1 1 1 0 N 0 1 1 1 0 L 0 1 1 0 0 L 0 1 1 0 0
G 0 0 1 1 1 G 0 0 1 1 1 M 0 1 1 0 1 M 0 1 1 0 1 M 0 1 1 0 1 M 0 1 1 0 1
E 0 0 1 0 1 E 0 0 1 0 1 L 0 1 1 0 0 L 0 1 1 0 0 N 0 1 1 1 0 N 0 1 1 1 0
X 1 1 0 0 0 A 0 0 0 0 1 O 0 1 1 1 1 O 0 1 1 1 1 O 0 1 1 1 1 O 0 1 1 1 1
A 0 0 0 0 1 X 1 1 0 0 0 S 1 0 0 1 1 S 1 0 0 1 1 P 1 0 0 0 0 P
M 0 1 1 0 1 T 1 0 1 0 0 T 1 0 1 0 0 R 1 0 0 1 0 R 1 0 0 1 0 R 1 0 0 1 0
P 1 0 0 0 0 P 1 0 0 0 0 P 1 0 0 0 0 P 1 0 0 0 0 S 1 0 0 1 1 S 1 0 0 1 1
L 0 1 1 0 0 R 1 0 0 1 0 R 1 0 0 1 0 T 1 0 1 0 0 T T
E 0 0 1 0 1 S 1 0 0 1 1 X 1 1 0 0 0 X X X
Hình 3.3.1 S p th t hoán v c s
33
ph c t p c a s p th t d a vào c s
Th i gian tính toán c a s p th t hoán v c s s p th t Nm u tin là Nb.
M t khác, ta có th coi th i gian tính toán b ng v i NlgN vìn u các tr khóa khác bi t nhau thì b ít nh t ph i là lgN.
Tính ch t 3.1: S p th t d a vào c s c n trung bình kho ngNlgN s so sánh bit.
N u kích th c c a m ng là l y th a c a 2 và các bit là ng unhiên, thì chúng ta k v ng r ng m t n a nh ng bit u có trlà 0 và m t n a có tr là 1. Do ó h th c truy h i là:CN = 2CN/2 + N.
Trong gi i thu t s p th t hoán v c s , s phân ho chth ng d ph m vi trung tâm h n là trong in Quicksort.
34
4. S p th t b ng cách tr n (mergesort)
Tr c tiên, chúng ta xét m t quá trình c g i là tr n(merging), thao tác ph i h p hai t p tin ã có th tthành m t t p tin có th t l n h n.
Tr n
Trongnhi u ng d ng x lý d li u, ta ph i duy trìm t t p d li u có th t khá l n. Các ph n t m ith ng xuyên c thêm vào t p tin l n.
Nhóm các ph n t c ính vào uôi c a t p tin l nvà toàn b t p tin c s p th t tr l i.
Tình hu ng ó r t thích h p cho thao tác tr n.
35
Tr nGi s ta có hai m ng s nguyên có th t a[1..M] vàb[1..N]. Ta mu n tr n chúng thành m t m ng th bac[1..M+N].
i:= 1; j :=1;for k:= 1 to M+N do
if a[i] < b[j] thenbegin c [k] := a[i]; i:= i+1 end
else begin c[k] := b[j]; j := j+1 end;
Ghi chú: Gi i thu t dùng a[M+1] và b[N+1] làm ph nt c m canh ch a hai giá tr l n h n m i tr khóa khác.Nh chúng, khi m t trong hai m ng ã c n thì vòng l p s
a ph n còn l i c a m ng còn l i vào m ng c.
36
S p th t b ng ph ng pháp tr n
M t khi ta ã có th t c tr n, ta dùng nó làm c s xâyd ng m t th t c s p th t quy.
s p th t m t t p tin nào ó, ta chia thành hai o nb ng nhau, s p th t hai o n này m t cách quy và r itr n hai o n l i v i nhau.
Gi i thu t sau s p th t m ng a[1..r], dùng m ng b[1..r]làm trung gian,
37
procedure mergesort(1,r: integer);var i, j, k, m : integer;begin
if r-1>0 thenbegin
m:=(r+1)/2; mergesort(1,m); mergesort(m+1,r);for i := m downto 1 do b[i] := a[j];for j :=m+1 to r do b[r+m+1-j] := a[j];for k :=1 to r do
if b[i] < b[j] thenbegin a[k] := b[i] ; i := i+1 endelse begin a[k] := b[j]; j:= j-1 end;
end;end;
38
A S O R T I N G E X A M P L E
A S
O R
A O R S
I T
G N
G I N T
A G I N O R S T
E X
A M
A E M X
L P
E L P
A E E L M P X
A A E E G I L M N O P R S T X
Thí d : S p th t m tm ng g m nh ng ký tch
39
Tính ch t 4.1: S p th t b ng ph ng pháp tr n c nkho ng NlgN so sánh s p b t k t p tin N ph n t nào.
i v i gi i thu t mergesort quy, s l n so sánh cmô t b ng h th c truy h i: CN = 2CN/2 + N, v i C1 = 0.
Suy ra:CN N lg NTính ch t 4.2: S p th t b ng ph ng pháp tr n c ndùng ch b nh thêm t l v I N.Ghi chú: Mergesort thì n nh (stable) trong khi
Quicksort thì không n nh.
ph c t p c a gi i thu t Mergesort
40
5. S p th t ngo iS p th t các t p tin l n l u tr trên b nh ph c g i làs p th t ngo i (external sorting).S p th t ngo i r t quan tr ng trong các h qu n tr c sd li u (DBMSs).
Kh i (block) và truy t kh i (Block Access)
H i u hành phân chia b nh ph thành nh ng kh i cókích th c b ng nhau. Kích th c c a kh i thay i tùy theoh i u hành, nh ng th ng kho ng 512 n 4096 byte.
Các tác v c n b n trên các t p tin là
- mang m t kh i ra b m b nh chính (read)
- mang m t kh i t b nh chính v b nh ph (write).
41
S p th t ngo i
Khi c l ng th i gian tính toán c a các gi i thu t mà làmvi c trên các t p tin, chúng ta ph i xét s l n mà chúng ta cm t kh i ra b nh chính hay vi t m t kh i v b nh ph .
M t tác v nh v y c g i là m t truy t kh i (blockaccess) hay m t truy t a (disk access).
kh i = trang (page)
42
X p th t ngo i b ng p.p. tr n (External Sort-merge)
K thu t thông d ng nh t s p th t ngo i là gi i thu ts p th t ngo i b ng ph ng pháp tr n (external sort-mergealgorithm) .
Ph ng pháp s p th t ngo i này g m 2 b c:
- t o các run
- tr n run
M: s trang (page) c a b m trong b nh chính (memory-buffer) .
43
X p th t ngo i b ng p.p. tr n (tt.)
1. Trong b c 1, m t s run có th t c t o ra b ng cách sau:i = 0;repeat
read M blocks of the file, or the rest of the file, whichever issmaller;sort the in-memory part of the file;write the sorted data to the run file Ri;i = i+1;
until the end of the file.
2. Trong b c 2, các run c tr n l i.
44
Tr n runTr ng h p c bi t:
Gi s s run, N, N < M. Ta có th dành 1 trang c a bm cho m i run và dành ch b nh còn l i ch a m t trang
c a k t qu xu t ra. Gi i thu t ph n tr n run nh sau:
read one block of each of the N files Ri into a buffer page inmemory;repeat
choose the first record (in sort order) among all buffer pages;write the tuple to the output, and delete it from the buffer page;if the buffer page of any run Ri is empty and
not end-of-file(Ri) thenread the next block of Ri into the buffer page;
until all buffer pages are empty.
45
Tr n run (tr ng h p t ng quát)
Tác v tr n là s khái quát hóa c a phép tr n hai ng(two-way merge) c dùng b i gi i thu t s p th t n ib ng ph ng pháp tr n. Nó tr n N run, do ó nó c g i làtr n nhi u ng (n-way merge).
Tr ng h p t ng quát:V t ng quát, n u t p tin l n h n s c ch a c a b m
N > M
thì không th dành m t trang trong b m cho m i runtrong b c tr n. Trong tr ng h p này, s tr n ph i tr iqua nhi u chuy n (passes).Vì ch có M-1 trang c a b m dành cho các u vào, str n có th ti p nh n M-1 runs nh là các u vào.
46
Tr n run [tr ng h p t ng quát] (tt.)
Chuy n tr n u tiên làm vi c nh sau: M-1 run u tiên c tr n l i thành m t run cho chuy n kti p. R i thì M-1 runs s c tr n theo cách t ng t và cth cho n khi t t c các run u tiên u c gi i quy t. T i
i m này, t ng s run c gi m i m t th a s M-1.
N u s run ã c gi m i này v n còn M, m t chuy nn a s c th c thi v i các run c t o ra b i chuy n utiên làm u vào.
M i chuy n làm gi m t ng s run m t th a s M – 1. Cácchuy n c l p l i nhi u nh c n thi t cho n khi t ng s runnh h n M; chuy n cu i cùng s t o ra k t qu là m t t p tincó th t .
47
M t thí d c a th t ngo i b ng p.p. tr n
Gi s : i) m t m u tin chi m v a m t kh i
ii) b m chi m 3 trang.
Trong giai o n tr n, hai trang c dùng làm u vàovà m t trang c dùng ch a k t qu .
Giai o n tr n òi h i hai chuy n.
48
a 19d 31 a 19
g 24 g 24 b 14 a 14a 19 c 33 a 19d 31 b 14 d 31 b 14c 33 c 33 e 16 c 33b 14 e 16 g 24 d 7e 16 d 21r 16 d 31 a 14 d 31d 21 m 3 d 7 e 16m 3 r 16 d 21 g 24p 2 m 3 m 3d 7 a 14 p 2 p 2a 14 d 17 r 16 r 16
p 2
T o run tr n pass-1 tr n pass-1
49
ph c t p c a x p th t ngo i
Hãy tính s truy t kh i (block accesses) c a gi i thu t s pth t ngo i b ng ph ng pháp tr n.
br : t ng s kh i c a t p tin.
Trong giai o n t o run, m t kh i c c và ghi, em l im t t ng s 2br, truy t kh i.
T ng s run ban u là br/M.
T ng s chuy n tr n: log M-1(br/M)
Trong m i chuy n tr n, t ng kh i c a t p tin c c m tl n và ghi m t l n.
50
ph c t p c a x p th t ngo i(tt)
T ng s truy t a cho gi i thu t s p th t ngo i b ngph ng pháp tr n là:
2br + 2br logM-1(br/M) = 2br( logM-1 (br/M) +1)
t o run các chuy n tr n
51
6. Tìm ki m tu n t
type node = record key, info: integer end;var a: array [0..maxN] of node;
N: integer;procedure initialize;begin N: = 0 end;function seq_search (v: integer, x: integer): integer;begin
a[N+1].key: = v; /*sentinel */if x<= N then
repeat x: = x + 1 until v = a[x].key;seq_search: = x
end;
Ph ng pháp n gi n nh t tìm ki m là l u tr các m utin trong m t m ng, và tìm ki m m t m u tin, duy t qua toàn b m ng m t cách tu n t .
52
function seq_insert (v: integer): integer;begin
N: = N+1; a[n].key : = v;seq_insert: = N
end;
Note: Tham s x c a vào i phó v i tr ng h p nhi u
m u tin có cùng tr khóa. B ng cách th c hi nt: = seq_search (v, t) b t u v i t = 0, ta có th liên ti p cho tb ng v trí c a m i m u tin có tr khóa là v.
N u s tìm ki m th t b i, sep_search tr v tr N+1.
53
c tính c a tìm ki m tu n t (Ch ng minh)
Tính ch t: Tìm ki m tu n t c n N+1 so sánh i v i m t stìm ki m không thành công và kho ng trung bình N/2 sosánh i v i m t tìm ki m không thành công.
Ch ng minh: Tr ng h p x u nh t
Tr ng h p x u nh t x y ra khi v là ph n t cu i cùng c am ng ho c v không có trong m ng.
Trong c hai tr ng h p, chúng ta có l n l t C(N) = N vàC(N) = N+1.
54
Tr ng h p trung bìnhGi s v có xu t hi n trong m ng và có m t xác xu t uxu t hi n t i m t v trí b t k nào trong m ng. Và m i
tr ng h p x y ra v i cùng xác xu t p = 1/N.Thì
C(N) = 1.(1/N) + 2.(1/N) + …+ N.(1/N)= (1 + 2 + …+ N).(1/N)
= (1+2+…+N)/N = N(N+1)/2.(1/N) = (N+1)/2.
55
Tìm ki m chia ôi (binary search)
function binarysearch(v:integer): integer;var x, 1, r: integer;begin
1: = 1; r: = N;repeat
x: = (1+r) div 2if v < a[x].key then r: = x – 1
else l: = x+1until (v = a[x].key) or (1>r);if v = a[x].key then binarysearch: = xelse binarysearch: = N+1
end;
Ph ng pháp này c áp d ng khi
m ng ã có th t .
56
ph c t p c a gi i thu t tìm ki m chia ôi
H th c truy h i c a gi i thu t này là:
CN CN/2 + 1
Tính ch t: Tìm ki m chia ôi không bao gi òi h inhi u h n lgN + 1 so sánh cho m t s tìm ki m thànhcông hay không thành công.