Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 74 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
74
Dung lượng
881,88 KB
Nội dung
om nh Vi en Zo ne C Chương Qui hoạch động giải thuật tham lam Si Qui hoạch động Giải thuật tham lam SinhVienZone.com https://fb.com/sinhvienzonevn 1 Qui hoạch động C om Quy hoạch động (dynamic programming) giải toán cách kết hợp lời giải toán toán xét nh Vi en Zo ne Phương pháp khả dụng tốn khơng độc lập nhau, tức tốn có dùng chung toán “cháu” (subsubproblem) Si Qui hoạch động giải toán “cháu” dùng chung lần lưu lời giải chúng bảng sau khỏi phải tính lại gặp lại tốn cháu Qui hoạch động áp dụng cho tốn tối ưu hóa (optimization problem) SinhVienZone.com https://fb.com/sinhvienzonevn Bốn bước qui hoạch động C om Sự xây dựng giải thuật qui hoạch động chia làm bốn bước: Zo ne Đặc trưng hóa cấu trúc lời giải tối ưu nh Vi en Định nghĩa giá trị lời giải tối ưu cách đệ quy Tính trị lời giải tối ưu theo kiểu từ lên Si Cấu tạo lời giải tối ưu từ thông tin tính tốn SinhVienZone.com https://fb.com/sinhvienzonevn Thí dụ1: Nhân xâu ma trận C om Cho chuỗi gồm n matrận, ta muốn tính tích ma trận A1 A2 … An (5.1) Si nh Vi en Zo ne Tích xâu ma trận gọi mở-đóng-ngoặc-đầy-đủ (fully parenthesized ) ma trận đơn tích hai xâu ma trận mở-đóng-ngoặc-đầy-đủ Thí dụ: A1 A2 A3 A4 mở-đóng-ngoặc-đầy-đủ theo cách: (A1(A2(A3A4))) (A1((A2A3)A4) ((A1A2)(A3A4)) (A1(A2A3))A4) (((A1A2)A3)A4) SinhVienZone.com https://fb.com/sinhvienzonevn om Cách mà ta mở đóng ngoặc xâu ma trận có ảnh hưởng lớn đến chi phí tính tích xâu ma trận A1 10 100 A2 100 A3 50 ((A1A2)A3)) thực 10.100.5 + 10.5.50 = 5000 + 2500 = 7500 phép nhân vô hướng (A1(A2A3)) thực 100.5.50 + 10.100.50 = 25000 + 50000 = 75000 phép nhân vô hướng Si nh Vi en Zo ne C Thí dụ: Hai chi phí khác biệt SinhVienZone.com https://fb.com/sinhvienzonevn Phát biểu toán nhân xâu ma trận nh Vi en Zo ne C om Bài toán tính tích xâu ma trận: '‘Cho chuỗi gồm n matrận, với i = 1, 2, …, n, ma trận Ai có kích thước pi-1 pi, ta mở-đóngngoặc tích cho tối thiểu hóa tổng số phép nhân vơ hướng” Si Đây tốn tối ưu hóa thuộc loại khó SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc cách mở đóng ngoặc tối ưu nh Vi en Zo ne C om Bước 1: Đặc trưng hóa cấu trúc lời giải tối ưu Dùng Ai j để ký hiệu ma trận kết việc tính Ai Ai+1…Aj Một mở đóng ngoặc tối ưu tích xâu ma trận A1.A2… An Tách xâu vị trí nằm Ak Ak+1 với trị nguyên k, k < n Nghĩa là, trước tiên ta tính chuỗi ma trận A1 k and Ak+1 n nhân chúng với A1.n Si Chi phí mở đóng ngoặc tối ưu = chi phí tính Al k + chí phí tính Ak+1 n, + chi phí nhân chúng lại với SinhVienZone.com https://fb.com/sinhvienzonevn Diễn tả lời giải cách đệ quy ne C om Ở đây, toán ta tốn xác định chi phí tối ưu ứng với mở đóng ngoặc cho chuỗi Ai.Ai+1… Aj với i j n nh Vi en Zo Đặt m[i, j] tổng số tối thiểu phép nhân vơ hướng địi hỏi để tính ma trận Ai j Chi phí cách rẻ để tính A1 n ghi m[1, n] Si Giả sử mở đóng ngoặc tối ưu tách đơi tích chuỗi Ai Ai+l… Aj Ak and Ak+l, với i k < j Thì m[i, j] với chí phí tối thiểu để tính Ai k Ak+1 j, cọng với chi phí để nhân hai ma trận lại với m[i, j] = m[i, k] + m[k+1, j] + pi-1pkpj SinhVienZone.com https://fb.com/sinhvienzonevn Một công thức đệ quy C om Như vậy, định nghĩa đệ quy cho chi phí tối thiểu mở đóng ngoặc cho Ai Ai+l… Aj sau: (5.2) nh Vi en Zo ne m[i, j] = i = j, = {m[i, k] + m[k + 1, j] + pi-1pkpj.} i < j Để giúp theo dõi cách tạo lời giải tối ưu, định nghĩa: Si s[i, j]: trị k tách tích xâu ma trận AiAi+1…Aj để đạt đến mở đóng ngoặc tối ưu SinhVienZone.com https://fb.com/sinhvienzonevn Một nhận xét quan trọng ne C om Một nhận xét quan trọng ''Sự mở đóng ngoặc xâu A1A2 Ak bên mở đóng ngoặc tối ưu xâu A1A2…An phải mở đóng ngoặc tối ưu'' nh Vi en Zo Như vậy, lời giải tối ưu cho tóan tích xâu ma trận chứa đựng lời giải tối ưu toán Si Bước thứ hai phương pháp qui hoạch động định nghĩa trị lời giải tối ưu cách đệ quy theo lời giải tối ưu tốn SinhVienZone.com https://fb.com/sinhvienzonevn 10 Mã có chiều dài thay đổi ne C om Một mã có chiều dài thay đổi (variable-length code) làm việc tốt mã có chiều dài cố định, cho ký tự hay xuất mã ngắn ký tự hay xuất mã dài nh Vi en Mã đòi hỏi: Zo a = 0, b = 101, f = 1100 (45 + 13 + 12.3 + 16.3 + 9.4 + 5.4).1000 = 224000 bits Si để biểu diễn tập tin, tiết kiệm 25 % Và mã tối ưu cho tập tin SinhVienZone.com https://fb.com/sinhvienzonevn 60 Mã phi-tiền tố (Prefix-code) ne C om Ở ta xét cách mã hóa mà khơng có mã ký tự tiền tố (prefix) mã ký tự khác Những cách mã hóa gọi mã phi tiền tố (prefix-free-code) hay mã tiền tố (prefix-code) Zo Có thể chứng minh nén tin tối ưu thực cách mã hóa ký tự mã phi tiền tố nh Vi en Mã phi tiền tố ưa chuộng làm đơn giản mã hóa giải mã Si - Sự mã hóa đơn giản; ta cần ghép kề mã ký tự lại với biểu diễn ký tự tập tin - Sự giải mã cần biểu diễn thuận tiện cho mã phi tiền tố cho phần đầu mã nhặt cách dễ dàng SinhVienZone.com https://fb.com/sinhvienzonevn 61 Mã phi tiền tố nhị phân om Biểu diễn cho mã phi tiền tố nhị phân với nút tương ứng với ký tự cho Zo ne C Chúng ta phân giải mã nhị phân cho ký tự lối từ nút rễ đến nút ký tự ấy, mà ứng với “rẽ sang bên trái” nghĩa “rẽ sang bên phải” nh Vi en Mã tối ưu tập tin thường biểu diễn nhị phân đầy đủ (full binary tree) Một nhị phân đầy đủ nhị phân mà nút khơng phải có đủ hai Si Nếu C tập ký tự mà từ ký tự lấy ra, nhị phân cho mã phi tiền tố tối ưu có |C| nút lá, nút cho ký tự, |C|-1 nút nội SinhVienZone.com https://fb.com/sinhvienzonevn 62 100 100 om 0 14 a:45 b:13 14 c:12 d:16 e:9 f:5 nh Vi en 28 ne 58 Zo 0 30 25 c:12 b:13 14 d:16 f:5 e:9 (b) Si (a) a:45 C 86 55 Hình 5.7 So sánh hai cách mã hóa SinhVienZone.com https://fb.com/sinhvienzonevn 63 Mã phi tiền tố nhị phân (tt.) om Cho T tương ứng với mã phi tiền tố, tính tổng số bit cần để mã hóa tập tin Zo ne C Với ký tự c tập ký tự C, dùng f(c) để ký hiệu tần số xuất c tập tin dT(c) chiều dài mã cho ký tự c Thì số bit địi hỏi để mã hóa tập tin nh Vi en B(T ) f (c)dT (c) cC Si Mà coi chi phí nhị phân T SinhVienZone.com https://fb.com/sinhvienzonevn 64 Cấu tạo mã Huffman C om Huffman đề xuất giải thuật tham lam để cấu tạo mã phi tiền tố tối ưu gọi mã Huffman (Huffman code) nh Vi en Zo ne Giải thuật tạo nhị phân T tương ứng với mã tối ưu theo kiểu từ lên Giải thuật bắt đầu với tập gồm |C| nút thực chuỗi gồm |C| tác vụ trộn để tạo cuối Si Một hàng đợi có độ ưu tiên Q, lấy trị khóa theo tần số f, dùng để nhận diện hai đối tượng có tần số nhỏ để trộn lại với Kết việc trộn hai đối tượng đối tượng mà tần số tổng tần số hai đối tượng mà trộn SinhVienZone.com https://fb.com/sinhvienzonevn 65 (a) f:5 e:9 c:12 b:13 d:16 a:45 (b) c:12 b:13 d:16 e:9 c:12 b:13 (d) 55 25 30 Si c:12 b:13 d:16 14 f:5 e:9 d:16 14 f:5 (f) a:45 30 c:12 b:13 Zo nh Vi en (e) a:45 e:9 25 ne f:5 a:45 25 C 14 om f:5 (c) d:16 a:45 14 e:9 100 a:45 55 30 25 c:12 b:13 d:16 14 Hình 5.8 SinhVienZone.com Các bước giải thuật tạo mã Huffmanhttps://fb.com/sinhvienzonevn f:5 e:9 66 Giải thuật Huffman om Giả sử Q thực heap .C Cho tập C gồm n ký tự, việc khởi tạo Q thực thi với thời gian O(n) Si nh Vi en Zo ne procedure HUFFMAN(C) ; begin n := |C| ; Q := C ; for i := to n -1 begin z: = ALLOCATE-NODE( ); left[z]: = EXTRACT-MIN(Q); right[z]: = EXTRACT-MIN(Q); f[z] := f[left[z]] + f[right[z]]; INSERT(Q, z); end end SinhVienZone.com Vòng lặp for thực thi xác gồm n-1 lần, tác vụ làm việc heap đòi hỏi O(lgn), vịng lặp đóng góp chi phí O(nlgn) vào thời gian tính tốn Như vậy, độ phức tạp giải thuật HUFFMAN tập n ký tự O(nlgn) https://fb.com/sinhvienzonevn 67 Thí dụ 4: Bài tốn tơ màu đồ thị om C ne Zo nh Vi en Cho đồ thị vơ hướng, tìm số màu tối thiểu để tô đỉnh đồ thị cho khơng có hai đỉnh có cạnh nối lại tơ màu Đây tốn tối ưu hóa Một chiến lược để giải toán dùng giải thuật “tham lam” Ý tưởng: Đầu tiên ta cố tô cho nhiều đỉnh với màu đầu tiên, dùng màu tô đỉnh chưa tô cho tô nhiều đỉnh tốt Và trình lặp lại với màu khác đỉnh tô màu Chú ý: Giải thuật tham lam không đem lại lời giải tối ưu cho toán Si SinhVienZone.com https://fb.com/sinhvienzonevn 68 Để tô màu đỉnh đồ thị với màu mới, ta thực bước sau: nh Vi en Thí dụ: Trong hình vẽ, ta tơ đỉnh với màu đỏ, ta tơ đỉnh với màu đỏ Si Zo ne C Chọn đỉnh chưa tơ tơ với màu Duyệt qua danh sách đỉnh cịn chưa tơ Với đỉnh chưa tơ, xét xem có cạnh nối đến đỉnh tơ với màu khơng Nếu khơng có cạnh thế, ta tơ đỉnh với màu om SinhVienZone.com https://fb.com/sinhvienzonevn 69 Thủ tục SAME_COLOR Thủ tục SAME_COLOR xác đinh tập đỉnh (biến newclr), mà tất đỉnh tô với màu Thủ tục gọi nhiều lần đỉnh tô màu ne C om Si nh Vi en Zo procedure SAME_COLOR(G, newclr); /* SAME_COLOR assigns to newclr a set of vertices of G that may be given the same color */ begin newclr := ; for each uncolored vertex v of G if v is not adjacent to any vertex in newclr then mark v colored and add v to newclr end; SinhVienZone.com https://fb.com/sinhvienzonevn 70 Si nh Vi en Zo ne C om procedure G_COLORING(G); procedure SAME_COLOR(G, newclr); /* SAME_COLOR assigns to newclr a set of vertices of G that may be given the same color ; a: adjacency matrix for graph G */ begin newclr := ; for each uncolored vertex v of G begin found := false; for each vertex w newclr if a[v,w] = /*there is an edge between v and w in G */ then found := true; if not found then mark v colored and add v to newclr end end; SinhVienZone.com https://fb.com/sinhvienzonevn 71 .C om for each vertex in G mark uncolored; while there is any vertex marked uncolored begin SAME_COLOR(G, newclr); print newclr end Bậc đỉnh: số cạnh nối đến đỉnh Định lý: Nếu (G) số màu tối thiểu để tô đồ thị G G bậc lớn đồ thị G (G) ≤ G +1 Độ phức tạp giải thuật tô màu đồ thị Giả sử đồ thị biểu diễn ma trận kế cận Trong thủ tục SAME_COLOR ô ma trận kế cận xem xét ta xét tô màu cho đỉnh chưa tô Độ phức tạp thủ tục SAME_COLOR: O(n2) với n số đỉnh G Nếu m số màu dùng để tơ đồ thị thủ tục SAME_COLOR gọi tất m lần Do đó, độ phức tạp toàn giải thuật: Si nh Vi en Zo ne m* O(n2) Vì m thường số nhỏ, ta nói: Giải thuật có độ phức tạp bậc hai SinhVienZone.com https://fb.com/sinhvienzonevn 72 Ứng dụng: Xếp lịch thi học kỳ om C Si nh Vi en ne Mỗi môn thi biểu diễn đỉnh đồ thị Xếp lịch thi gán ca thi vào môn thi Các ca thi màu dùng để tơ cho đỉnh Một cạnh nối hai đỉnh có tồn sinh viên lấy hai môn phải thi hai mơn, khơng thể xếp hai mơn thi biểu thị hai đỉnh vào ca thi Zo Ứng dụng: Gán tần số lãnh vực vô tuyến, điện thoại di động (Frequency assignment problem) SinhVienZone.com https://fb.com/sinhvienzonevn 73 Một Heuristic cho tốn Tơ Màu đồ thị nh Vi en Zo Giải thuật Arrange the vertices by decreasing order of degrees Color a vertex with maximal degree with color Choose an uncolored vertex with a maximum degree If there is another vertex with the same maximum vertex, choose either of them Color the chosen vertex with the least possible (lowest numbered) color If all vertices are colored, stop Otherwise, return to Si ne C om Màu có bậc lớn tơ trước (Welsh and Powell) Bậc đỉnh: số cạnh nối đến đỉnh Lý do: Những đỉnh có nhiều cạnh nối tới khó tơ ta đợi đỉnh láng giềng tơ SinhVienZone.com https://fb.com/sinhvienzonevn 74 ... 3 Si Mảng s 3 1 50 00 Zo nh Vi en j 1 151 25 118 75 9 357 78 75 157 50 i 1 050 0 51 3 75 350 0 71 25 250 0 1000 43 75 750 26 25 0 om Mảng m SinhVienZone. com i 3 3 Hình 5. 1 5 https://fb .com/ sinhvienzonevn 14... 10.100 .5 + 10 .5. 50 = 50 00 + 250 0 = 750 0 phép nhân vô hướng (A1(A2A3)) thực 100 .5. 50 + 10.100 .50 = 250 00 + 50 000 = 750 00 phép nhân vô hướng Si nh Vi en Zo ne C Thí dụ: Hai chi phí khác biệt SinhVienZone. com. .. m [5, 5] p1 p p 43 75 35. 10.20 113 75 Si Bước phương pháp qui hoạch động tạo lời giải tối ưu từ thơng tin tính tốn SinhVienZone. com https://fb .com/ sinhvienzonevn 15 Bước 4: Tạo lời giải