56
1 Ch ng 2 Phântích ph c t p c a m t s gi i thu t s p th t và tìm ki m

Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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

Page 2: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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

Page 3: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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).

Page 4: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 5: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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 .

Page 6: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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

Page 7: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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;

Page 8: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 9: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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

Page 10: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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;

Page 11: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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)

Page 12: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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 .

Page 13: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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).

Page 14: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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;

Page 15: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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

Page 16: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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

Page 17: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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;

Page 18: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 19: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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).

Page 20: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 21: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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

Page 22: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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

Page 23: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 24: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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

Page 25: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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).

Page 26: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 27: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 28: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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).

Page 29: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 30: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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;

Page 31: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 32: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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

Page 33: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 34: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 35: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 36: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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,

Page 37: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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;

Page 38: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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

Page 39: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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

Page 40: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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).

Page 41: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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)

Page 42: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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) .

Page 43: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 44: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 45: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 46: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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 .

Page 47: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 48: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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

Page 49: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 50: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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

Page 51: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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 .

Page 52: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 53: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 54: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.

Page 55: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/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 .

Page 56: Ch ng 2 - tailieuhoctap123blog.files.wordpress.com · phân ho ch chia t ptin ralàmhai ph n b ng nhau. i u nàylàm cho s l nsosánh c a Quicksortth amãnh th ctruy h i: CN =2CN/2

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.