Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 31 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
31
Dung lượng
670,28 KB
Nội dung
.c om an co ng THUẬT TOÁN ỨNG DỤNG cu u du o ng th CHIA ĐỂ TRỊ Phạm Quang Dũng Bộ môn KHMT dungpq@soict.hust.edu.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om NộI dung Tổng quan chia để trị ng Ví dụ minh họa cu u du o ng th an Giảm để trị co Độ phức tạp chia để trị CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Tổng quan chia để trị Chia toán cần giải ban đầu thành toán cu u du o ng th an co ng độc lập Giải (trị) toán Tổng hợp lời giải toán để dẫn lời giải toán xuất phát CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Ví dụ minh họa Bài tốn dãy dài nhất: cho dãy số nguyên a = a1, ng th an co ng 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 du o Ký hiệu PL(i, j) lời giải tốn tìm dãy liên tiếp cu u 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Ví dụ minh họa Xét đoạn [l,l+1, ,r] Ký hiệu m = (l+r)/2 P(l,m) th m m+1 P(m+1,r) cu u du o ng l an co ng P(l,r) = MAX{P(l, m), P(m+1,r), PL(l,m) + PR(m+1,r)} PL(l,m) PR(m+1,r) CuuDuongThanCong.com https://fb.com/tailieudientucntt r .c om Ví dụ minh họa #include using namespace std; ng #define INF 1e9 co #define MAX 1000000 an int a[MAX]; th int n; ng void input(){ cin >> n; cu u } du o for(int i = 0; i < n; i++) cin >> a[i]; CuuDuongThanCong.com https://fb.com/tailieudientucntt ng co an th ng 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; } c om Ví dụ minh họa cu u du o 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) = (𝑛𝑙𝑜𝑔𝑏 𝑎 ) Nếu a = bk T(n) = (𝑛𝑘 𝑙𝑜𝑔𝑛) với logn = 𝑙𝑜𝑔2 𝑛 Nếu a < bk T(n) = (𝑛𝑘 ) 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Sắp xếp trộn Trộn hai dãy xếp thành dãy j 10 co i ng xếp 20 an 11 23 cu ta k u du o ng th a 17 CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Sắp xếp trộn Trộn hai dãy xếp thành dãy j 10 co i ng xếp 20 an 11 23 du o ng th a u cu ta k 18 CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Sắp xếp trộn Trộn hai dãy xếp thành dãy j 10 co i ng xếp 20 an 11 23 du o ng th a u cu ta k 19 CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Sắp xếp trộn Trộn hai dãy xếp thành dãy xếp j co ng i 20 an 10 11 23 du o ng th a u cu ta k 10 20 CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Sắp xếp trộn Trộn hai dãy xếp thành dãy xếp j co ng i 20 an 10 11 23 du o ng th a u cu ta k 10 11 21 CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Sắp xếp trộn Trộn hai dãy xếp thành dãy j co ng xếp 20 an 10 11 23 du o ng th a u cu ta k 10 11 20 23 22 CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Sắp xếp trộn Trộn hai dãy xếp thành dãy co ng xếp 20 an 10 11 23 ng th a cu ta u du o copy 10 11 20 23 23 CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Sắp xếp trộn Trộn hai dãy xếp thành dãy co ng xếp ta 10 11 20 23 10 11 20 23 an cu u du o ng th a 24 CuuDuongThanCong.com https://fb.com/tailieudientucntt .c om Sắp xếp trộn #include using namespace std; ng #define MAX 1000000 co int a[MAX]; int n; th an int ta[MAX]; ng void input(){ cin >> n; } cu void print(){ u du o for(int i = 0; i < n; i++) cin>> a[i]; for(int i = 0; i < n; i++) cout a[j]){ta[k] = a[j]; j++;} } } du o else{ta[k] = a[i]; i++;} } cu u for(int k = b; k