Giáo trình phân tích giải thuật
Trang 11 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:
I.1 - S c n thi t ph i phân tích gi i thu t.
I.2 - Th i gian th c hi n c a gi i thu t.
I.3 - T su t t ng và ph c t p c a gi i thu t.
I.4 - Cách tính ph c t p.
I.5 - Phân tích các ch ng trình quy.
5 V n nghiên c u c a trang k ti p
Trong ch ng này chúng ta s nghiên c u các v n sau:
· S c n thi t ph i phân tích các gi i thu t
· Th i gian th c hi n c a ch ng trình
· T su t t ng và ph c t p c a gi i thu t
· Tính th i gian th c hi n c a ch ng trình
· Phân tích các ch ng trình quy
I.1- S C N THI T PH I PHÂN TÍCH GI I THU T
Trong khi gi i m t bài toán chúng ta có th có m t s gi i thu t khác nhau, v n là c n ph iánh giá các gi i thu t ó l a ch n m t gi i thu t t t (nh t) Thông th ng thì ta s c n c vào cáctiêu chu n sau:
1.- Gi i thu t úng n
2.- Gi i thu t n gi n
3.- Gi i thu t th c hi n nhanh
V i yêu c u (1), ki m tra tính úng n c a gi i thu t chúng ta có th cài t gi i thu t ó
và cho th c hi n trên máy v i m t s b d li u m u r i l y k t qu thu c so sánh v i k t qu ã
bi t Th c ra thì cách làm này không ch c ch n b i vì có th gi i thu t úng v i t t c các b d li uchúng ta ã th nh ng l i sai v i m t b d li u nào ó V l i cách làm này ch phát hi n ra gi i thu t
Khi chúng ta vi t m t ch ng trình s d ng m t vài l n thì yêu c u (2) là quan tr ng nh t.Chúng ta c n m t gi i thu t d vi t ch ng trình nhanh chóng có c k t q a , th i gian th c hi n
Tuy nhiên khi m t ch ng trình c s d ng nhi u l n thì thì yêu c u ti ït ki m th i gian
Trang 2Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 2
Th i gian th c hi n không ch ph thu c vào gi i thu t mà còn ph thu c váo t p các ch th
ch nh th c hi n t t trên t p c bi t các d li u vào c ch n v t qua các tr ng i này, các
I.2.3- Th i gian th c hi n trong tr ng h p x u nh t.
Nói chung thì th i gian th c hi n ch ng trình không ch ph thu c vào kích th c mà còn
ph thu c vào tính ch t c a d li u vào Ngh a là d li u vào có cùng kích th c nh ng th i gian th c
hi n ch ng trình có th khác nhau Ch ng h n ch ng trình s p x p dãy s nguyên t ng d n, khi tacho vào dãy có th t thì th i gian th c hi n khác v i khi ta cho vào dãy ch a có th t , ho c khi tacho vào m t dãy ã có th t t ng thì th i gian th c hi n c ng khác so v i khi ta cho vào m t dãy ã
Trang 3I.3.2- Khái ni m ph c t p c a gi i thu t
Gi s ta có hai gi i thu t P1 và P2 v i th i gian th c hi n t ng ng là T1(n) = 100n2 (v i t
su t t ng là n2) và T2(n) = 5n3 (v i t su t t ng là n3) Gi i thu t nào s th c hi n nhanh h n? Câu tr
i ph thu c vào kích th c d li u vào V i n < 20 thì P2 s nhanh h n P1 (T2<T1), do h s c a 5n3
Nói cách khác ph c t p tính toán c a gi i thu t là m t hàm ch n trên c a hàm th i gian Vì
ng nhân t c trong hàm ch n trên không có ý ngh a nên ta có th b qua vì v y hàm th hi n ph c
p có các d ng th ng g p sau: log 2 n, n, nlog 2 n, n 2 , n 3 , 2 2 , n!, n n Ba hàm cu i cùng ta g i là d ng
hàm m , các hàm khác g i là hàm a th c M t gi i thu t mà th i gian th c hi n có ph c t p là m thàm a th c thì ch p nh n c t c là có th cài t th c hi n, còn các gi i thu t có ph c t phàm m thì ph i tìm cách c i ti n gi i thu t
Khi nói n ph c t p c a gi i thu t là ta mu n nói n hi u qu c a th i gian th c hi n c a
ch ng trình nên ta có th xem vi c xác nh th i gian th c hiên c a ch ng trình chính là xác nh
Trang 4Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 4
I.4.3- Qui t c t ng quát phân tích m t ch ng trình
I.4.4- ph c t p c a ch ng trình có g i ch ng trình con không qui
Cách tính ph c t p c a m t gi i thu t b t k là m t v n không n gi n Tuy nhiên ta có
th tuân theo m t s nguyên t c sau:
I.4.1- Qui t c c ng:
N u T1(n) và T2(n) là th i gian th c hi n c a hai n ch ng trình P1 và P2; và
T(n)=O(max(f(n),g(n)))
Ví d 1-6: L nh gán x:=15 t n m t h ng th i gian hay O(1)
L nh c d li u READ(x) t n m t h ng th i gian hay O(1)
V y th i gian th c hi n c hai l nh trên n i ti p nhau là O(max(1,1))=O(1)
I.4.2- Qui t c nhân:
N u T1(n) và T2(n) là th i gian th c hi n c a hai n ch ng trình P1và P2 và T1(n) =
O(f(n).g(n))
I.4.3- Qui t c t ng quát phân tích m t ch ng trình:
- Th i gian th c hi n c a m i l nh gán, READ, WRITE là O(1)
- Th i gian th c hi n c a m t chu i tu n t các l nh c xác nh b ng qui t c c ng Nh
y th i gian này là th i gian thi hành m t l nh nào ó lâu nh t trong chu i l nh
- Th i gian th c hi n c u trúc IF là th i gian l n nh t th c hi n l nh sau THEN ho c sau ELSE
và th i gian ki m tra u ki n Th ng th i gian ki m tra u ki n là O(1)
- Th i gian th c hi n vòng l p là t ng (trên t t c các l n l p) th i gian th c hi n thân vòng
p N u th i gian th c hi n than vòng l p không i thì th i gian th c hi n vòng l p là tích c a s l n
p v i th i gian th c hi n thân vòng l p
Ví d 1-7: Tính th i gian th c hi n c a n ch ng trình
procedure Bubble (var a: array[1 n] of integer);
var i,j,temp: integer;
begin
{1} for i:=1 to n-1 do
{2} for j:=n downto i+1 do
{3} if a[j-1]>a[j] then begin
Trang 5C ba l nh i ch {4} {5} {6} t n O(1) th i gian, do ó l nh {3} t n O(1).
Vòng l p {2} th c hi n (n-i) l n, m i l n O(1) do ó vòng l p {2} t n O((n-i).1)=O(n-i)
Vòng l p {1} l p (n-1) l n v y ph c t p c a gi i thu t là:
I.4.4- ph c t p c a ch ng trình có g i ch ng trình con không qui
N u chúng ta có m t ch ng trình v i các ch ng trình con không quy, tính th i gian
th c hi n c a ch ng trình, tr c h t chúng ta tính th i gian th c hi n c a các ch ng trình con không
i các ch ng trình con khác Sau ó chúng ta tính th i gian th c hi n c a các ch ng trình con ch
i các ch ng trình con mà th i gian th c hi n c a chúng ã c tính Chúng ta ti p t c quá trìnhánh giá th i gian th c hi n c a m i ch ng trình con sau khi th i gian th c hi n c a t t c các
Gi s ta cô m t h th ng các ch ng trình g i theo s sau:
Ch ng trình A g i hai ch ng trình con là B và C, ch ng trình B g i hai ch ng trình con là
procedure Swap (var x, y: integer);
var temp: integer;
Trang 6Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 6
procedure Bubble (var a: array[1 n] of integer);
var i,j :integer;
begin
{1} for i:=1 to n-1 do
{2} for j:=n downto i+1 do
{3} if a[j-1]>a[j] then Swap(a[j-1], a[j]);
end;
Trong cách vi t trên, ch ng trình Bubble g i ch ng trình con Swap, do ó tính th i gian
th c hi n c a Bubble, tr c h t ta c n tính th i gian th c hi n c a Swap D th y th i gian th c hi n
a Swap là O(1) vì nó ch bao g m 3 l nh gán
Trong Bubble, l nh {3} g i Swap nên ch t n O(1), l nh {2} th c hi n n-i l n, m i l n t nO(1) nên t n O(n-i) L nh {1} th c hi n n-1 l n nên
I.5.1- Thành l p ph ng trình quy
I.5.2- Gi i ph ng trình quy
V i các ch ng trình có g i các ch ng trình con quy, ta không th áp d ng cách tính nh
a trình bày trong m c I.4.4 b i vì m t ch ng trình quy s g i chính b n thân nó
V i các ch ng trình quy, tr c h t ta c n thành l p các ph ng trình quy, sau ó gi i
Ví d 1-9: Xét hàm tính giai th a vi t b ng gi i thu t quy nh sau:
function Giai_thua(n:integer): integer;
i quy này t n T(n-1), sau khi có k t qu c a vi c g i quy, ch ng trình ph i nhân k t qu ó
i n và gán cho Giai_thua Th i gian th c hi n phép nhân và phép gán là m t h ng C2 V y ta có
Trang 7ây là ph ng trình quy tính th i gian th c hi n c a ch ng trình quy Giai_thua.
Hàm MergeSort nh n m t danh sách có dài n và tr v m t danh sách ã c s p x p Th
c Merge nh n hai danh sách ã c s p L1 và L2 m i danh sách có dài n/2, tr n chúng l i v inhau c m t danh sách g m n ph n t có th t Gi i thu t chi ti t c a Merge ta s bàn sau,
Trang 8Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 8
G i T(n) là th i gian th c hi n MergeSort m t danh sách n ph n t thì T(n/2) là th i gian th c
hi n MergeSort m t danh sách n/2 ph n t , ta có th vi t ph ng trình quy nh sau:
Trong ó c1 là th i gian ph i t n khi L có dài 1 Trong tr ng h p n > 1, th i gian c a
do ó ta có 2T(n/2) Ph n th hai bao g m phép th n >1, chia danh sách L thành hai n a b ng nhau vàMerge Ba thao tác này l y th i gian không i i v i phép th ho c t l v i n i v i ng t và
Merge Nh v y h ng c2 c ch n và c2n là th i gian t ng làm các vi c ó ngo i tr g i quy
Trang 9Gi s chúng ta oán f(n) = anlogn V i n = 1 ta th y r ng cách oán nh v y không c b i
vì anlog n có giá tr 0 không ph thu c vào giá tr c a a Vì th ta th ti p theo f(n) = anlogn + b
Trang 10Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 10
Hay nói cách khác T(n) là O(nlogn)
i gi i t ng quát cho m t l p các ph ng trình quy
gi i bài toán kích th c n, ta chia bài toán ã cho thành a bài toán con, m i bài tóan con cókích th c n/b Gi i các bài toán con này và t ng h p k t qu l i c k t qu c a bài toán ã cho
i các bài toán con chúng ta c ng làm nh v y K thu t này s d n chúng ta n m t ch ng trình quy
Gi thi t r ng m i bài toán con kích th c 1 l y m t n v th i gian và th i gian chia bàitoán kích th c n thành các bài toán con kích th c n/b và t ng h p k t qu t các bài toán con
c l i gi i c a bài toán ban u là d(n) (Ch ng h n i v i thí d MergeSort, chúng ta có a = b = 2,
và d(n) = C2n/C1 Xem C1 là m t n v )
G i T(n) là th i gian gi i bài toán kích th c n thì ta có ph ng trình quy:
Ta s d ng ph ng pháp truy h i gi i ph ng trình này
Gi s n = bk ta c: T(n/bk) = T(1) = 1 Thay vào trên v i i = k ta có:
Hàm ti n tri n, nghi m thu n nh t và nghi m riêng
Trong ph ng trình quy (I.1) hàm th i gian d(n) c g i là hàm ti n tri n (driving
function)
Trong công th c (I.2), ak = nlogba c g i là nghi m thu n nh t (homogeneous solutions).
Nghi m thu n nh t là nghi m chính xác khi d(n) = 0 v i m i n Nói m t cách khác, nghi mthu n nh t bi u di n th i gian gi i t t c các bài toán con
Trang 11Trong công th c (I.2), c g i là nghi m riêng (particular solutions).
Nghi m riêng bi u di n th i gian ph i tr t o ra các bài toán con và t ng h p các k t qu
a chúng Nhìn vào công th c ta th y nghi m riêng ph thu c vào hàm ti n tri n, s l ng và kích
th c các bài toán con
Khi tìm nghi m c a ph ng trình (I,1), chúng ta ph i tìm nghi m riêng và so sánh v i nghi mthu n nh t N u nghi m nào l n h n, ta l y nghi m ó làm nghi m c a ph ng trình (I,1)
Vi c xác nh nghi m riêng không n gi n chút nào, tuy v y, chúng ta c ng tìm c m t l pcác hàm ti n tri n có th d dàng xác nh nghi m riêng
Hàm nhân
M t hàm f(n) c g i là hàm nhân (multiplicative function) n u f(m.n) = f(m).f(n) v i m i
Ví d 1-12: Hàm f(n) = nk là m t hàm nhân, vì f(m.n) = (m.n)k = mk.nk = f(m) f(n)
u d(n) trong (I.1) là m t hàm nhân thì theo tính ch t c a hàm nhân ta có
d(bk-j) = (d(b))k-j và nghi m riêng c a (I.2) là:
Xét ba tr ng h p sau:
1.- N u a > d(b) thì nghi m riêng là O(ak) = O(nlogba) Nh v y nghi m riêng và nghi m thu n
nh t b ng nhau do ó T(n) là O(nlogba)
Ta c ng th y th i gian th c hi n ch ph thu c vào a, b mà không ph thu c vào hàm ti n tri nd(n) Vì v y c i ti n gi i thu t ta c n gi m a ho c t ng b
2.- N u a < d(b) thì nghi m riêng là O(d(b)k) = O(nlogbd(b)) Trong tr ng h p này nghi m riêng
n h n nghi m thu n nh t nên T(n) = O(nlogbd(b))
Trang 12Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 12
Vì a= d(b) nên nghi m riêng là nlogbalogbn và nghi m này l n g p logbn l n nghi m thu n nh t
Do ó T(n) = O(nlogb
a
logbn)
Trong tr ng h p c bi t d(n) = n ta c T(n) = O(n logn)
Chú ý khi gi i m t ph ng trình quy c th , ta ph i xem ph ng trình ó có thu c d ng
ph ng trình t ng quát hay không N u có thì ph i xét xem hàm ti n tri n có ph i là hàm nhân không
Trong m i tr ng h p, a=4, b=2 và nghi m thu n nh t là n2 V i d(n) = n ta có d(b) = 2 vì a =
4 > d(b) nên nghi m riêng c ng là n2 và T(n) = O(n2) trong ph ng trình (1)
Trong ph ng trình (3), d(n) = n3, d(b) = 8 và a < d(b) Vì v y nghi m riêng là O(nlogbd(b)) =O(n3) và T(n) c a (3) là O(n3)
Trong ph ng trình (2) chúng ta có d(b) = 4 = a nên T(n) = O(n2logn)
Các hàm ti n tri n khác
Ta xét hai tr ng h p d i d ng hai ví d , tr ng h p 1 là t ng quát hóa c a hàm b t k là tích
a m t hàm nhân v i m t h ng l n h n ho c b ng 1 Tr ng h p th hai là hàm ti n tri n không ph i
Trang 13T(n) = 2U(n) nên T(n) = O(n1.59) hay T(n) = O(nlog3).
Trang 14Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 14
Bài 3: Gi i các ph ng trình quy sau v i T(1) = 1 và
Trang 15II.1- BÀI TOÁN S P X P
II.1.1 T m quan tr ng c a bài toán s p x p
II.1.2 S p x p trong và s p x p ngoài
II.1.3 T ch c d li u và ngôn ng cài t
II.1.1 T m quan tr ng c a bài toán s p x p
S p x p m t danh sách các i t ng theo m t th t nào là m t bài toán th ng c v n
ng trong các ng d ng tin h c Ví d ta c n s p x p danh sách thí sinh theo tên v i th t Alphabet,
ho c s p x p danh sách sinh viên theo m trung bình v i th t t cao n th p M t ví d khác là
Tóm l i s p x p là m t yêu c u không th thi u trong khi thi t k các ph n m m
II.1.2 S p x p trong và s p x p ngoài
S p x p trong là s s p x p d li u c t ch c trong b nh trong cu máy tính, ó ta có
th s d ng kh n ng truy nh p ng u nhiên c a b nh và do v y s th c hi n r t nhanh
S p x p ngoài là s s p x p c s d ng khi s l ng i t ng c s p x p l n không th
u tr trong b nh trong mà ph i l u tr î trên b nh ngoài C th là ta s s p x p d li u c l u
tr trong các t p tin
Trang 16Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 16
Ch ng này t p trung gi i quy t v n s p x p trong còn s p x p ngoài s c nghiên c u
II.1.3 T ch c d li u và ngôn ng cài t
Các i t ng c n c s p x p là các m u tin g m m t ho c nhi u tr ng M t trong các
tr ng c g i là khóa (key), ki u c a nó là m t ki u có quan h th t (nh các ki u s nguyên, s
th c, chu i ký t )
Danh sách các i t ng c n s p x p s là m t m ng c a các m u tin v a nói trên M c ích
a vi c s p x p là t ch c l i các m u tin sao cho các khóa c a chúng c s p th t t ng ng v iquy lu t s p x p
trình bày các ví d minh h a chúng ta s dùng PASCAL làm ngôn ng th hi n và s d ngkhai báo sau:
Trang 17II.2.1- S p x p ch n (Selection Sort)
Gi i thu t
ây là ph ng pháp s p x p n gi n nh t c ti n hành nh sau:
· u tiên ch n ph n t có khóa nh nh t trong n ph n t t a[1] n a[n] và hoán v nó
i ph n t a[1]
· Ch n ph n t có khóa nh nh t trong n-1ph n t t a[2] n a[n] và hoán v nó v i a[2]
· T ng quát b c th i, ch n ph n t có khoá nh nh t trong n-i+1 ph n t t a[i] na[n] và hoán v nó v i a[i]
Trang 18Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 18
Tr c h t ta có th t c Swap l y m t h ng th i gian nh ã nói m c II.1.3
Các l nh (2), (3) u l y O(1) th i gian Vòng l p for (4) - (7) th c hi n n-i l n, vì j ch y ti+1 n n, m i l n l y O(1), nên l y O(n-i) th i gian Do ó th i gian t ng c ng là:
II.2.2- S p x p xen (Insertion Sort)
Gi i thu t
Tr c h t ta xem ph n t a[1] là m t dãy ã có th t
· B c 1, xen ph n t a[2] vào danh sách ã có th t a[1] sao cho a[1], a[2] là m t danhsách có th t
· B c 2, xen ph n t a[3] vào danh sách ã có th t a[1], a[2] sao cho a[1], a[2], a[3] là
t danh sách có th t
· T ng quát, b c i, xen ph n t a[i+1] vào danh sách ã có th t a[1],a[2], a[i] sao choa[1], a[2], a[i+1] là m t danh sách có th t
· Ph n t ang xét a[j] s c xen vào v trí thích h p trong danh sách các ph n t ã
c s p tr c ó a[1],a[2], a[j-1] b ng cách so sánh khoá c a a[j] v i khoá c a a[j-1] ng ngay
tr c nó N u khoá c a a[j] nh h n khoá c a a[j-1] thì hoán i a[j-1] và a[j] cho nhau và ti p t c sosánh khoá c a a[j-1] (lúc này a[j-1] ch a n i dung c a a[j]) v i khoá c a a[j-2] ng ngay tr c nó
Ví d 2-2: S p x p m ng g m 10 m u tin ã cho trong ví d 2-1.
Trang 19tin nào có khóa “nh ” s c n i lên trên Chúng ta duy t tòan m ng, t d i lên trên N u hai ph n
c nh nhau mà không úng th t t c là n u ph n t “nh h n” l i n m d i thì ph i cho nó “n ilên” b ng cách i ch hai ph n t này cho nhau C th là:
· B c 1: Xét các ph n t t a[n] n a[2], v i m i ph n t a[j], so sánh khoá c a nó v ikhoá c a ph n t a[j-1] ng ngay tr c nó N u khoá c a a[j] nh h n khoá c a a[j-1] thì hoán ia[j] và a[j-1] cho nhau
· B c 2: Xét các ph n t t a[n] n a[3], và làm t ng t nh trên
· T ng quát b c th i, ta s xét các ph n t t a[n] n a[i+1]
Trang 20Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 20
Ví d 2-3: S p x p m ng g m 10 m u tin ã cho trong ví d 2-1.
(2) for j := n downto i+1 do
(3) if a[j].key < a[j-1].key then
II.3.2- Thi t k gi i thu t
II.3.3- Cài t gi i thu t
II.3.4- Th i gian th c hi n c a QuickSort
Trong ph n này chúng ta s nghiên c u m t gi i thu t s p x p c dùng m t cách ph bi n là
c ch n trong các ng d ng s p x p th c t khác nhau
Trang 21II.3.1- Ý t ng
Chúng ta v n xét m ng a các m u tin a[1] a[n] Gi s v là 1 giá tr khóa mà ta g i là ch t(pivot) Ta phân ho ch dãy a[1] a[n] thành hai m ng con "bên trái" và "bên ph i" M ng con "bên trái"bao g m các ph n t có khóa nh h n ch t, m ng con "bên ph i" bao g m các ph n t có khóa l n h n
Ch n khóa l n nh t trong hai ph n t có khóa khác nhau u tiên k t trái qua N u m ng ch
m m t ph n t hay g m nhi u ph n t có khóa b ng nhau thì không có ch t
Quá trình quy s d ng khi không còn tìm th y ch t
Ví d 2-4: Ta c n s p m t m ng mà khóa là các s nguyên ã c trình bày trong ví d 2-1.Hai ph n t u tiên có khóa khác nhau là 5 và 6, ta ch n 6 làm ch t và ti n hành phân ho ch m ng
Trang 22Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 22
II.3.3- Cài t gi i thu t
Hàm FindPivot
Ta thi t k hàm FindPivot xác nh trong dãy a[i] a[j] xem có hay không hai ph n t cókhóa khác nhau N u không tìm th y hai ph n t có khóa khác nhau thì tr v giá tr 0 (không tìm th y
ch t), ng c l i hàm tr v giá tr là ch s c a ph n t có khóa l n h n trong hai ph n t có khóa khác
nhau u tiên Khóa l n h n này s tr thành ph n t ch t mà ta s xác nh trong th t c QuickSort
ti n so sánh ta s d ng bi n FirstKey l u gi khóa c a ph n t u tiên trong m nga[i] a[j] (FirstKey chính là a[i].key)
Ta s dùng m t ch s k dò tìm trong m ng a[i] a[j], k t v trí i+1 n h t m ng, m t ph n a[k] mà a[k].key <> FirstKey N u không tìm th y m t a[k] nh th thì ho c là m ng ch g m m t
ph n t ho c g m nhi u ph n t có khóa b ng nhau Trong tr ng h p ó thì không tìm th y ch t vàhàm FindPivot s tr v 0 Ng c l i ta s ph i xét xem a[k].key có l n h n FirstKey hay không, n uúng nh th thì ch t s là khóa c a a[k] và hàm FindPivot s tr v k, n u không thì hàm FindPivot s
Hàm Partition nh n vào ba tham s i, j và Pivot th c hi n vi c phân ho ch theo m ng
a[i] a[j] theo ch t Pivot và tr v giá tr l là ch s u tiên c a m ng “bên ph i”
Trang 23Hai con nháy L, R s c s d ng th c hi n vi c phân ho ch nh ã trình bày trong ph nII.3.2.
Function Partition(i,j:integer; pivot :KeyType):integer ;
var l,r : integer;
begin
l := i; { t con nháy L ì bên trái}
r := j; { t con nháy R ì bên ph i}
Bây gi chúng ta trình bày th t c cu i cùng có tên là QuickSort và chú ý r ng s p x p
ng A các record g m n ph n t c a ki u Recordtype ta ch c n g i QuickSort(1,n).
Ta s s d ng bi n PivotIndex l u gi k t qu tr v c a hàm FindPivot, n u bi n
ng l u gi giá tr ch t và bi n k l u gi giá tr c a m phân ho ch do hàm Partition tr v Sau khia ã phân ho ch xong ta s g i quy QuickSort cho m ng con “bên trái” a[i] a[k-1] và m ngcon “bên ph i” a[k] a[j]
II.3.4- Th i gian th c hi n c a QuickSort
QuickSort l y O(nlogn) th i gian s p x p n ph n t trong tr ng h p t t nh t và O(n 2 ).
trong tr ng h p x u nh t.
Hàm Partition l y th i gian t l v i s ph n t c a m ng Nh v y n u m ng có n ph n t thì
Partition l y P(n)= n n v th i gian
Trang 24Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 24
G i T(n) là th i gian th c hi n c a QuickSort thì T(n) ph i là t ng c a P(n) và th i gian
Gi s các giá tr khóa c a m ng khác nhau Trong tr ng h p x u nh t là ta luôn ch n ph i
ph n t có khóa l n nh t làm ch t, lúc b y gi vi c phân ho ch b l ch t c là m ng bên ph i ch g m
t ph n t ch t, còn m ng bên trái g m n-1 ph n t còn l i Khi ó ta có th thành l p ph ng trình quy nh sau:
= T(n-i) + (n-i+2) + (n-i+3) + + n + (n+1) = T(n-i) +
Quá trình trên k t thúc khi i=n-1, khi ó ta có
Trong tr ng h p t t nh t khi ta ch n c ch t sao cho hai m ng con có kích th c b ng
Gi i ph ng trình quy này (xem I.4.2) ta c T(n) = O(nlogn)
Ng i ta c ng ch ng minh c r ng trong tr ng h p trung bình QuickSort l y T(n) =O(nlogn)
II.4- HEAPSORT
II.4.1- Heap
II.4.2- Ý t ng
II.4.3- Thi t k và cài t gi i thu t
II.4.4- Phân tích HeapSort
Trang 25II.4.1- Heap
Cây s p th t b ph n hay còn g i là heap là cây nh phân mà giá tr t i m i nút (khác nút lá)
u không l n h n giá tr c a các con c a nó
Ta có nh n xét r ng nút g c a[1] c a cây s p th t b ph n có giá tr nh nh t
Ví d 2-5: Cây sau là m t heap.
II.4.2- Ý t ng
(1) Xem m ng ban u là m t cây nh phân M i nút trên cây l u tr m t ph n t m ng,trong ó a[1] là nút g c và m i nút không là nút lá a[i] có con trái là a[2i] và con ph i là a[2i+1] V icách t ch c này thì cây nh phân thu c s có các nút trong là các nút a[1], ,a[n DIV 2] T t c cácnút trong u có 2 con, ngo i tr nút a[n DIV 2] có th ch có m t con trái (trong tr ng h p n là m t
ch n)
(2) S p x p cây ban u thành m t heap c n c vào giá tr khoá c a các nút
(3) Hoán i a[1] cho cho ph n t cu i cùng
(4) p l i cây sau khi ã b i ph n t cu i cùng nó tr thành m t heap m i
L p l i quá trình (3) và (4) cho t i khi cây r ng ta s c m ng s p theo th t gi m
II.4.3- Thi t k và cài t gi i thu t
Th t c PushDown
Gi s a[first], ,a[last] ã úng v trí (giá tr khoá t i m i nút nh h n ho c b ng giá tr khoá
i các nút con c a nó) ngo i tr a[first] PushDown dùng y ph n t a[first] xu ng úng v trí c a
nó trong cây (và có th gây ra vi c y xu ng các ph n t khác)
Xét a[first], có hai kh n ng có th x y ra:
· N u a[first] có khoá l n h n con trái c a nó (a[first].key > a[2*first].key) và khoá c acon trái không l n h n khoá c a con ph i (a[2*first].key a[2*first+1].key) thì hoán i a[first] chocon trái a[2*first] c a nó, vi c này có th gây ra tình tr ng con trái s không úng v trí nên ph i xemxét l i con trái
Trang 26Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 26
· Ng c l i, n u a[first] có khoá l n h n khoá c a con ph i c a nó (a[first].key >
a[2*first+1].key ) và khoá c a con ph i nh h n khoá c a con trái (a[2*first+1].key < a[2*first].key)thì hoán i a[first] cho con ph i a[2*first+1] c a nó, vi c này có th gây ra tình tr ng con ph i skhông úng v trí nên ph i ti p t c xem xét con ph i
· N u c hai tr ng trên u không x y ra thì a[first] ã úng v trí
· Nh trên ta th y vi c y a[first] xu ng có th gây ra vi c y xu ng m t s ph n tkhác, nên t ng quát là ta s xét vi c y xu ng c a m t ph n t a[r] b t k , b t u t a[first]
procedure PushDown(first,last:integer);
var r:integer;
begin
r:= first; {Xét nút a[first] tr c h t}
while r <= last div 2 do
{Trong khi a[r] còn là nút trong}
if last = 2*r then begin {nút r ch có con trái }
if a[r].key > a[last].key then swap(a[r],a[last]);
· L p l i vi c hoán i a[1] cho a[i], s p x p cây a[1] a[i-1] thành heap, i ch y t n n 2
Trang 27M ng này c xem nh là m t cây nh phân ban u nh sau:
Trong cây trên, giá tr ghi trong các nút là khoá c a các phân t m ng, giá tr ghi bên ngoài cácnút là ch s c a các ph n t m ng
Vi c s p x p cây này thành m t heap s b t u t vi c y xu ng nút a[5] (vì 5 = 10 DIV 2)
Xét nút 5 ta th y a[5] ch có m t con trái và giá tr khóa t ng ng c a nó l n h n con trái c a
nó nên ta i hai nút này cho nhau và do con trái c a a[5] là a[10] là m t nút lá nên vi c y xu ng c aa[5] k t thúc
Trang 28Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 28
Nút 4 và nút 3 ã úng v trí nên không ph i th c hi n s hoán i T i nút 2, giá tr khóa c a
nó l n h n khoá con trái và khoá c a con trái nh h n khoá c a con ph i nên ta hóan i nút 2 cho contrái c a nó (nút 4), sau khi hoán i, ta xét l i nút 4, th y nó v n úng v trí nên k t thúc vi c y
Trang 29Cây này là m t heap t ng ng v i m ng
T heap ã có trên, hoán i a[1] cho a[10] ta có a[10] là nút có khóa nh nh t, c t b nút
Th c hi n vi c y a[1] xu ng úng v trí c a nó trong cây a[1] a[9] ta c cây:
Hoán i a[1] cho a[9] và c t a[9] ra kh i cây Ta c ph n cu i m ng bao g m hai ph n ta[9] a[10] ã c s p Th c hi n vi c y a[1] xu ng úng v trí c a nó trong cây a[1] a[8] ta ccây
Trang 30Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 30
Ti p t c quá trình trên ta s c m t m ng có th t gi m
II.4.4- Phân tích HeapSort
Th i gian th c hi n c a HeapSort là O(n logn)
Trong th t c PushDown m i l n l p, r có ít nh t 2 giá tr , vì r b t u b ng first nên sau i l n
p, chúng ta có r first * 2i Th t c d ng khi r > last/2 do v y khi th t c d ng thì ta có first*2i >last/2 hay 2i+1 > last/first Suy ra i > log(last/first) - 1 t c là s l n l p nhi u nh t c a th t c PushDown
là log(last/first)
Vì first 1 và last n trong m i l n g i PushDown c a th t c HeapSort t i dòng (2) ho c (5)nên s l n l p logn, m i b c l p l y m t th i gian O(1) nên th i gian th c hi n c a PushDown làO(logn)
Trong th t c HeapSort dòng l nh (1)-(2) l p n/2 l n mà m i l n l y O(logn) nên th i gian
th c hi n (1)-(2) là O(n logn) Vòng l p (3)-(4)-(5) l p n-1 l n, m i l n l y O(logn) nên th i gian th c
hi n (3)-(4)-(5) là O(n logn) Tóm l i th i gian th c hi n HeapSort là O(n logn)
II.5- BINSORT
II.5.1- Gi i thu t
II.5.2- Phân tích Bin Sort
II.5.3- S p x p t p giá tr có khoá l n
II.5.1- Gi i thu t
Nói chung các gi i thu t ã trình bày trên u có ph c t p là O(n2) ho c O(nlogn) Tuynhiên khi ki u d li u c a tr ng khoá là m t ki u c bi t , vi c s p x p có th ch chi m O(n) th igian Sau ây ta s xét m t s tr ng h p
Trang 312, 1, 7, 8, 10, 9, 6 và 3
Ta s d ng m ng B có cùng ki u v i A và th c hi n vi c phân ph i a[1] vào b[4] vì a[1].key =
4, a[2] vào b[5] vì a[2].key = 5, a[3] vào b[2] vì a[3].key = 2,
th c hi n vi c phân ph i này ta ch c n m t l nh l p:
for i:=1 to n do B[A[i].key] := A[i]
ây c ng là l nh chính trong ch ng trình s p x p L nh này l y O(n) th i gian
Các ph n t b[j] c g i là các bin và ph ng pháp s p x p này c g i là bin sort
Tr ng h p t ng quát: Là tr ng h p có th có nhi u ph n t có chung m t giá tr khóa,
ch ng h n s p m t m ng A có n ph n t mà các giá tr khóa c a chúng là các s nguyên l y giá tr
bin c vì n u có hai ph n t c a m ng A có cùng m t khoá thì không th l u tr trong cùng m t bin
gi i quy t s ng này ta chu n b m t c u trúc có m bin, m i bin có th l u tr nhi u
n m t ph n t C th là bin th j s l u các ph n t có khóa là j (1 j m) sau ó ta s n i các bin
Cách t t nh t là ta thi t k m i bin là m t danh sách liên k t c a các ph n t mà m i ph n t
có ki u RecordType Ta s g i ki u c a danh sách này là ListType
Ta có th t o ki u ListType b ng cách ghép RecordType v i m t con tr tr t i ph n t k
ti p
L y B là m t m ng ki u Array[KeyType] of ListType Nh v y B là m ng các bin, m i bin là
t danh sách B c ánh ch s b i KeyType, nh th có ít nh t m t bin cho m i giá tr khoá
Ta v n s phân ph i ph n t a[i] vào bin b[j] n u j = a[i]key D nhiên m i bin b[j] có th ch a
Sau khi t t c các ph n t c a m ng A ã c phân ph i vào trong các bin, công vi c cu icùng là ta ph i n i các bin l i v i nhau, ta s c m t danh sách có th t Ta s dùng th t c
concatenate(L1,L2) n i hai danh sách L1, L2 Nó thay th danh sách L1 b i danh sách n i L1L2 Vi c
i s c th c hi n b ng cách g n con tr c a ph n t cu i cùng c a L1 vào u c a L2 Ta bi t r ng
n c ph n t cu i cùng c a danh sách liên k t L1 ta ph i duy t qua t t c các ph n t c a nó cho có hi u qu , ta thêm m t con tr n a, tr n ph n t cu i cùng c a m i danh sách, u nàygiúp ta i th ng t i ph n t cu i cùng mà không ph i duy t qua toàn b danh sách
Trang 32Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 32
Hình 2-13 minh h a vi c n i hai danh sách
Sau khi n i thì header và end c a danh sách L2 không còn tác d ng n a
Ví d 2-8: S p x p m ng A g m 10 ph n t có khoá là các s nguyên có giá tr là các s 2, 4,
1, 5, 4, 2, 1, 4, 1, 5
Ta th y các giá tr khoá n m trong kho ng 1 5 Ta t ch c m t m ng B g m 5 ph n t , m i
ph n t là m t con tr , tr n m t danh sách liên k t
Ch ng trình s d ng c u trúc danh sách liên k t làm các bin
VAR
A: array[1 n] of RecordType;
Trang 33II.5.2- Phân tích Bin Sort
Bin sort l y O(n) th i gian s p x p m ng g m n ph n t
Tr c h t th t c INSERT c n m t th i gian O(1) xen m t ph n t vào trong danh sách Docách t ch c danh sách có gi con tr n ph n t cu i cùng nên vi c n i hai danh sách b ng th t cCONCATENATE c ng ch m t O(1) th i gian Ta th y vòng l p {1} th c hi n n l n, m i l n t n O(1)
= 1 nên l y O(n) n v th i gian Vòng l p {2} th c hi n m-1 l n, m i l n O(1) nên t n O(m) n v
th i gian Hai l nh {1} và {2} n i ti p nhau nên th i gian th c hi n c a BinSort là T(n) = O(max(n,m))
= O(n) vì m n
II.5.3- S p x p t p giá tr có khoá l n
N u m s các khoá không l n h n n s các ph n t c n s p x p, khi ó O(max(n,m)) th c s làO(n) N u gi s m = n2 khi ó O(max(n, n2)) là O(n2) nh v y Bin sort l y O(n2) th i gian
Tuy nhiên ta v n có th t ng quát hoá k thu t bin sort nó v n l y O(n) th i gian
Gi s ta c n s p x p n ph n t có các giá tr khoá thu c 0 n2-1
Ta s s d ng n bin B[0], B[1], B[n-1] và ti n hành vi c s p x p trong hai k
K 1: Phân ph i ph n t a[i] vào bin B[j] mà j = a[i].key MOD n
K 2: Phân ph i các phân t trong danh sách k t qu c a k 1 vào các bin Ph n t a[i] s cphân ph i vào bin B[j] mà j = a[i].key DIV n
Chú ý r ng trong c hai k , ta xen các ph n t m i c phân ph i vào cu i danh sách
Ví d 2-9: C n s p x p m ng g m 10 ph n t có khoá là các s nguyên: 36, 9, 0, 25, 1, 49, 64,
16, 81 và 4
Ta s d ng 10 bin c ánh s t 0 n 9 K m t ta phân ph i ph n t a[i] vào bin có ch sa[i].key MOD 10 N i các bin l i v i nhau ta c danh sách có khóa là: 0 1 81 64 4 25 36 16 9 49 Khai s d ng k t qu c a k 1 s p ti p Phân ph i ph n t a[i] vào bin có ch s a[i].key DIV 10 N icác bin l i v i nhau ta c danh sách có th t
1 K 2
Trang 34Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 34
th y tính úng n c a gi i thu t ta xem các các giá tr khóa nguyên t 0 n n2-1 nh các
có hai ch s trong h m c s n Xét hai s k = sn + t và l = un + v trong ó s, t, u, v là các s
0 n-1 Gi s k < l, ta c n ch ng minh r ng sau 2 k s p thì k ph i ng tr c l
Vì k < l nên s u N u s < u thì k ng tr c l trong danh sách k t q a vì k c s p vào binb[s] và l c s p vào bin b[u] mà b[s] ng tr c b[u] N u s=u thì t<v Sau k 1 thì k ng tr c l, vì
k c s p vào trong bin b[t] và l trong bin b[v] n k 2 m c dù c k và l u c s p vào trong bin
Chú ý ch ng minh trên ta th y s p các ph n t có khóa là các s nguyên (h m c s10) t 0 n 99 ta dùng 10 bin có ch s t 0 n 9 s p các ph n t có khóa là các s nguyên t 0
Trang 35khóa nh nh t và m t ph n t có khóa l n nh t trong a[i] a[n-i+1] và hóan i ph n t nh nh tcho a[i] và ph n t l n nh t cho a[n-i+1] Hãy vi t th t c s p x p ch n theo gi i thu t này và tính
th i gian th c hi n
Bài 3: Vi t th t c s p x p tr n (xem gi i thu t thô trong ch ng 1)
Bài 4: Có m t bi n th c a QuickSort nh sau: Ch n ch t là khóa c a ph n t nh nh ttrong hai ph n t có khóa khác nhau u tiên M ng con bên trái g m các ph n t có khóa nh h n
ho c b ng ch t, m ng con bên ph i g m các ph n t có khóa l n h n ch t Hãy vi t l i các th t c
n thi t cho bi n th này
vi t l i các th t c c n thi t cho bi n th này
Bài 6: Hãy vi t l i th t c PushDown trong HeapSort có th s p x p theo th t t ng
Trang 36Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 36
III.3 - K thu t "tham n"
III.4 - K thu t quay lui
III.5 - K thu t tìm ki m a ph ng
5 V n nghiên c u c a trang k ti p
Nói chung khi thi t k m t gi i thu t chúng ta th ng d a vào m t s k thu t nào ó Ch ng
ng các bài toán, trong ó có nh ng bài toán n i ti ng nh bài toán tìm ng i ng n nh t c a ng igiao hàng, bài toán cây ph t i ti u
III.1- GI I THU T CHIA TR
III.1.1- N i dung k thu t
III.1.2- Nhìn nh n l i gi i thu t MergeSort và QuickSort
III.1.3- Bài toán nhân các s nguyên l n
III.1.4- X p l ch thi u th thao
III.1.5- Bài toán con cân b ng
III.1.1- N i dung k thu t
Có th nói r ng k thu t quan tr ng nh t, c áp d ng r ng rãi nh t thi t k các gi i thu t
có hi u qu là k thu t "chia tr " (divide and conquer) N i dung c a nó là: gi i m t bài toánkích th c n, ta chia bài toán ã cho thành m t s bài toán con có kích th óc nh h n Gi i các bàitoán con này r i t ng h p k t qu l i c l i gi i c a bài toán ban u i v i các bài toán con,chúng ta l i s d ng k thu t chia tr có c các bài toán kích th c nh h n n a Quá trình trên
d n n nh ng bài toán mà l i gi i chúng là hi n nhiên ho c dàng th c hi n, ta g i các bài toán
này là bài toán c s
Tóm l i k thu t chia tr bao g m hai quá trình: Phân tích bài toán ã cho thành các bài
t s bài toán, thì quá trình phân tích ã ch a ng vi c t ng h p k t qu do ó n u chúng ta ã gi ixong các bài toán c s thì bài toán ban u c ng ã c gi i quy t Ng c l i có nh ng bài toán màquá trình phân tích thì n gi n nh ng vi c t ng h p k t qu l i r t khó kh n Trong các ph n ti p sau
thu t này s cho chúng ta m t gi i thu t quy mà vi c xác nh ph c t p c a nó s
Trang 37III.1.2 Nhìn nh n l i gi i thu t MergeSort và QuickSort
QuickSort trong ch ng II) th c ch t là ã s d ng k thu t chia tr
i MergeSort, s p m t danh sách L g m n ph n t , chúng ta chia L thành hai danh sáchcon L1 và L2 m i danh sách có n/2 ph n t S p x p L1, L2 và tr n hai danh sách ã c s p này
c m t danh sách có th t Quá trình phân tích ây là quá trình chia ôi m t danh sách, quá trìnhnày s d n n bài toán s p x p m t danh sách có daì b ng 1, ây chính là bài toán c s vì vi c s p
p danh sách này là “không làm gì c ” Vi c t ng h p các k t qu ây là “tr ün 2 danh sách ã
i QuickSort, s p x p m t danh sách g m n ph n t , ta tìm m t giá tr ch t và phân ho chdanh sách ã cho thành hai danh sách con “bên trái” và “bên ph i “ S p x p “bên trái” và “bên ph i”thì ta c danh sách có th t Quá trình phân chia s d n n các bài toán s p x p m t danh sách ch
m m t ph n t ho c g m nhi u ph n t có khoá b ng nhau, ó chính là các bài toán c s , vì b nthân chúng ã có th t r i ây chúng ta c ng không có vi c t ng h p k t qu m t cách t ngminh, vì vi c ó ã c th c hi n trong quá trình phân ho ch
III.1.3- Bài toán nhân các s nguyên l n
Xét bài toán nhân hai s nguyên n ch s X và Y Theo gi i thu t nhân hai s thông th ng thì
n n2 phép nhân và n phép c ng nên t n O(n2) th i gian Áp d ng k thu t "chia tr " vào phép nhâncác s nguyên, ta chia m i s nguyên X và Y thành các s nguyên có n/2 ch s n gi n ta gi s
Tích c a X và Y có th c vi t thành: XY = AC10n+(AD + BC)10n/2 + BD (III.1)
i m i s có n/2 ch s , chúng ta l i ti p t c phân tích theo cách trên, quá trình phân tích s
n n bài toán c s là nhân các s nguyên ch g m m t ch s mà ta d dàng th c hi n Vi c t ng
p k t qu chính là th c hi n các phép toán theo công th c (III.1)
Theo (III.1) thì chúng ta ph i th c hi n 4 phép nhân các s nguyên n/2 ch s (AC, AD, BC,BD), sau ó t ng h p k t qu b ng 3 phép c ng các s nguyên n ch s và 2 phép nhân v i 10n và
10n/2
Các phép c ng các s nguyên n ch s d nhiên ch c n O(n) Phép nhân v i 10n có th th c
hi n m t cách n gi n b ng cách thêm vào n ch s 0 và do ó c ng ch l y O(n) G i T(n) là th igian nhân hai s nguyên, m i s có n ch s thì t (III.1) ta có:
T(1) = 1
T(n) = 4T(n/2) + cn (III.2)
Trang 38Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 38
Gi i (III.1) ta c T(n) = O(n2) Nh v y thì ch ng c i ti n c chút nào so v i gi i thu tnhân hai s bình th ng c i thi n tình hình, chúng ta có th vi t l i (III.1) thành d ng:
Công th c (III.3) ch òi h i 3 phép nhân c a các s nguyên n/2 ch s là: AC, BD và B)(D-C), 6 phép c ng tr và 2 phép nhân v i 10n Các phép toán này u l y O(n) th i gian T (III.3)
Gi i thu t thô nhân hai s nguyên (d ng ho c âm) n ch s là:
function Mult(x,y:integer; n:integer) : integer;
III.1.4- X p l ch thi u th thao
K thu t chia tr không nh ng ch có ng d ng trong thi t k gi i thu t mà còn trong nhi u
nh v c khác c a cu c s ng Ch ng h n xét vi c x p l ch thi u th thao theo th th c u vòng tròn 1
t cho n c u th M i c u th ph i u v i các c u th khác, và m i c u th ch u nhi u nh t m t
tr n m i ngày Yêu c u là x p m t l ch thi u sao cho s ngày thi u là ít nh t Ta d dàng th y r ng
ng s tr n u c a toàn gi i là n(n-1)/2 Nh v y n u n là m t s ch n thì ta có th s p n/2 c p thi utrong m t ngày và do ó c n ít nh t n-1 ngày Ng c l i n u n là m t s l thì n-1 là m t s ch n nên ta
có th s p (n-1)/2 c p thi u trong m t ngày và do ó ta c n n ngày Gi s n = 2k thì n là m t s ch n
Trang 39và do ó c n t i thi u n-1 ngày.
L ch thi u là m t b ng n dòng và n-1 c t Các dòng c ánh s t 1 n n và các c t cánh s t 1 n n-1, trong ó dòng i bi u di n cho c u th i, c t j bi u di n cho ngày thi u j và ô(i,j)ghi c u th ph i thi u v i c u th i trong ngày j
Chi n l c chia tr xây d ng l ch thi u nh sau: s p l ch cho n c u th , ta s s p l chcho n/2 c u th , s p l ch cho n/2 c u th , ta s s p l ch cho n/4 c u th Quá trình này s d n nbài toán c s là s p l ch thi u cho 2 c u th Hai c u th này s thi u m t tr n trong m t ngày, l chthi u cho h th t d s p Khó kh n chính là ch t các l ch thi u cho hai c u th , ta t ng h p l i
c l ch thi u c a 4 c u th , 8 c u th ,
Xu t phát t l ch thi u cho hai c u th ta có th xây d ng l ch thi u cho 4 c u th nh sau:
ch thi u cho 4 c u th s là m t b ng 4 dòng, 3 c t L ch thi u cho 2 c u th 1 và 2 trong ngày
th 1 chính là l ch thi u c a hai c u th (bài toán c s ) Nh v y ta có Ô(1,1) = “2” và Ô(2,1) = “1”
ng t ta có l ch thi u cho 2 c u th 3 và 4 trong ngày th 1 Ngh a là Ô(3,1) =”4” và Ô(4,1) =
“3” (Ta c th th y r ng Ô(3,1) = Ô(1,1) + 2 và Ô(4,1) = Ô(2,1) + 2 ) Bây gi hoàn thành l ch thi
u cho 4 c u th , ta l y góc trên bên trái c a b ng l p vào cho góc d i bên ph i và l y góc d i bêntrái l p cho góc trên bên ph i
L ch thi u cho 8 c u th là m t b ng g m 8 dòng, 7 c t Góc trên bên trái chính là l ch thi utrong 3 ngày u c a 4 c u th t 1 n 4 Các ô c a góc d i bên trái s b ng các ô t ng ng c a góctrên bên trái c ng v i 4 ây chính là l ch thi u cho 4 c u th 5, 6, 7 và 8 trong 3 ngày u Bây gichúng ta hoàn thành vi c s p l ch b ng cách l p y góc d i bên ph i b i góc trên bên trái và góc trênbên ph i b i góc d i bên trái
III.1.5- Bài toán con cân b ng (Balancing Subproblems)
i v i k thu t chia tr , nói chung s t t h n n u ta chia bài toán c n gi i thành các bài toáncon có kích th c g n b ng nhau Ví d , s p x p tr n (MergeSort) phân chia bài toán thành hai bàitoán con có cùng kích th c n/2 và do ó th i gian c a nó ch là O(nlogn) Ng c l i trong tr ng h p
u nh t c a QuickSort, khi m ng b phân ho ch l ch thì th i gian th c hi n là O(n2)
Nguyên t c chung là chúng ta tìm cách chia bài toán thành các bài toán con có kích th c x p x b ngnhau thì hi u su t s cao h n
Trang 40Giáo trình môn Phân tích Gi i Thu t – I C C N TH Trang 40
III.2.1- N i dung k thu t
III.2.2- Bài toán tính s t h p
III.2.1- N i dung k thu t
Nh trong III.1 chúng ta ã nói, k thu t chia tr th ng d n chúng ta t i m t gi i thu t quy Trong các gi i thu t ó, có th có m t s gi i thu t th i gian m Tuy nhiên, th ng ch có m t s
a th c các bài toán con, u ó có ngh a là chúïng ta ã ph i gi i m t s bài toán con nào ó trongnhi u l n tránh vi c gi i d th a m t s bài toán con, chúng ta t o ra m t b ng l u t t c k t qu
a các bài toán con và khi c n chúng ta ch c n tham kh o t i k t qu ã c l u trong b ng mà
không c n ph i gi i l i bài toán ó L p y b ng k t qu các bài toán con theo m t quy lu t nào ó
III.2.2- Bài toán tính s t h p
M t bài toán khá quen thu c v i chúng ta là tính s t h p ch p k c a n theo công th c:
Ckn = 1 n u k=0 ho c k = n
Ckn = Ck-1n-1 + Ckn-1 n u 0 < k < n
Công th c trên ã g i ý cho chúng ta m t gi i thu t quy nh sau:
function Comb(n,k : integer) : Integer;
Gi i ph ng trình này ta c T(n) = O(2n), nh v y là m t gi i thu t th i gian m , trong khi
ch có m t a th c các bài toán con u ó ch ng t r ng có nh ng bài toán con c gi i nhi u l n
Ch ng h n tính Comb(4,2) ta ph i tính Comb(3,1) và Comb(3,2) tính Comb(3,1) ta ph i
tính Comb(4,2) ta ph i tính Comb(2,1) hai l n Hình 3-2 sau minh ho rõ u ó