Chiến lược tham ăn | Học viện Báo chí và Tuyên truyền

Chỉ sử dụng để giải các bài toán tối ưu. Giải thuật được thiết kế bằng chiến lược tham ăn (greedy) giải các bài toán con trước khi giải bài toán gốc. Tài liệu giúp bạn tham khảo, ôn tập và đạt kết quả cao. Mời đọc đón xem!

lOMoARcPSD| 46560390
1
CHIẾN LƯỢC THAM ĂN
Các ặc trưng cơ bản
Các ví dụ minh họa
lOMoARcPSD| 46560390
2
CÁC ĐẶC TRƯNG CƠ BẢN
Chỉ sử dụng ể giải các bài toán tối ưu
Giải thuật ược thiết kế bằng chiến lược tham ăn (greedy)
giải các bài toán con trước khi giải bài toán gốc
lOMoARcPSD| 46560390
3
CÁC ĐẶC TRƯNG CƠ BẢN
• Quá trình tìm lời giải ược thực hiện thông qua một dãy các
c ể tìm lời giải (nghiệm) tối ưu cục bộ (lời giải các bài
toán con) cho ến khi tìm thấy lời giải bài toán gốc
CÁC ĐẶC TRƯNG CƠ BẢN
• Mỗi bước tìm nghiệm cục bộ tha mãn ba tính chất sau
Phi thỏa mãn ràng buộc bài toán (feasible)
Tối ưu cục bộ (locally optimal)
lOMoARcPSD| 46560390
4
Không thay ổi nghiệm cục bộ trong các bước kế tiếp
CÁC ĐẶC TRƯNG CƠ BẢN
Chiến lược greedy luôn thực hiện mt “lựa chọn” tốt nhất
hin tại khi tìm kiếm lời giải bài toán con mà không quan
tâm ến bước tiếp theo
Chiến lược gready không giải tất cả các bài toán con (ti
ưu) như qui hoạch ộng mà mỗi bước chỉ tìm lời giải tối ưu
trong một tập các bài toán con
lOMoARcPSD| 46560390
5
CÁC VÍ DỤ MINH HỌA
Giải thuật Kruskal
Giải thuật Dijkstra
Bài toán người du lịch
Bài toán tô màu
lOMoARcPSD| 46560390
6
GIẢI THUẬT KRUSKAL
Bài toán Cho ồ thị vô hướng liên thông có trọng số G, tìm
cây bao trùm nhỏ nhất (minimum spanning tree) của
G
lOMoARcPSD| 46560390
7
GIẢI THUẬT KRUSKAL
Một bài toán con của bài toán tìm cây bao trùm nhỏ nhất là bài
toán tìm một tập cạnh (ứng với số ỉnh xác ịnh) có tổng trọng
số nhnht (tối ưu cục bộ)
Bài toán con nhnht ứng với tập cạnh F=
Tại mỗi bước, mở rộng tập F thêm một cạnh mà F vẫn tối ưu
(trọng số nhnhất hiện ti)
lOMoARcPSD| 46560390
8
GIẢI THUẬT KRUSKAL
Thay vì khảo sát mọi tập con ể tìm tập con có trọng số nh
nhất, giải thuật chọn mt cạnh có trọng số nhnht (greedy)
của thị, thêm vào tập cạnh F của cây bao trùm sao cho
không gây ra chu trình (sau ó loại cạnh vừa chọn ra khỏi thị)
Giải thuật dừng khi số cạnh trong F của cây bằng số ỉnh của
thtrừ 1
lOMoARcPSD| 46560390
9
GIẢI THUẬT KRUSKAL
Đồ thị G có trọng số
11
14
10
3
7
6
4
9
5
a
b
c
d
g
e
lOMoARcPSD| 46560390
10
GIẢI THUẬT KRUSKAL
Tập cạnh F= (bài toán con nhỏ nht)
a b c
d
e f g
lOMoARcPSD| 46560390
11
GIẢI THUẬT KRUSKAL
Chọn cạnh (e, f) có trọng số bằng 3 (nhỏ nhất), tập cạnh mới
F={(e, f)}, loại cạnh (e, f) ra khỏi tập cạnh của G
a b c
d
3
lOMoARcPSD| 46560390
12
e f g
GIẢI THUẬT KRUSKAL
Chọn cạnh (d, g) có trọng số bằng 4 (nhỏ nhất), tập cạnh mới
F={(e, f), (d, g)}, loại cạnh (d, g) ra khỏi tập cạnh của G
lOMoARcPSD| 46560390
13
a b c
d
e f g
3
4
lOMoARcPSD| 46560390
14
GIẢI THUẬT KRUSKAL
• Sau 6 lần giải bài toán con (chọn cạnh), giải thuật kết thúc với
cây khung nhỏ nhất T=(V, F) của G
GIẢI THUẬT KRUSKAL
Kruskal(G, w)
10
3
6
4
9
5
a
b
c
d
g
f
e
lOMoARcPSD| 46560390
15
1. F ; Q E[G]; N V[G]
3. while F < N -1 and Q
4. do e Extractmin(Q) e có trọng số bé nhất
5. if F {e} not contain cycle then F F {e}
6. if F < N -1
7. then G is not connected
8. else return T T= (V, F)
GIẢI THUẬT KRUSKAL
Q và N là các tập cạnh và ỉnh của G=(V, E)
lOMoARcPSD| 46560390
16
Thời gian thực hiện lệnh e Extractmin(Q) ở dòng 4
(lệnh cơ bản) không vượt quá O(log
2
E)
Chi phí cho tất cả các lần lặp trong vòng lp while 3-5
không quá O(Vlog
2
E)
Do ó, tổng chi phí là O(Vlog
2
E)
GIẢI THUẬT DIJKSTRA
Bài toán Tìm các ường i ngắn nhất từ một ỉnh s ến mọi
ỉnh khác trong một thị có trọng số không âm
lOMoARcPSD| 46560390
17
GIẢI THUẬT DIJKSTRA
Mỗi bài toán con là một bài toán xác ịnh một tập con cácnh
và ường i ngắn nhất từ s ến các ỉnh ó
Bài toán con ban ầu ứng với tập ỉnh S= (hoc S={s})
Mỗi lần dùng chiến lược greedy ể mở rộng S thêm một nh
Khi ã chọn mt ỉnh v ể thêm vào S thì sẽ không ược thay ổi
ớc sau
lOMoARcPSD| 46560390
18
GIẢI THUẬT DIJKSTRA
Ký hiệu d[v] là một cận trên của dài ường i ngắn nhất d(s,v)
từ s ến v, giải thuật kiểm tra gim d[v] cho ến khi d[v]=d(s,
v)
Nếu d[v]>d[u]+w(u,v) thì làm tốt cận trên d[v] bằng cách gán
d[v]= d[u]+w(u,v) (gọi là relaxation)
Nếu d[v] ã tốt nhất thì ưa v vào trong tập S = {v V | d[v]
=d(s, v)}, lúc này d[v] là ộ dài ường i ngắn nhất từ s ến v (việc
chọn v khi d[v] tốt nhất là dùng greedy, c ầu tiên ỉnh s có
d[s] =0 ược chọn)
lOMoARcPSD| 46560390
19
GIẢI THUẬT DIJKSTRA
Nếu d[v]>d[u]+w(u,v)
thì gán
d[v]= d[u]+w(u,v)
lOMoARcPSD| 46560390
20
GIẢI THUẬT DIJKSTRA
GIẢI THUẬT DIJKSTRA
| 1/37

