Ch

ng 7

ươ

PH

ƯƠ

NG PHÁP THI T K Ế THU T TOÁN – THAM LAM –

1

N i dung

u đi m và khuy t đi m

ế

§ Gi i thi u ệ ớ § Ph ng pháp ươ § S đ cài đ t ặ ơ ồ § Các ví dụ § Ư ể

2

Hình nhả

5

2

1

3

4

3

Gi

i thi u

ậ ằ

ệ ệ

§ Đ nh nghĩa [Tham lam – Greedy]: Tham lam là ị t k thu t toán đ tìm m t ph ng pháp thi ế ế ươ ộ i u b ng cách xây d ng nghi m c a bài toán t ự ố ư ủ nghi m d n d n t ng b ướ ầ ừ ầ • Chúng ta luôn luôn ch n giá tr t ọ

c: ỗ ướ i th i t nh t t ấ ạ ờ i ng lai (t ố

c. T i m i b ạ ị ố đi m đó mà không quan tâm đ n t ế ươ ư

ể u c c b ) ộ ụ

ọ i u c c b ộ ụ

• Chúng ta hy v ng vi c ch n các t ệ ọ c s cho t ẽ

4

i m i b ố ư i u toàn c c ụ ỗ ướ ố ư t ạ

Ph

ng pháp

ươ

s bài toán yêu c u

ả ử

§ Phát bi u bài toán: Gi

tìm ph • xi đ

ể ươ ượ

ừ ậ

ầ ng án X=(x1, x2, …, xn), trong đó c ch n ra t ọ f(X) là hàm đánh giá s t ươ án X (f là hàm m c tiêu hay hàm chi phí)

ng t p Di. ự ố t nh t c a ph ấ ủ

5

Ph

ng pháp

ươ

§ Ph

ng pháp Tham lam ươ

c (k-1) thành ph n c a

ta m r ng nghi m thành (x1, x2, …, xk-1,

ở ộ

t nh t trong t p

ươ • Ph c a bài toán: ủ – Ban đ u X=( ) ầ s đã xây d ng đ – Gi ượ ả ử nghi m (x1, x2, …, xk-1) ệ – Bây gi ệ ằ

ị ố

xk) b ng cách ch n xk là giá tr t Dk

6

ng pháp Tham lam xây d ng d n nghi m X ự ệ ầ

Ph

ng pháp

ươ

ươ

§ Ph

• Thông th

ườ ượ ắ

– B c 1 [S p x p]: S p x p d li u D tăng d n

ng pháp Tham lam c s p theo m t tr t t ng t p D đ ộ ậ ự ậ tăng d n hay gi m d n theo tiêu chí nào đó t ừ ầ ả đó giúp vi c ch n giá tr t t nh t cho xi s d ẽ ễ ọ dàng h nơ ướ

ế

ế

ữ ệ hay gi m d n theo tiêu chí nào đó

ấ ấ

t nh t]: V i m i thành t nh t trong d li u đã c 1 và th a đi u ki n

ỗ ữ ệ ề

