Bài giảng Thuật toán ứng dụng: Chia để trị. Chương này cung cấp cho học viên những nội dung về: tổng quan chia để trị; ví dụ minh họa; độ phức tạp chia để trị; sắp xếp trộn; giảm để trị;... Mời các bạn cùng tham khảo chi tiết nội dung bài giảng!
THUẬT TOÁN ỨNG DỤNG CHIA ĐỂ TRỊ Phạm Quang Dũng Bộ môn KHMT dungpq@soict.hust.edu.vn NộI dung Tổng quan chia để trị Ví dụ minh họa Độ phức tạp chia để trị Giảm để trị Tổng quan chia để trị Chia toán cần giải ban đầu thành toán độc lập Giải (trị) toán Tổng hợp lời giải toán để dẫn lời giải tốn xuất phát Ví dụ minh họa Bài toán dãy dài nhất: cho dãy số nguyên a = a1, a2, …, an Tìm dãy gồm số liên tiếp phần tử có tổng lớn Phân chia: ký hiệu P(i, j) lời giải tốn tìm dãy liên tiếp dãy ai, ai+1,…, aj có tổng cực đại Tổng hợp lời giải Ký hiệu PL(i, j) lời giải tốn tìm dãy liên tiếp dãy ai, ai+1,…, aj cho phần tử cuối aj có tổng cực đại Ký hiệu PR(i, j) lời giải tốn tìm dãy liên tiếp dãy ai, ai+1,…, aj cho phần tử có tổng cực đại Ví dụ minh họa Xét đoạn [l,l+1, ,r] Ký hiệu m = (l+r)/2 P(l,r) = MAX{P(l, m), P(m+1,r), PL(l,m) + PR(m+1,r)} l P(l,m) m m+1 PL(l,m) P(m+1,r) PR(m+1,r) r Ví dụ minh họa #include using namespace std; #define INF 1e9 #define MAX 1000000 int a[MAX]; int n; void input(){ cin >> n; for(int i = 0; i < n; i++) cin >> a[i]; } Ví dụ minh họa int PL(int l, int r){ int rs = -INF; int s = 0; for(int i = r; i >= l; i ){ s += a[i]; rs = max(rs,s); } return rs; } int PR(int l, int r){ int rs = -INF; int s = 0; for(int i = l; i 1, c > ) Nếu a > bk T(n) = Q( ) với logn = Nếu a = bk T(n) = Q( Nếu a < bk T(n) = Q( ) 10 Sắp xếp trộn Trộn hai dãy xếp thành dãy xếp i a j 20 k ta 17 5 10 11 23 Sắp xếp trộn Trộn hai dãy xếp thành dãy xếp i a j 20 k ta 18 10 11 23 Sắp xếp trộn Trộn hai dãy xếp thành dãy xếp i a 20 j k ta 19 10 11 23 Sắp xếp trộn Trộn hai dãy xếp thành dãy xếp i a 20 j 10 k ta 20 10 11 23 ... quan chia để trị Ví dụ minh họa Độ phức tạp chia để trị Giảm để trị Tổng quan chia để trị Chia toán cần giải ban đầu thành toán độc lập Giải (trị) toán Tổng hợp lời giải toán để dẫn... T(n) = Q( ) Thuật toán chia để trị giải tốn tổng cực đại có độ phức tạp O(nlogn) 11 Sắp xếp trộn Phân chia: Chia dãy a1, …, an thành dãy có độ dài Trị đệ quy: Sắp xếp dãy thuật toán xếp trộn... n0) xử lý trực tiếp else{ chia toán xuất phát thành a tốn kích thước n/b gọi đệ quy a toán tổng hợp lời giải } } Độ phức tạp tính tốn Độ phức tạp thuật tốn chia để trị (định lí thợ) Công thức