Bài giảng trình bày về các tối ưu thuật toán bằng phương pháp tham lam và các bài tập minh họa: bài toán cái túi, bài toán người du lịch, đường đi ngắn nhất,... Để tìm hiểu rõ hơn về nội dung chi tiết của bài giảng, mời các bạn cùng tham khảo.
2/2/2017 Analysis and Design of Algorithms Lecture 6,7 The Greedy algorithms Lecturer: Ha Dai Duong duonghd@mta.edu.vn 2/2/2017 Nội dung Lược đồ chung Bài toán túi Bài toán người du lịch Đường ngắn Cây bao trùm nhỏ Bài toán tô màu Bài toán khoảng không giao 2/2/2017 Nội dung Lược đồ chung Bài toán túi Bài toán người du lịch Đường ngắn Cây bao trùm nhỏ Bài toán tô màu Bài toán khoảng không giao 2/2/2017 2/2/2017 Bài toán tối ưu • PP Tham lam thường dùng cho toán tối ưu tổ hợp (tối ưu rời rạc) • Bài toán tối ưu tổ hợp có dạng chung min{f(x):xD} Trong D tập hữu hạn điểm rời rạc thuộc không gian Rn 2/2/2017 Ví dụ Máy ATM có (m) loại tiền: 100.000, 50.000, 20.000, 10.000; người muốn rút số tiền n (n chia hết cho 10.000) Hãy tìm phương án trả tiền cho số tờ tiền phải trả Gọi x=(x1,x2,x3,x4) phương án trả tiền; x1, x2, x3, x4 số tờ tiền phải trả tương ứng với mệnh giá 100.000, 50.000, 20.000,10.000 Theo ta cần giải: min(f=x1+x2+x3+x4) Với: điều kiện - 100.000x1+50.000x2+20.000x3+10.000x4 = n - xi>=0 (i=1 4) 2/2/2017 Giải … • Với toán tối ưu tổ hợp min{f(x):xD} • Để tìm phương án tối ưu toán người ta so sánh giá trị f tất phương án thuộc D; cách gọi “duyệt vét cạn” • Khi số phần tử D lớn (dù hữu hạn) việc duyệt vét cạn gặp nhiều khó khăn 2/2/2017 2/2/2017 PP Tham lam • PP tham lam đưa định dựa vào thông tin có, tương lai không xem xét lại tác động định khứ • Chính thuật toán dạng dễ đề xuất, thông thường chúng không đòi hỏi nhiều thời gian tính • Tuy nhiên, thuật toán dạng thường không cho kết tối ưu 2/2/2017 Ý tưởng • Xuất phát từ lời giải rỗng, thuật toán xây dựng lời giải toán theo bước, bước chọn phần tử từ tập ứng cử viên bổ sung vào lời giải có • Hàm Solution(S) nhận biết tính chấp nhận lời giải S • Hàm Select(C) chọn từ tập C ứng cử viên có triển vọng để bổ sung vào lời giải có • Hàm Feasible(S+x) kiểm tra tính chấp nhận lời giải phận S+x 2/2/2017 Lược đồ chung 2/2/2017 2/2/2017 Tính đắn kết • Để thuật toán không đắn cần đưa phản ví dụ (một liệu mà thuật toán không cho lời giải đúng) • Chứng minh tính đắn thuật toán khó nhiều 2/2/2017 10 Nội dung Lược đồ chung Bài toán túi Bài toán người du lịch Đường ngắn Cây bao trùm nhỏ Bài toán tô màu Bài toán khoảng không giao 2/2/2017 11 Bài toán (Knapsack Problem) • Có n đồ vật, đồ vật i có trọng lượng wi giá trị ci, i = 1, 2, , n • Tìm cách chất đồ vật vào túi có trọng lượng b cho tổng trọng lượng đồ vật chất vào túi không b, đồng thời tổng giá trị chúng lớn 2/2/2017 12 2/2/2017 Khái quát • Ký hiệu C = {1, 2, , n} tập số đồ vật • Bài toán đặt Tìm I ⊂ C cho V= với 2/2/2017 13 Tham lam (Greedy1) • Ý tưởng (tham lam): Đồ vật có giá trị lớn (nhất) lại lấy trước (nếu có thể) • Chi tiết: – Sắp xếp đồ vật theo thứ tự không tăng giá trị – Chọn đồ vật từ đầu đến cuối (từ có giá trị cao đến có giá trị thấp hơn) dung lượng lại túi đủ chứa 2/2/2017 14 Ví dụ • Số lượng đồ vật n = • Trọng lượng giá trị đồ vật là: • Trọng lượng túi b = 19 Greedy1 2/2/2017 I={1} V = 20 Tối ưu I*={2,3} V* = 24 15 2/2/2017 Tham lam (Greedy2) • Ý tưởng (tham lam): Đồ vật có trọng lượng nhỏ (nhất) lại lấy trước (nếu có thể) • Chi tiết: – Sắp xếp đồ vật theo thứ tự không giảm trọng lượng – Chọn đồ vật từ đầu đến cuối (từ có trọng lượng cao đến có trọng lượng thấp hơn) dung lượng lại túi đủ chứa 2/2/2017 16 Ví dụ • Số lượng đồ vật n = • Trọng lượng giá trị đồ vật là: • Trọng lượng túi b = 11 Greedy2 I={1,2} V = 26 Tối ưu I*={3} V* = 28 2/2/2017 17 Tham lam (Greedy3) • Ý tưởng (ít tham lam): Đồ vật có đơn giá lớn (nhất) lại lấy trước (nếu có thể) • Chi tiết: – Sắp xếp đồ vật theo thứ tự không tăng giá trị đơn vị trọng lượng (cI/wI), nghĩa – Chọn đồ vật từ đầu đến cuối 2/2/2017 18 2/2/2017 Ví dụ • Trường hợp (b=19) (V=24) • Trường hợp (b=11) (V=28) 2/2/2017 19 Nội dung Lược đồ chung Bài toán túi Bài toán người du lịch Đường ngắn Cây bao trùm nhỏ Bài toán tô màu Bài toán khoảng không giao 2/2/2017 20 Bài toán 2/2/2017 21 2/2/2017 Ý tưởng • Ý tưởng (tham lam): Chọn thành phố gần tình từ thành phố thời • Tổ chức liệu: Đồ thị G = (V,E), V – tập đỉnh ( T), E – Tập cạnh (C) Mô tả đồ thị dạng ma trận kề 2/2/2017 22 Minh họa … • • • • TOUR: Danh sách cạnh hành trình COST: Chi phí theo hành trình TOUR u: Đỉnh w: Kề với u có chi phí thấp Với toán Xuất phát từ 2/2/2017 23 Minh họa … TOUR={} COST=0 2/2/2017 24 2/2/2017 Minh họa … TOUR={(1,2)} COST=1 2/2/2017 25 Minh họa … TOUR={(1,2), (2,5)} COST=1+3 2/2/2017 26 Minh họa … TOUR={(1,2), (2,5), (5,3)} COST=1+3+2 2/2/2017 27 2/2/2017 Minh họa … TOUR={(1,2), (2,5), (5,3), (3,4)} COST=1+3+2+1 2/2/2017 28 Minh họa … TOUR={(1,2), (2,5), (5,3), (3,4)} COST=1+3+2+1=7 2/2/2017 29 Minh họa … • Trở đỉnh đầu TOUR={(1,2), (2,5), (5,3), (3,4), (4,1)} COST=1+3+2+1=7+7 2/2/2017 30 10 2/2/2017 2/2/2017 31 2/2/2017 32 Độ phức tạp T(n) = O(n2) 2/2/2017 33 11 2/2/2017 Nội dung Lược đồ chung Bài toán túi Bài toán người du lịch Đường ngắn Cây bao trùm nhỏ Bài toán tô màu Bài toán khoảng không giao 2/2/2017 34 Bài toán • Đồ thị G=(V,E) – Đơn đồ thị liên thông (vô hướng có hướng) – Có trọng số – V: Tập đỉnh – E: Tập cạnh • Tìm đường ngắn từ s0V đến tất đỉnh lại 2/2/2017 35 Thuật toán Dijkstra • Ý tưởng (tham lam): Có đồ thị G=(V,E), s0 – L(v): độ dài đường ngắn từ s đến đỉnh v (gọi nhãn v) – Gọi S tập đỉnh xét – Khởi tạo: S = {s0}, L(s0) =0, L(v)= vV\S – Tại bước lặp: • Cập nhập lại nhãn đỉnh thuộc V\S (tập V trừ tập S) • Tìm đỉnh thuộc tập V\S có nhãn nhỏ (tham lam) kề với S để đưa vào S 2/2/2017 36 12 2/2/2017 Cập nhật nhãn L(v) • Khởi tạo: S = {s0}, L(s0) =0, L(v)= vV\S Với vV\S: Với sS: L(v) = min(L(v),L(s)+m(s,v)) Trong m(s,v) độ dài đường từ s với v • Vì có L(s*) với s* đỉnh vừa duyệt xong bước trước có thay đổi giá trị nên việc tính lại L(v) có ý nghĩa với đỉnh kề với s* Với vV\S kề với s*: L(v) = min(L(v),L(s*)+m(s*,v)) 2/2/2017 37 Tìm đỉnh có nhãn nhỏ s* • Đỉnh có nhãn nhỏ s*: – Kề với đỉnh S Và – L(s*) = min(L(v): vV\S) 2/2/2017 s0=1 2/2/2017 38 Minh họa V={1,2,3,4,5,6} 39 13 2/2/2017 s0=1 Khởi tạo S={1} L(1)=0 L(2)= L(3)= L(4)= L(5)= L(6)= s*=1 V\S={2,3,4,5,6} 2/2/2017 s0=1 Cập nhật nhãn S={1} L(1)=0 L(2)= L(3)= L(4)= L(5)= L(6)= s*=1 L(v) = min(L(v),L(s*)+m(s*,v)) V\S={2,3,4,5,6} 2/2/2017 s0=1 41 Cập nhật nhãn S={1} L(1)=0 L(2)=20 L(3)= L(4)= L(5)= L(6)= s*=1 L(v) = min(L(v),L(s*)+m(s*,v)) 20 2/2/2017 40 V\S={2,3,4,5,6} 42 14 2/2/2017 s0=1 Cập nhật nhãn S={1} L(1)=0 L(2)=20 L(3)=15 L(4)= L(5)= L(6)= s*=1 L(v) = min(L(v),L(s*)+m(s*,v)) 20 15 V\S={2,3,4,5,6} 2/2/2017 s0=1 Cập nhật nhãn S={1} L(1)=0 L(2)=20 L(3)=15 L(4)= L(5)=80 L(6)= s*=1 L(v) = min(L(v),L(s*)+m(s*,v)) 20 80 15 V\S={2,3,4,5,6} 2/2/2017 s0=1 44 Đỉnh có nhãn nhỏ s* S={1} L(1)=0 L(2)=20 L(3)=15 L(4)= L(5)=80 L(6)= s*=1 L(s*) = min(L(v): vV\S) 20 80 2/2/2017 43 15 V\S={2,3,4,5,6} 45 15 2/2/2017 s0=1 Đỉnh có nhãn nhỏ s* S={1} L(1)=0 L(2)=20 L(3)=15 L(4)= L(5)=80 L(6)= s*=1 L(s*) = min(L(v): vV\S) 20 80 15 V\S={2,3,4,5,6} 2/2/2017 s0=1 Tiếp … S={1,3} L(1)=0 L(2)=20 L(3)=15 L(4)= L(5)=80 L(6)= s*=3 20 80 15 V\S={2,4,5,6} 2/2/2017 s0=1 47 Cập nhật nhãn S={1,3} L(1)=0 L(2)=20 L(3)=15 L(4)= L(5)=80 L(6)= s*=3 L(v) = min(L(v),L(s*)+m(s*,v)) 20 80 2/2/2017 46 15 V\S={2,4,5,6} 48 16 2/2/2017 s0=1 Cập nhật nhãn S={1,3} L(1)=0 L(2)=20 L(3)=15 L(4)= L(5)=80 L(6)= s*=3 L(v) = min(L(v),L(s*)+m(s*,v)) 19 80 15 V\S={2,4,5,6} 2/2/2017 s0=1 49 Cập nhật nhãn S={1,3} L(1)=0 L(2)=20 L(3)=15 L(4)= L(5)=80 L(6)= s*=3 L(v) = min(L(v),L(s*)+m(s*,v)) 19 80 25 15 V\S={2,4,5,6} 2/2/2017 s0=1 50 Tiếp tục … S={1,3} L(1)=0 L(2)=20 L(3)=15 L(4)= L(5)=80 L(6)= s*=3 19 80 25 15 2/2/2017 V\S={2,4,5,6} 51 17 2/2/2017 s0=1 Kết thúc S={1,3,2,6,4,5} L(1)=0 L(2)=19 L(3)=15 L(4)=29 29 L(5)=29 L(6)=25 19 29 25 15 2/2/2017 V\S={} 52 Kết 2/2/2017 53 Cài đặt • Biểu diễn G qua ma trận trọng số cạnh • Mảng L[i] nhãn đỉnh I • Mảng Daxet[i]: i chưa xét, i xét • Mảng Ddnn[i]: Giá trị đỉnh trước đường ngắn đến i 2/2/2017 54 18 2/2/2017 Cài đặt … 2/2/2017 55 2/2/2017 56 Cài đặt … 2/2/2017 57 19 2/2/2017 Kết thuật toán • Thuật toán Dijkstra cho kết tối ưu • T(n) = O(n2) 2/2/2017 58 Bài tập Thực bước toán người du lịch theo giải thuật tham lam với liệu sau: Bắt đầu từ đỉnh 1, ma trân chi phí mô tả sau: 2/2/2017 59 Bài tập Thực bước thuật toán Dijstra đỉnh 2, 3, đồ thị sau 2/2/2017 60 20 2/2/2017 Bài tập Đề xuất giải thuật tham lam giải toán trả tiền máy ATM? Cài đặt thuật toán người du lịch Đánh giá độ phức tạp thực nghiệm so sánh với lý thuyết Cài đặt thuật toán Dijkstra Đánh giá độ phức tạp thực nghiệm so sánh với lý thuyết 2/2/2017 61 21 ... Cài đặt … 2/2/2017 57 19 2/2/2017 Kết thuật toán • Thuật toán Dijkstra cho kết tối ưu • T(n) = O(n2) 2/2/2017 58 Bài tập Thực bước toán người du lịch theo giải thuật tham lam với liệu sau: Bắt... tả sau: 2/2/2017 59 Bài tập Thực bước thuật toán Dijstra đỉnh 2, 3, đồ thị sau 2/2/2017 60 20 2/2/2017 Bài tập Đề xuất giải thuật tham lam giải toán trả tiền máy ATM? Cài đặt thuật toán người du... không cho lời giải đúng) • Chứng minh tính đắn thuật toán khó nhiều 2/2/2017 10 Nội dung Lược đồ chung Bài toán túi Bài toán người du lịch Đường ngắn Cây bao trùm nhỏ Bài toán tô màu Bài toán khoảng