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

LI
lienhejb
0 lượt tải
31
0

Nội dung tài liệu

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Hiển thị 20 trang đầu. Tải tài liệu để xem đầy đủ.

Bình luận (0)

Đăng nhập để tham gia bình luận

Chưa có bình luận nào. Hãy là người đầu tiên!