Bài Giảng điện tử Phân tích và thiết kế giải thuật. Tiến sĩ Dương Tuấn Anh. Chương 2: Phân tích độ phức tạp của một số giải thuật sắp thứ tự và tìm kiếm. Xét những phương pháp sắp thứ tự một tập tin gồm các mẫu tin có chứa khoá. Khoá mà lại 1 phần của mẫu tin, được dùng để điều khiển việc sắp thứ tự.
Trang 1Ch ng 2
Trang 3Nguy 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#c
m u tin (record) c% ch a kh%a (key) Kh%a m' l' m t ph n
c 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 a
ch-ng c% th t theo m t qui lu t th t n'o %
Trang 4c)ng tr kh%a trong t p tin.
Trang 6S p th t b ng ph ng ph p ch n
3 t ng:
Tr c ti+n t m ph n t nh nh t trong m ng v ho#n in% v i ph n t ang v tr th nh t trong m ng ' r it/m ph n t nh th nh/ trong m ng v' ho#n i n% v i
ph n t ang v tr th nh/ trong m v' c th cho
Trang 7min :=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;
Trang 10v:=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;
Trang 11Nh ng l v gi i thu t insertion sort
Ch-ng ta d)ng m t tr kh%a 5c m canh8 (sentinel) t i
a[0], l'm cho n% nh h n ph n t nh nh t trong m ng
2 V1ng l p ngo'i c a gi i thu t c th c thi N-1 l n
3 Trung b/nh c% kho ng ch ng (i-1)/2 so s#nh c th c
thi trong v1ng 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)
Trang 132 Gi i thu t Quick sort
i thu t c n b n c a Quick sort c ph#t minh n m
Trang 15ii) t t c nh ng ph n t trong nh%m a[left], , a[i-1] th/ nh
h 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:
Trang 16Th# d v ph n ho ch
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)
Trang 17repeat 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 partitioning quicksort2(left,k-1);
quicksort2(k+1,right) end;
end;
Trang 18Ph 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 n
ph0n 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 m6n h
th 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 tin
v' N l' chi ph c a vi c x t t ng ph n t khi ph0n ho ch l nu
T ch ng 1, vi c gi i h th c truy h i n'y 6 a n l i
gi i:
CN N lgN
Trang 19Nh 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)
Trang 22Chia 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)
.
Trang 24Kh quy gi i thu t Quicksort
if (i left) > (right i) then
begin push(left); push(i-1); left := i+1 end
else begin push (i+1);push(right); right:=i-1
end;
end else begin right := pop; left := pop end;
until stackempty;
end;
D)ng ng n x p (stack) ta c% th chuy n Quicksort th'nh m t
gi i thu t kh9ng quy
Trang 253 S p th t d a v%o c s
Trong nhi u ng d n #c tr kh%a c% th l' nh ng kh%a
thu 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)
Trang 26Cho m t kh a c di n t d i d ng m t s nh ph0
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 ng9n ng m#y, c#c bit c tr.ch t s nh ph0n nh
c#c t#c v nh 5and8 v' 5shift8 tr+n c#c bit
Th d : Ta c% th tr.ch hai bit u c a m t s 10 bit b ng
c#ch d)ng t#c v 5shift right8(d ch sang ph i) 8 bit r i th c
hi n t#c v 5and8 t ng bit v i m t n 0000000011
Trong ng9n ng Pascal, nh ng t#c v tr+n c% th c gi
l p b ng hai t#c v div v' mod
Trang 27Trong gi i thu t s p th t d a v'o c s gi s 6 t n t i
h'm bit 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
Trang 28Gi 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
3 t ng: K t qu c a s so s#nh gi a hai tr kh%a ch t)y
thu 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)
Trang 29S 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 ng
nh thao t#c ph0n ho ch trong Quicksort
duy t t tr#i sang ph i t/m tr kh%a m' b t u b ng
bit 1,
duy t t ph i sang tr#i t/m tr kh%a m' b t u b ng
bit 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 giao
nhau
Trang 30procedure ix_exchange(1, r, b : integer);
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;
Trang 31S p th t ho n v c s tt
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 ph0n bit)
Trang 33CN = 2CN/2 + N.
Trong gi i thu t s p th t ho#n v c s , s ph0n ho ch
th ng d ph m vi trung t0m h n l' trong in Quicksort
Trang 34th ng xuy+n c th+m v'o t p tin l n.
Nh%m c#c ph n t c nh v'o u9i c a t p tin l n v' 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.
Trang 35Ghi ch-: Gi i thu t d)ng a[M+1] v' b[N+1] l'm ph n
t 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 6 c n th/ v1ng l p s
a ph n c1n l i c a m ng c1n l i v'o m ng c
Trang 36S 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 x0y
d 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 n
b ng nhau, s p th t hai o n n'y m t c#ch quy v' r i
tr 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,
Trang 37end;
Trang 39T.nh ch t 1: S p th t b ng ph ng ph p tr n c n
kho 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 c m9 t b ng h th c truy h i: CN = 2CN/2 + N, v i C1 = 0 Suy ra:
Trang 405 S p th t ngo i
S 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 s
Trang 42X p th t ngo i b ng p.p tr n External Sor merg
K thu t th9ng d ng nh t s p th t ngo i l gi i thu t
s p th t ngo i b ng ph ng ph#p tr n (external sort-mergealgorithm)
Trang 43(memory-X p th t ngo i b ng p.p tr n
1 Trong b c 1, m t s run c th t c t o ra b ng c#ch sau:
i = 0;
repeat
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 run c tr n l i
Trang 44Tr n run
Tr ng h p c bi t:
s s r < M Ta c th d nh 1 trang c a b
m cho m i run v d nh ch b nh c1n 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:
ead one block of each of the N files Ri into a buffer page in
memory;
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) then
read the next block of Ri into the buffer page;
until all buffer pages are empty
Trang 45Tr n run ng h p t ng qu
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 i
th/ kh9ng th d'nh m t trang trong b m cho m i run
trong b c tr n Trong tr ng h p n'y, s tr n ph i tr i
qua nhi u chuy n (passes)
V/ ch c% M-1 trang c a b m d'nh cho c#c u v'o, s
tr n c% th ti p nh n M-1 runs nh l' c#c u v'o
Trang 46Tr 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 k
ti p R i th M-1 runs s c tr n theo c#ch t ng t v' c
th 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 6 c gi m i n'y v n c1n M, m t chuy n
n 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#c
chuy n c l p l i nhi u nh c n thi t cho n khi t ng s run
nh h n M; chuy n cu i c)ng s t o ra k t qu l' m t t p tinc% th t
Trang 47M t th# d c a th t ngo i b ng p.p tr n
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'o v' m t trang c d)ng ch a k t qu
Giai o n tr n 1i h i hai chuy n.
Trang 516 T'm ki m tu n t
type node = record key, info: integer end;
var a: array [0 maxN] of node;
Trang 52unction seq_insert (v: integer): integer;
Trang 55T'm ki m chia i binary searc
function binarysearch(v:integer): integer;var x, 1, r: integer;
begin1: = 1; r: = N;
repeatx: = (1+r) div 2
if v < a[x].key then r: = x 1else l: = x+1