Preview text:

lOMoAR cPSD| 46560390 CHIẾN LƯỢC THAM ĂN
• Các ặc trưng cơ bản • Các ví dụ minh họa 1 lOMoAR cPSD| 46560390 CÁC ĐẶC TRƯNG CƠ BẢN
• Chỉ sử dụng ể giải các bài toán tối ưu
• Giải thuật ược thiết kế bằng chiến lược tham ăn (greedy)
giải các bài toán con trước khi giải bài toán gốc 2 lOMoAR cPSD| 46560390 CÁC ĐẶC TRƯNG CƠ BẢN
• Quá trình tìm lời giải ược thực hiện thông qua một dãy các
bước ể tìm lời giải (nghiệm) tối ưu cục bộ (lời giải các bài
toán con) cho ến khi tìm thấy lời giải bài toán gốc CÁC ĐẶC TRƯNG CƠ BẢN
• Mỗi bước tìm nghiệm cục bộ thỏa mãn ba tính chất sau
▪ Phải thỏa mãn ràng buộc bài toán (feasible)
▪ Tối ưu cục bộ (locally optimal) 3 lOMoAR cPSD| 46560390
▪ Không thay ổi nghiệm cục bộ trong các bước kế tiếp CÁC ĐẶC TRƯNG CƠ BẢN
• Chiến lược greedy luôn thực hiện một “lựa chọn” tốt nhất
hiện tại khi tìm kiếm lời giải bài toán con mà không quan tâm ến bước tiếp theo
• Chiến lược gready không giải tất cả các bài toán con (tối
ưu) như qui hoạch ộng mà mỗi bước chỉ tìm lời giải tối ưu
trong một tập các bài toán con 4 lOMoAR cPSD| 46560390 CÁC VÍ DỤ MINH HỌA • Giải thuật Kruskal • Giải thuật Dijkstra
• Bài toán người du lịch • Bài toán tô màu 5 lOMoAR cPSD| 46560390 GIẢI THUẬT KRUSKAL
Bài toán Cho ồ thị vô hướng liên thông có trọng số G, tìm
cây bao trùm nhỏ nhất (minimum spanning tree) của G 6 lOMoAR cPSD| 46560390 GIẢI THUẬT KRUSKAL
• Một bài toán con của bài toán tìm cây bao trùm nhỏ nhất là bài
toán tìm một tập cạnh (ứng với số ỉnh xác ịnh) có tổng trọng
số nhỏ nhất (tối ưu cục bộ)
• Bài toán con nhỏ nhất ứng với tập cạnh F=
• Tại mỗi bước, mở rộng tập F thêm một cạnh mà F vẫn tối ưu
(trọng số nhỏ nhất hiện tại) 7 lOMoAR cPSD| 46560390 GIẢI THUẬT KRUSKAL
• Thay vì khảo sát mọi tập con ể tìm tập con có trọng số nhỏ
nhất, giải thuật chọn một cạnh có trọng số nhỏ nhất (greedy)
của ồ thị, thêm vào tập cạnh F của cây bao trùm sao cho
không gây ra chu trình (sau ó loại cạnh vừa chọn ra khỏi ồ thị)
• Giải thuật dừng khi số cạnh trong F của cây bằng số ỉnh của ồ thị trừ 1 8 lOMoAR cPSD| 46560390 GIẢI THUẬT KRUSKAL
• Đồ thị G có trọng số a c b 11 5 14 6 7 9 d 10 4 3 e f g 9 lOMoAR cPSD| 46560390 GIẢI THUẬT KRUSKAL
• Tập cạnh F= (bài toán con nhỏ nhất) a b c d e f g 10 lOMoAR cPSD| 46560390 GIẢI THUẬT KRUSKAL
• Chọn cạnh (e, f) có trọng số bằng 3 (nhỏ nhất), tập cạnh mới
F={(e, f)}, loại cạnh (e, f) ra khỏi tập cạnh của G a b c d 3 11 lOMoAR cPSD| 46560390 e f g GIẢI THUẬT KRUSKAL
• Chọn cạnh (d, g) có trọng số bằng 4 (nhỏ nhất), tập cạnh mới
F={(e, f), (d, g)}, loại cạnh (d, g) ra khỏi tập cạnh của G 12 lOMoAR cPSD| 46560390 a b c 4 3 d e f g 13 lOMoAR cPSD| 46560390 GIẢI THUẬT KRUSKAL
• Sau 6 lần giải bài toán con (chọn cạnh), giải thuật kết thúc với
cây khung nhỏ nhất T=(V, F) của G a c b 5 6 9 d 10 4 3 e f g GIẢI THUẬT KRUSKAL Kruskal(G, w) 14 lOMoAR cPSD| 46560390 1. F ; Q E[G]; N V[G] 3. while F < N -1 and Q 4.
do e Extractmin(Q) e có trọng số bé nhất 5.
if F {e} not contain cycle then F F {e} 6. if F < N -1 7.
then G is not connected 8.
else return T T= (V, F) GIẢI THUẬT KRUSKAL
• Q và N là các tập cạnh và ỉnh của G=(V, E) 15 lOMoAR cPSD| 46560390
• Thời gian thực hiện lệnh e Extractmin(Q) ở dòng 4
(lệnh cơ bản) không vượt quá O(log2 E)
• Chi phí cho tất cả các lần lặp trong vòng lặp while 3-5 không quá O(Vlog2 E)
• Do ó, tổng chi phí là O(Vlog2 E) GIẢI THUẬT DIJKSTRA
Bài toán Tìm các ường i ngắn nhất từ một ỉnh s ến mọi
ỉnh khác trong một ồ thị có trọng số không âm 16 lOMoAR cPSD| 46560390 GIẢI THUẬT DIJKSTRA
• Mỗi bài toán con là một bài toán xác ịnh một tập con các ỉnh
và ường i ngắn nhất từ s ến các ỉnh ó
• Bài toán con ban ầu ứng với tập ỉnh S= (hoặc S={s})
• Mỗi lần dùng chiến lược greedy ể mở rộng S thêm một ỉnh
• Khi ã chọn một ỉnh v ể thêm vào S thì sẽ không ược thay ổi ở bước sau 17 lOMoAR cPSD| 46560390 GIẢI THUẬT DIJKSTRA
• Ký hiệu d[v] là một cận trên của ộ dài ường i ngắn nhất d(s,v)
từ s ến v, giải thuật kiểm tra và giảm d[v] cho ến khi d[v]=d(s, v)
▪ Nếu d[v]>d[u]+w(u,v) thì làm tốt cận trên d[v] bằng cách gán
d[v]= d[u]+w(u,v) (gọi là relaxation)
▪ Nếu d[v] ã tốt nhất thì ưa v vào trong tập S = {v V | d[v]
=d(s, v)}, lúc này d[v] là ộ dài ường i ngắn nhất từ s ến v (việc
chọn v khi d[v] tốt nhất là dùng greedy, bước ầu tiên ỉnh s có d[s] =0 ược chọn) 18 lOMoAR cPSD| 46560390 GIẢI THUẬT DIJKSTRA Nếu d[v]>d[u]+w(u,v) thì gán d[v]= d[u]+w(u,v) 19 lOMoAR cPSD| 46560390 GIẢI THUẬT DIJKSTRA GIẢI THUẬT DIJKSTRA 20