ắ ầ – B c 2 [Ch n giá tr t ướ ị ố ọ ph n xi. Ta tìm giá tr t ị ố ầ c s p x p trong b đ ướ ế ượ c a bài toán đ gán cho xi ủ

7

ị ố ệ ấ

S đ cài đ t ặ

ơ ồ

§ S đ 1: ơ ồ

void Greedy1() {

X=(); for (i=1; i<=n; i++) {

ị Xác đ nh Di; xi = SelectBest(Di); }

}

8

S đ cài đ t ặ

ơ ồ

§ S đ 2: ơ ồ

void Greedy2() {

Sort(D); for (i=1; i<=n; i++) {

ị ố - Ch n v là giá tr t t nh t trong D và

ấ th a đi u ki n bài toán

- xi = v; - B v kh i D

}

}

9

Chú ý

ng pháp

§ M t ý t ộ

ng “trông r ng”:

ng đ i ngh ch v i ph ươ ị ộ

ố ưở “tham lam” là ý t ưở • Gom nh thành to ỏ • Năng nh t ch t b ặ ị ặ

10

Chú ý

i bài toán b ng ph

ng pháp tham lam,

ươ

§ Đ gi ể ả

chúng ta c n:ầ • Xác đ nh các t p giá tr Di ậ ị • Hàm m c tiêu f • Hàm ch n SelectBest đ ch n giá tr cho xi

11

ụ ọ ể ọ ị

Các ví d : {1} Bài toán thu nh c ạ

ượ

c các bài hát v i ớ ng là T. Có N bài hát, bài th i có

ờ ượ ng là hi khi l u trên đĩa (i=1, 2, …, N)

§ Ví d 1 [Bài toán thu nh c] ạ M t băng đĩa có th thu đ t ng th i l ổ th i l ờ ượ

ư

ầ ỗ

§ Yêu c u: Hãy ch n m t cách thu các bài hát sao ộ cho m i bài ch thu m t l n và t ng s bài thu ộ ầ đ ề

c trên băng là nhi u nh t ấ

ượ

12

Các ví d : {1} Bài toán thu nh c ạ

i gi

i c a bài toán là 1 vector đ dài k:

ả ủ

§ Bi u di n l ễ ờ ể

X=(x1, x2, …, xk). Trong đó xi =1, 2, …, n

k

T

h xi

=1

i

f(X)=|X|  max

§ Bài toán: Tìm vector X

c, bài có th i l

ng

§ Thu t toán tham lam: • Ch n bài có th i l ờ ượ

ng nh thu tr ỏ

ướ

ờ ượ

l n thu sau n u còn ch ớ

ế

13

£ (cid:229)

Các ví d : {1} Bài toán thu nh c ạ

cài đ tặ

void ThuNhac_Greedy() {

}

14

Các ví d : {2} Bài toán cái túi

1 đ n n, đ v t

c đánh s t

§ Ví d 2 [Bài toán cái túi – 0-1 Knapsack problem] ồ ậ

ạ ồ ậ ượ

ố ừ

ế

ồ ậ ng đ v t i

Cho n lo i đ v t đ th i có ứ • vi – giá tr c a đ v t i ị ủ • wi – tr ng l ồ ậ ượ

ồ ậ ỏ

§ Yêu c u: Tìm m t s đ v t đ b vào túi sao cho ầ ộ ố ồ ậ ể ỏ t ng tr ng l t ượ ượ ọ ổ quá W và t ng giá tr c a các đ v t là l n nh t. ổ

ng các đ v t b vào túi không v ấ

ồ ậ

ị ủ

15

Các ví d : {2} Bài toán cái túi

i gi

ả ủ

i c a bài toán là 1 vector nh ị

phân đ dài n: X=(x1, x2, …, xn). (xi{0, 1})

§ Bi u di n l ễ ờ ộ

ồ ậ ọ

ồ ậ ệ

– xi=1: Ch n đ v t i ọ – xi=0: Không ch n đ v t i • Tr ng l ầ ủ ọ • Giá tr c a nghi m thành ph n: xi*vi ệ

ng c a nghi m thành ph n: xi*wi

ượ ị ủ ầ

§ Bài toán: Tìm vector X

16

Các ví d : {2} Bài toán cái túi

§ Thu t toán tham lam 1:

ắ ầ ế ị ả ồ ậ

• B c 3: Xét tu n t V i đ v t th i:

các đ v t t trái sang ph i. ồ ậ ừ ầ ự ả

ậ • B c 1: S p x p các đ v t có giá tr gi m d n ướ • B c 2: ướ – TrongLuong=0 – xi=0 i ướ ớ ồ ậ – N u TrongLuong + wi < W thì ế § Ch n đ v t i: xi=1 ồ ậ § TrongLuong = TrongLuong + wi

17

Các ví d : {2} Bài toán cái túi

§ Thu t toán tham lam 2:

• S p x p các đ v t có giá tr tăng d n

ậ ắ

ồ ậ ế ầ ị

§ Thu t toán tham lam 3:

• S p x p các đ v t có giá tr trên 1 đ n v tr ng

ị ọ ế ơ ị

ậ ắ ượ

ng (vi/wi) gi m d n l ầ ồ ậ ả

§ Thu t toán tham lam 4:

18

Các ví d : {2} Bài toán cái túi

cài đ tặ

void KnapSack_Greedy() {

}

19

Các ví d : {3} Bài toán ng

i du l ch

ườ

i du l ch – Traveling

ườ

§ Ví d 3 [Bài toán ng

ố ừ

ế

c đánh s t ố

ố ượ ữ

Salesman Problem – TSP] 1 đ n n và Cho n thành ph đ kho ng cách gi a thành ph i và thành ph j đ

ả c cho b i cij (chú ý: cij=cji) ượ

ế

ắ ỗ ề

ế

Yêu c u: Tìm m t hành trình ng n nh t cho phép vi ng thăm n thành ph , m i thành ph ố vi ng thăm đúng 1 l n và quay v thành ph ố ban đ u.ầ

20

Các ví d : {3} Bài toán ng

i du l ch

ườ

i gi

ả ủ

i c a bài toán là 1 vector đ ộ

§ Bi u di n l ễ ờ

dài n: X=(x1, x2, …, xn). (x1 =1). Trong đó (x1, x2, …, xn) là m t hoán v c a (1, 2, …, n)

ị ủ

§ Bài toán: Tìm vector X

21

Các ví d : {3} Bài toán ng

i du l ch

ườ

thành ph s 1, t ưở

§ Thu t toán tham lam: ng: Xu t phát t ừ ấ

ố ố ạ

i m i ỗ c ta s ch n thành ph ti p theo là thành ố ế ẽ ọ

ướ ố ế

ậ • Ý t b ph ch a vi ng thăm và có kho ng cách t ư thành ph hi n t nh t ấ

• B c 1: x1=1; xn=1 • B c 2: Ch n xi là thành ph ch a đi qua và

ừ i đ n thành ph đó là nh ỏ ố ệ ạ ế ả ố

ướ ướ ư ố ọ

22

có kho ng cách đ n xi-1 là nh nh t. ế ấ ả ỏ

Các ví d : {3} Bài toán ng

i du l ch

ườ

cài đ tặ

void TSP_Greedy() {

}

23

Các ví d : {4} Bài toán mã đi tu n

có m t con mã n m t

§ Ví d 4 [Bài toán mã đi tu n] ầ ộ

i m t ộ

ố ế ỉ

Trên bàn c qu c t ô nào đó. Hãy ch ra 1 cách di chuy n con mã trên bàn c theo lu t đi con mã sao cho m i ô trên bàn c , con mã nh y đ n đúng m t l n. ả

ỗ ộ ầ

ờ ờ

ế

24

Các ví d : {4} Bài toán mã đi tu n

c đi h n các ô bên ẽ ướ ơ

§ Thu t toán tham lam: ậ g n biên s có ít n Ở ầ trong

• Ý t n

ưở Ư ữ ể

25

ng: u tiên đi ra biên đ đi nh ng ô có ít c đi nh t r i m i đi đ n nh ng ô bên trong ế ấ ồ ữ ớ ướ

Các ví d : {4} Bài toán mã đi tu n

cài đ tặ

void Horse_Greedy() {

}

26

u đi m và khuy t đi m

Ư ể

ế

§

i u ượ ệ

u đi m Ư ể c các nghi m g n t • Tìm đ ầ ố ư • Th i gian th c thi nhanh h n các ph ơ

ng ự ươ

ờ pháp t i u, quay lui ố ư

§ Khuy t đi m ế

• Nghi m tìm đ ệ

27

ượ c có th không t ể ố t nh t ấ

Tóm t

t ch

ng 7

ươ

28