1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình phân tích giải thuật

83 625 3
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Giáo Trình Phân Tích Giải Thuật
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Phân Tích Giải Thuật
Thể loại Giáo Trình
Năm xuất bản 2005
Thành phố Thành Phố Hồ Chí Minh
Định dạng
Số trang 83
Dung lượng 3,39 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Giáo trình phân tích giải thuật

Trang 1

1 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 2

Giá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 3

I.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 4

Giá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 5

C 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 6

Giá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 8

Giá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 9

Gi 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 10

Giá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 11

Trong 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 12

Giá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 13

T(n) = 2U(n) nên T(n) = O(n1.59) hay T(n) = O(nlog3).

Trang 14

Giá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 15

II.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 16

Giá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 17

II.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 18

Giá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 19

tin 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 20

Giá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 21

II.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 22

Giá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 23

Hai 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 24

Giá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 25

II.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 26

Giá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 27

M 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 28

Giá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 29

Câ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 30

Giá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 31

2, 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 32

Giá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 33

II.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 34

Giá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 35

khó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 36

Giá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 37

III.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 38

Giá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 39

và 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 40

Giá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 ó

Ngày đăng: 16/08/2012, 13:43

HÌNH ẢNH LIÊN QUAN

Hình 2-1: S p x p ch n - Giáo trình phân tích giải thuật
Hình 2 1: S p x p ch n (Trang 17)
Hình 2-2: S p x p xen - Giáo trình phân tích giải thuật
Hình 2 2: S p x p xen (Trang 19)
Hình 2-13: S p x p theo hai k - Giáo trình phân tích giải thuật
Hình 2 13: S p x p theo hai k (Trang 34)

TỪ KHÓA LIÊN QUAN

w