Applied Algorithms - Chapter 4 (HUST) Thầy Phạm Quang Dũng

LI
lienhejb
0 次下载
31
0

资料内容

第 1 页

goupee.vn goupee.com THUẬT TOÁN ỨNG DỤNG CHIA ĐỂ TRỊ Phạm Quang Dũng Bộ môn KHMT dungpq@soict.hust.edu.vn 1 fb.com/goupee.vn

第 2 页

goupee.vn goupee.com NộI dung  Tổng quan chia để trị  Ví dụ minh họa  Độ phức tạp chia để trị  Giảm để trị 2 fb.com/goupee.vn

第 3 页

goupee.vn goupee.com Tổng quan chia để trị  Chia bài toán cần giải ban đầu thành các bài toán con độc lập nhau  Giải (trị) các bài toán con  Tổng hợp lời giải của các bài toán con để dẫn ra lời giải của bài toán xuất phát 3 fb.com/goupee.vn

第 4 页

goupee.vn goupee.com Ví dụ minh họa  Bài toán dãy con dài nhất: cho dãy số nguyên a = a1, a2, …, an. Tìm dãy con gồm một số liên tiếp các phần tử có tổng lớn nhất  Phân chia: ký hiệu P(i, j) là lời giải của bài toán tìm dãy con liên tiếp của 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à lời giải của bài toán tìm dãy con liên tiếp của dãy ai, ai+1,…, aj sao cho phần tử cuối cùng là aj có tổng cực đại  Ký hiệu PR(i, j) là lời giải của bài toán tìm dãy con liên tiếp của dãy ai, ai+1,…, aj sao cho phần tử đầu tiên là ai có tổng cực đại 4 fb.com/goupee.vn

第 5 页

goupee.vn goupee.com 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 P(m+1,r) r PL(l,m) PR(m+1,r) 5 fb.com/goupee.vn

第 6 页

goupee.vn goupee.com Ví dụ minh họa #include <bits/stdc++.h> 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]; } 6 fb.com/goupee.vn

第 7 页

goupee.vn goupee.com 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 <= r; i++){ s += a[i]; rs = max(rs,s); } return rs; } 7 fb.com/goupee.vn

第 8 页

goupee.vn goupee.com Ví dụ minh họa int P(int l, int r){ if(l == r) return a[r]; int m = (l+r)/2; return max(max(P(l,m),P(m+1,r)), PL(l,m)+PR(m+1,r)); } void solve(){ cout << P(0,n-1); } int main(){ input(); solve(); } 8 fb.com/goupee.vn

第 9 页

goupee.vn goupee.com Độ phức tạp tính toán  Chia bài toán xuất phát thành a bài procedure D-and-C(n) { toán con, mỗi bài toán con kích 1. if(n  n0) thước n/b 2. xử lý trực tiếp  T(n): thời gian của bài toán kích 3. else{ thước n 4. chia bài toán xuất phát  Thời gian phân chia (dòng 4): D(n) thành a bài toán con kích thước  Thời gian tổng hợp lời giải (dòng 6): n/b C(n) 5. gọi đệ quy a bài toán con  Công thức truy hồi: 6. tổng hợp lời giải  1 , 𝑛 ≤ 𝑛0 7. } T 𝑛 = ቐ 𝑛 } 𝑎𝑇 + 𝐶 𝑛 + 𝐷 𝑛 , 𝑛 > 𝑛0 𝑏 9 fb.com/goupee.vn

第 10 页

goupee.vn goupee.com Độ phức tạp tính toán  Độ phức tạp của thuật toán chia để trị (định lí thợ)  Công thức truy hồi: T(n) = aT(n/b) + cnk, với các hằng số a  1, b > 1, c > 0  Nếu a > bk thì T(n) = (𝑛𝑙𝑜𝑔𝑏𝑎)  Nếu a = bk thì T(n) = (𝑛𝑘𝑙𝑜𝑔𝑛) với logn = 𝑙𝑜𝑔 𝑛 2  Nếu a < bk thì T(n) = (𝑛𝑘) 10 fb.com/goupee.vn

第 11 页

goupee.vn goupee.com Độ phức tạp tính toán  Độ phức tạp của thuật toán chia để trị (định lí thợ)  Công thức truy hồi: T(n) = aT(n/b) + cnk, với các hằng số a  1, b > 1, c > 0  Nếu a > bk thì T(n) = (𝑛𝑙𝑜𝑔𝑏𝑎)  Nếu a = bk thì T(n) = (𝑛𝑘𝑙𝑜𝑔𝑛) với logn = 𝑙𝑜𝑔 𝑛 2  Nếu a < bk thì T(n) = (𝑛𝑘) → Thuật toán chia để trị giải bài toán tổng con cực đại có độ phức tạp là O(nlogn) 11 fb.com/goupee.vn

第 12 页

goupee.vn goupee.com Sắp xếp trộn  Phân chia: Chia dãy a1, …, an thành 2 dãy con có độ dài bằng nhau  Trị đệ quy: Sắp xếp 2 dãy con bằng thuật toán sắp xếp trộn  Tổng hợp: Trộn 2 dãy con đã được sắp với nhau để thu được dãy ban đầu được sắp thứ tự 12 fb.com/goupee.vn

第 13 页

goupee.vn goupee.com Sắp xếp trộn  Trộn hai dãy đã được sắp xếp thành dãy mới được sắp xếp i j a 1 3 8 9 20 4 5 10 11 23 k ta 13 fb.com/goupee.vn

第 14 页

goupee.vn goupee.com Sắp xếp trộn  Trộn hai dãy đã được sắp xếp thành dãy mới được sắp xếp i j a 1 3 8 9 20 4 5 10 11 23 k ta 1 14 fb.com/goupee.vn

第 15 页

goupee.vn goupee.com Sắp xếp trộn  Trộn hai dãy đã được sắp xếp thành dãy mới được sắp xếp i j a 1 3 8 9 20 4 5 10 11 23 k ta 1 3 15 fb.com/goupee.vn

第 16 页

goupee.vn goupee.com Sắp xếp trộn  Trộn hai dãy đã được sắp xếp thành dãy mới được sắp xếp i j a 1 3 8 9 20 4 5 10 11 23 k ta 1 3 4 16 fb.com/goupee.vn

第 17 页

goupee.vn goupee.com Sắp xếp trộn  Trộn hai dãy đã được sắp xếp thành dãy mới được sắp xếp i j a 1 3 8 9 20 4 5 10 11 23 k ta 1 3 4 5 17 fb.com/goupee.vn

第 18 页

goupee.vn goupee.com Sắp xếp trộn  Trộn hai dãy đã được sắp xếp thành dãy mới được sắp xếp i j a 1 3 8 9 20 4 5 10 11 23 k ta 1 3 4 5 8 18 fb.com/goupee.vn

第 19 页

goupee.vn goupee.com Sắp xếp trộn  Trộn hai dãy đã được sắp xếp thành dãy mới được sắp xếp i j a 1 3 8 9 20 4 5 10 11 23 k ta 1 3 4 5 8 9 19 fb.com/goupee.vn

第 20 页

goupee.vn goupee.com Sắp xếp trộn  Trộn hai dãy đã được sắp xếp thành dãy mới được sắp xếp i j a 1 3 8 9 20 4 5 10 11 23 k ta 1 3 4 5 8 9 10 20 fb.com/goupee.vn

显示前 20 页。下载资料查看完整内容。

评论 (0)

登录 以加入讨论

暂无评论。快来抢沙发吧!