Bài giảng môn Thuật toán ứng dụng: Chia để trị
lượt xem 6
download
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!
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng môn Thuật toán ứng dụng: Chia để trị
- THUẬT TOÁN ỨNG DỤNG CHIA ĐỂ TRỊ Phạm Quang Dũng Bộ môn KHMT dungpq@soict.hust.edu.vn 1
- NộI dung Tổng quan chia để trị Ví dụ minh họa Độ phức tạp chia để trị Giảm để trị 2
- 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
- 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
- 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) P(m+1,r) r m m+1 PL(l,m) PR(m+1,r) 5
- 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]; } 6
- 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
- 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
- Độ 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 7. } Q 1 , ≤ 0 T = } + + , > 0 9
- Độ 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) = Q( ) Nếu a = bk thì T(n) = Q( ) với logn = Nếu a < bk thì T(n) = Q( ) 10
- Độ 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) = Q( ) Nếu a = bk thì T(n) = Q( ) với logn = Nếu a < bk thì T(n) = Q( ) 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
CÓ THỂ BẠN MUỐN DOWNLOAD
-
BÀI GIẢNG MÔN HỌC XỬ LÝ ẢNH
76 p | 588 | 210
-
Bài giảng lập trình DOT NET - Bài 1 Nhập môn DotNet
32 p | 1257 | 102
-
Bài giảng học về Tin học đại cương
26 p | 249 | 71
-
Bài giảng Nhập môn điện toán - ĐH Bách khoa TP.HCM
140 p | 663 | 40
-
Bài giảng Nhập môn trí tuệ nhân tạo - Từ Minh Phương
104 p | 94 | 10
-
Bài giảng Nhập môn lập trình: Các khái niệm cơ bản về lập trình - ThS. Đặng Đình Phương
14 p | 91 | 9
-
Bài giảng Mật mã ứng dụng: Nhập môn số học thuật toán - Đại học Bách khoa Hà Nội
240 p | 15 | 7
-
Bài giảng môn Thuật toán ứng dụng: Cấu trúc dữ liệu và thư viện
15 p | 20 | 6
-
Bài giảng Đồ họa máy tính: Giới thiệu môn học - Ma Thị Châu (2017)
22 p | 37 | 6
-
Bài giảng Điều khiển lập trình cơ bản - ĐH Phạm Văn Đồng
75 p | 66 | 6
-
Bài giảng Nhập môn lập trình - Bài 16: Các kỹ thuật thao tác trên bit
29 p | 58 | 5
-
Bài giảng Nhập môn lập trình - Chương 14: Các kỹ thuật thao tác trên bit
28 p | 66 | 5
-
Bài giảng Nhập môn điện toán: Chương 4 - ĐH Bách khoa TP.HCM
21 p | 74 | 5
-
Bài giảng môn Lập trình hướng đối tượng: Chương 7 - TS. Nguyễn Văn Hiệp
41 p | 52 | 4
-
Bài giảng điện tử môn tin học: Những ứng dụng của tin học
0 p | 70 | 4
-
Bài giảng Kỹ thuật phần mềm ứng dụng: Chương 3 (Phần 2) - ĐH Bách khoa Hà Nội
25 p | 40 | 4
-
Giới thiệu môn học Cấu trúc dữ liệu và giải thuật - ThS. Nguyễn Thị Khiêm Hòa (ĐH Ngân hàng TP.HCM)
9 p | 65 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn