Phương pháp tham lam

7,533 views
7,265 views

Published on

Published in: Education, Sports
1 Comment
3 Likes
Statistics
Notes
No Downloads
Views
Total views
7,533
On SlideShare
0
From Embeds
0
Number of Embeds
46
Actions
Shares
0
Downloads
497
Comments
1
Likes
3
Embeds 0
No embeds

No notes for slide

Phương pháp tham lam

  1. 1. Chương 4 Phương pháp Tham lam (Greedy Method)
  2. 2. Nội dung 1. Bài toán “Chọn hoạt động” 2. Phương pháp “Tham lam “ 3. Cơ sở lý thuyết của Tham lam
  3. 3. 1. Bài toán “Chọn hoạt động” <ul><li>S = {a 1 ,a 2 ,..,a n } : tập các hoạt động muốn sử dụng tài nguyên (ví dụ: một hội trường) </li></ul><ul><li>Hoạt động a i (i=1..n) chiếm tài nguyên: [s i , f i ) </li></ul><ul><li>( s i : thời điểm bắt đầu, f i : thời điểm kết thúc) </li></ul><ul><li>Hai hoạt động “tương thích” lẫn nhau nếu [s i ,f i ) và [s i ,f j ) không chồng lên nhau </li></ul><ul><li>Một tập {a i 1 ,a i 2 ,..,a i k } được gọi là “tương thích” nếu a i u tương thích a i v ,  1  u,v  k, u  v </li></ul><ul><li>Tìm tập tương thích lớn nhất </li></ul>
  4. 4. 1. Bài toán “Chọn hoạt động” (2) <ul><li>{a 3 ,a 9 ,a 11 } là một tập tương thích nhưng không lớn nhất </li></ul><ul><li>{a 1 ,a 4 ,a 8 ,a 11 } là tập tương thích lớn nhất </li></ul><ul><li>{a 2 ,a 4 ,a 9 ,a 11 } cũng là một tập tương thích lớn nhất </li></ul>Ví dụ: có 11 hoạt động (được sắp xếp tăng dần theo thời điểm kết thúc) 13 2 10 7 5 4 8 3 5 9 5 6 10 6 7 11 8 8 14 12 11 12 6 5 4 f i 8 0 3 1 s i 9 3 2 1
  5. 5. 1. Bài toán “Chọn hoạt động” (3) 1. Quy hoạch động 2. Tham lam 3. Đệ quy 3. Khử Đệ quy Chia bài toán lớn thành 2 bài toán con Chỉ cần sự lựa chọn Tham lam  Còn lại 1 bài toán con Xây dựng giải thuật Đệ quy Chuyển Đệ quy  Lặp Các bước thực hiện:
  6. 6. 1. Bài toán “Chọn hoạt động” (4) <ul><li>Tìm cấu trúc con tối ưu </li></ul><ul><li>Gọi tập S ij = {a k  S | f i  s k <f k  s j } </li></ul><ul><li>Giả sử: f 0  f 1  …  f n  f n+1 (có thêm 2 hoạt động a o và a n+1 ) </li></ul><ul><li>Xét bài toán con khác rỗng S ij : </li></ul><ul><ul><li>Giả sử  a k , f i  s k  f k  s j . </li></ul></ul><ul><ul><li>Nếu chọn a k  2 bài toán con: S ik và S kj </li></ul></ul><ul><ul><li> |S ij | = |S ik | + |S kj | + 1 </li></ul></ul><ul><li>Nhận xét: </li></ul><ul><li>Nếu A ij = MaxComp(S kj ) thì A ik = MaxComp(S ik ) và A kj = MaxComp(S kj ) </li></ul><ul><li>Giải pháp: chia bài toán A ij thành 2 bài toán con A ik và A kj </li></ul><ul><li>A ij = A ik  {a k }  A kj </li></ul><ul><li>Bài toán ban đầu: A 0,n+1 </li></ul>1. Quy hoạch động 2. Tham lam 3. Đệ quy 3. Khử Đệ quy
  7. 7. 1. Bài toán “Chọn hoạt động” (5) <ul><li>Xây dựng giải pháp Đệ qui: </li></ul><ul><li>Gọi c ij = |A ij | </li></ul><ul><li>Với S ij   , ta có công thức đệ quy: </li></ul><ul><li>c ij = c ik + c kj + 1 (k có thể nhận j-i-1 giá trị) </li></ul><ul><li>Công thức đệ quy đầy đủ: </li></ul><ul><li>c ij = </li></ul>1. Quy hoạch động 2. Tham lam 3. Đệ quy 3. Khử Đệ quy 0 nếu S ij =  Max {c i k +c k j +1} nếu S ij  i+1  k  j-1
  8. 8. 1. Bài toán “Chọn hoạt động” (6) <ul><li>S ij : bài toán khác rỗng. Nếu a m  S ij mà f m =min {f k | a k  S ij } thì: </li></ul><ul><li>a m được sử dụng trong tập con tương thích lớn nhất nào đó của S ij </li></ul><ul><li>S im =   nếu chọn a m thì chỉ còn duy nhất bài toán khác rỗng S mj </li></ul>1. Quy hoạch động 2. Tham lam 3. Đệ quy 3. Khử Đệ quy Định lý: A ij A’ ij a k a m S ij
  9. 9. 1. Bài toán “Chọn hoạt động” (7) <ul><li>RecusiveActivitySelector (s,f,i,j) { </li></ul><ul><ul><li>m  i+1 </li></ul></ul><ul><ul><li>while (m<j) and (s m <f i ) do m  m+1 </li></ul></ul><ul><ul><li>if (m<j) then return {a m }  RecursiveActivitySelector (s,f,m,j) </li></ul></ul><ul><ul><li>else return  </li></ul></ul><ul><li>} </li></ul>1. Quy hoạch động 2. Tham lam 3. Đệ quy 3. Khử Đệ quy <ul><li>Vào: - 2 mảng s và f (thời điểm bắt đầu và kết thúc của các hoạt động) </li></ul><ul><ul><li>-2 chỉ số i và j biểu thị bài toán con S ij </li></ul></ul><ul><li>Ra: Tập tương thích lớn nhất trong S ij </li></ul><ul><li>Lời gọi ban đầu: RecursiveActivitySelector (s, f, 0, n+1) </li></ul>
  10. 10. 1. Bài toán “Chọn hoạt động” (8) <ul><li>GreedyAcrivitySelector (s,f) { </li></ul><ul><ul><li>n  length(s) </li></ul></ul><ul><ul><li>A  {a 1 } </li></ul></ul><ul><ul><li>i  1 </li></ul></ul><ul><ul><li>for m  1 to n do </li></ul></ul><ul><ul><ul><li>if s m >f i then { </li></ul></ul></ul><ul><ul><ul><ul><li>A  A  {a m } </li></ul></ul></ul></ul><ul><ul><ul><ul><li>i  m </li></ul></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><li>return A </li></ul></ul><ul><li>} </li></ul>1. Quy hoạch động 2. Tham lam 3. Đệ quy 3. Khử Đệ quy
  11. 11. 1. Bài toán “Chọn hoạt động” (9) <ul><li>Minh họa: </li></ul>a 0 a 0 a 1 m=1 a 1 a 2 a 3 a 4 m=4 a 1 a 5 a 4 a 6 a 7 a 8 m=8 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 t k s k f k 0 - 0 1 1 4 2 3 5 3 0 6 4 5 7 5 3 8 6 5 9 7 6 10 8 8 11 a 1 a 4 a 8 a 11 RAS(s,f, 0,12) RAS(s,f, 1,12) RAS(s,f, 4,12) 12  -
  12. 12. 2. Phương pháp “Tham lam” <ul><li>Tiến trình thực hiện phương pháp Tham lam </li></ul><ul><li>Xác định cấu trúc con tối ưu </li></ul><ul><li>Xây dựng giải pháp đệ quy </li></ul><ul><li>Chứng minh: tại mỗi bước đệ qui, lựa chọn Tham lam là một trong những lựa chọn cho kết quả tối ưu </li></ul><ul><li>Chỉ ra: sau lỗi lựa chọn Tham lam, một trong những bài toán con sẽ rỗng </li></ul><ul><li>Xây dựng giải pháp đệ quy cho chiến lược Tham lam </li></ul><ul><li>Khử đệ quy </li></ul>
  13. 13. 2. Phương pháp “Tham lam” (2) <ul><li>Một cách tổng quát, thực hiện phương pháp Tham lam qua các bước: </li></ul><ul><li>Tìm lựa chọn sao cho các bước tiếp theo chỉ việc giải quyết một bài toán con </li></ul><ul><li>Chứng minh: với sự lựa chọn Tham lam tại mỗi bước  luôn tìm được 1 giải pháp tối ưu (cho bài toán ban đầu) </li></ul><ul><li>Chỉ ra: với sự lựa chọn Tham lam tại mỗi bước  giải pháp tối ưu của bài toán con còn lại kết hợp với sự lựa chọn Tham lam này sẽ đi đến một giải pháp tối ưu (cho bài toán ban đầu) </li></ul>
  14. 14. 2. Phương pháp “Tham lam” (3) <ul><li>Hai đặc tính quan trọng của phương pháp Tham lam: </li></ul><ul><li>Tính lựa chọn Tham lam (Greedy Choice Property) : </li></ul><ul><ul><li>Một bài toán có “tính lựa chọn Tham lam” nếu có thể tìm được 1 giải pháp tối ưu toàn cục bằng cách lựa chọn tối ưu cục bộ. </li></ul></ul><ul><ul><li>Nhiều sự lựa chọn  chọn phương án tốt nhất </li></ul></ul><ul><ul><li>Tham lam (Top-Down)  Quy hoạch động (Bottom-Up) </li></ul></ul><ul><li>Cấu trúc con tối ưu (Optimal Substructure): </li></ul><ul><ul><li>Một bài toán có “cấu trúc con tối ưu” nếu giải pháp tối ưu cho bài toán này chứa các giải pháp tối ưu cho các bài toán con của nó. </li></ul></ul>
  15. 15. 3. Cơ sở lý thuyết <ul><li>Hasser Whitney (1907-1989) </li></ul><ul><li>1935: trong bài báo “ On the abstract properties of linear dependence ” , ông đưa ra lý thuyết Matroid </li></ul><ul><li>Lý thuyết matroid không thể áp dụng cho tất cả các trường hợp áp dụng phương pháp Tham lam (như bài toán “Chọn hoạt động”, mã Huffman) </li></ul>
  16. 16. 3. Cơ sở lý thuyết (2) <ul><li>Một matroid mà một bộ 2 có thứ tự M=(S,  ), thỏa mãn: </li></ul><ul><ul><li>S là một tập hữu hạn khác rỗng </li></ul></ul><ul><ul><li> là một họ khác rỗng các tập con (độc lập) của S, thỏa mãn: nếu B   và A  B thì A   (ta nói  là di truyền ) </li></ul></ul><ul><ul><li>M thỏa mãn tính chất trao đổi (exchange) nếu A   , B   và |A|<|B| thì  x  B-A mà A  {x}   </li></ul></ul>Định nghĩa 1: <ul><li>Ví dụ: </li></ul><ul><li>Matroid ma trận M=(S,  ). S là tập các hàng của ma trận.   là họ các tập con của S mà các hàng trong mỗi tập con này độc lập tuyến tính. </li></ul><ul><li>Matroid đồ thị M G =(S G ,  G ). G=(V,E) là đồ thị vô hướng. S G là tập các cạnh của đồ thị G. A   G   A không chứa chu trình </li></ul>
  17. 17. 3. Cơ sở lý thuyết (3) <ul><li>Chứng minh: </li></ul><ul><li>S G =E là một tập hữu hạn khác rỗng </li></ul><ul><li> G là di truyền vì một tập con của một rừng là một rừng </li></ul><ul><li>Tính chất trao đổi? G A =(V,A), G B =(V,B) là rừng của G và |B|>|A|. </li></ul><ul><ul><li>Rừng G A có |V|-|A| cây, rừng G B có |V|-|B| cây. G B có ít cây hơn G A nên  cây T  G B mà các đỉnh của T nằm ở 2 cây khác nhau trong G A . T liên thông   (u,v)  T mà u và v nằm ở 2 cây kh ác nhau của G A nên cạnh (u,v) có thể thêm vào G A mà không tạo thành chu trình  M G thỏa mãn tính chất trao đổi. </li></ul></ul>Nếu G=(V,E) là một đồ thị vô hướng thì M G =(S G ,  G ) là một matroid . Định lý 1: G A G B 2 3 4 5 1 2 3 4 5 1
  18. 18. 3. Cơ sở lý thuyết (4) <ul><li>Cho matroid M=(S,  ). x  A được gọi là phần tử mở rộng của A   nếu A  {x}   </li></ul><ul><li>A là tập con độc lập của matroid M. Ta nói A cực đại nếu nó không có phần tử mở rộng nào. </li></ul>Mọi tập con cực đại trong một matroid có cùng lực lượng . Định lý 2: Chứng minh: A là tập con cực đại trong M. Giả sử  B là tập con cực đại khác trong M mà |B|>|A|. Tính chất trao đổi  x=B-A là một phần tử mở rộng của A  trái với giả thiết A là tập con cực đại  đpcm Phần tử mở rộng:
  19. 19. 3. Cơ sở lý thuyết (5) <ul><li>Matroid M=(S,  ) là có trọng số nếu  ánh xạ: </li></ul><ul><li>w: S  R + </li></ul><ul><li> x w(x) </li></ul><ul><li>Với A  S, ta có: w(A) = sum x  A (w(x)) </li></ul>Matroid có trọng số: w(B) w(A)
  20. 20. 3. Cơ sở lý thuyết (6) <ul><li>Nhiều bài toán sử dụng Tham lam để tim lời giải tối ưu tương đương việc tìm tập con cực đại có trọng số lớn nhất trong một matroid có trọng số. </li></ul><ul><li>Ví dụ: bài toán Cây khung nhỏ nhất </li></ul><ul><ul><li>Gọi matroid M G với hàm trọng số w’: w’(e) = w 0 -w(e). </li></ul></ul><ul><ul><li>Trong đó w 0 = max{w(e)}+1 </li></ul></ul><ul><ul><li>1 tập con A cực đại  1 cây khung của đồ thị </li></ul></ul><ul><ul><li>w’(A) = (|V|-1)w 0 - w(A). w(A) là độ dài của cây khung. </li></ul></ul><ul><ul><li>Cực đại hóa w’(A)  cực tiểu hóa w(A) </li></ul></ul><ul><ul><li>tìm tập con tối ưu A  tìm cây khung nhỏ nhất </li></ul></ul>Phương pháp Tham lam áp dụng cho matroid có trọng số
  21. 21. 3. Cơ sở lý thuyết (7) <ul><li>Greedy (S,  , w) </li></ul><ul><li>A  </li></ul><ul><li>Sort(S) {Sxếp S không tăng dần w} </li></ul><ul><li>for each x in S do </li></ul><ul><li>if (A  {x}   ) then A  A  {x} </li></ul><ul><li>return A </li></ul>Vào: Matroid có trọng số, đại diện bởi 3 thông số: S,  , w Ra: Tập con tối ưu A
  22. 22. 3. Cơ sở lý thuyết (8) <ul><li>M=(S,  ) là một matroid có trọng số, với hàm trọng số w và tập S có thứ tự không tăng dần theo trọng số. </li></ul><ul><li>x là phần tử đầu tiên của S mà {x} độc lập. </li></ul><ul><li>Nếu  x thì  một tập con tối ưu A của S chứa x. </li></ul>Bổ đề 1: Matroid có tính lựa chọn tham lam y 3 y 1 y 5 y 4 <ul><li>Chứng minh: </li></ul><ul><li>Không  x   là tập con độc lập duy nhất </li></ul><ul><li>Gọi B là tập con tối ưu  </li></ul><ul><ul><li>x  B  đpcm </li></ul></ul><ul><ul><li>x  B  xây dựng tập A (sử dụng tính chất trao đổi) </li></ul></ul>B A x y 3 y 4 y 1 y 2 y 5
  23. 23. 3. Cơ sở lý thuyết (9) <ul><li>Với matroid M=(S,  ). Nếu x  S là một mở rộng của tập con độc lập A nào đó của S thì x cũng là một mở rộng của  . </li></ul>Bổ đề 2: Chứng minh: x là 1 mở rộng của A  A  {x} độc lập. l di truyền  {x} độc lập. Matroid M=(S,  ). Nếu x  S mà x không là mở rộng của  thì x không là mở rộng của bất kỳ tập con độc lập A nào của S. Hệ quả 1: Nếu một phần tử không được chọn lúc ban đầu thì sau này cũng không được chọn!
  24. 24. 3. Cơ sở lý thuyết (10) <ul><li>Gọi x là phần tử đầu tiên của S được chọn bởi hàm Greedy. Vấn đề còn lại của việc tìm một tập con độc lập có trọng số cực đại (chứa x) là tìm một tập con độc lập có trọng số cực đại của matroid có trọng số M’=(S’,  ’): </li></ul><ul><ul><li>S’ = {y  S | {x,y}   , </li></ul></ul><ul><ul><li> ’ = {B  S-{x} | B  {x}  S}, </li></ul></ul><ul><ul><li>Hàm trọng số cho M’ là hàm trọng số cho M nhưng giới hạn bởi S’ (gọi M’ là rút gọn của M bởi x) </li></ul></ul>Bổ đề 3: (Matroid có tính cấu trúc con tối ưu)
  25. 25. 3. Cơ sở lý thuyết (11) <ul><li>Chứng minh: </li></ul><ul><li>Hệ quả 1  những phần tử bị bỏ lúc đầu không hữu dụng  sau này khôn cần xét lại chúng nữa </li></ul><ul><li>Bổ đề 1  khi một phần tử đầu tiên x được chọn, Greedy đúng khi thêm x vào A vì luôn tồn tại một tập con tối ưu chứa x </li></ul><ul><li>Bổ đề 3  bái toán còn lại là tìm tập con tối ưu trong matroid M’ (M’ là rút gọn của M bởi x) </li></ul>Nếu M=(S,  ) là một matroid có trọng số với hàm trọng số là w thì hàm Greedy(S,  ,w) trả về một tập con tối ưu. Định lý 3: (tính đúng của Tham lam áp dụng cho matroid)

×