Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 36 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
36
Dung lượng
464,27 KB
Nội dung
Phương pháp chia để trị Devide and conquer ThS Trương Phước Hải Nội dung Phương pháp chia để trị Binary Search Bài tốn tìm cực trị Merge Sort Quick Sort Giải thuật Strassen Trương Phước Hải Phương pháp chia để trị Tư tưởng: chia nhỏ toán lớn thành toán dễ giải Để giải tốn kích thước n: Chia toán thành toán có kích thước nhỏ Có thể sử dụng kỹ thuật chia để trị để tiếp tục chia nhỏ toán Giải toán tổng hợp lại để lời giải cho toán ban đầu Giải Thuật Trương Phước Hải Phương pháp chia để trị Mơ hình tổng qt kỹ thuật chia để trị problem P … … p1 Giải thuật p2 Bài toán sở (base problem) pk Trương Phước Hải Phương pháp chia để trị Các bước tiếp cận phương pháp chia để trị: Bước 1: chia (divide) toán thành hay nhiều toán nhỏ Bước 2: trị (conquer) (giải) toán theo phương pháp cách đệ quy Bước 3: gộp (combine) lời giải toán để tạo thành lời giải cho toán ban đầu Giải thuật Trương Phước Hải Phương pháp chia để trị Giải thuật tổng quát CDT(P) If (P đủ nhỏ) Then return LờiGiải(P) Else chia P thành thể p1, p2, pk Áp dụng CDT cho thể pi KếtHợp (CDT(p1), CDT(p2), , CDT(pk)) End If Cuối CDT Giải thuật Trương Phước Hải Phương pháp chia để trị Độ phức tạp giải thuật: T(n): thời gian giải tốn kích thước n a: số tốn con; n/b: kích thước tốn D(n): thời gian chia nhỏ toán ban đầu C(n): thời gian kết hợp toán Phương trình đệ quy: 𝑂 , 𝑛 ≤ 𝑐 𝑣ớ𝑖 𝑐 đủ 𝑛ℎỏ 𝑛 𝑇 𝑛 = 𝑎 𝑇 + 𝐷 𝑛 + 𝐶 𝑛 , 𝑛𝑔ượ𝑐 𝑙ạ𝑖 𝑏 Giải thuật Trương Phước Hải Nội dung Phương pháp chia để trị Binary Search Bài tốn tìm cực trị Merge Sort Quick Sort Giải thuật Strassen Trương Phước Hải Binary Search Cho dãy A gồm phần tử thứ tự khơng giảm Cho biết có tồn phần tử x dãy A? Input: A[1…n], x Output: index với A[index] = x Giải thuật Trương Phước Hải Binary Search Giải thuật chia để trị cho toán: Chia: chia dãy A thành nửa dãy m x Trị: dựa vào tính chất có thứ tự A để xác định nên tìm x nửa dãy Gộp: khơng cần tìm dãy A Giải thuật 10 Trương Phước Hải Merge Sort Giải thuật phân phối đường chạy A: PhanPhoi(A[], N, B[], &nB, C[], &nC) nB = 0, nC = 0, i = 0, turn = True While (i < N) Do If (turn = True) Then B[nB++] = A[i++] Else C[nC++] = A[i++] Cuối If If (A[i] < A[i-1]) Then turn = NOT(turn) ‘chuyển dãy Cuối If Cuối While Cuối PhanPhoi Giải thuật 22 Trương Phước Hải Merge Sort Giải thuật trộn đường chạy: Tron (B, nB, C, nC, A[], &N) i = 0, j = 0, n = While (i < nB AND j < nC) Do If (B[i] < C[j]) Then A[n++] = B[i++] Else A[n++] = C[j++] Cuối If Cuối While While (i < nB) Do A[n++] = B[i++] While (j < nC) Do A[n++] = C[j++] Cuối Tron Giải thuật 23 Trương Phước Hải Nội dung Phương pháp chia để trị Binary Search Bài tốn tìm cực trị Merge Sort Quick Sort Giải thuật Strassen 24 Trương Phước Hải Quick Sort Bài toán xếp dãy A phương pháp QuickSort: Phân hoạch dãy A thành dãy con: • Dãy gồm phần tử có giá trị nhỏ x • Dãy gồm phần tử có giá trị x • Dãy gồm phần tử có giá trị lớn x Với x giá trị tùy ý thuộc dãy A Tiếp tục phân hoạch dãy cách đệ quy Giải thuật 25 Trương Phước Hải Quick Sort Ví dụ: A: 2 16 13 15 20 Chọn x = tiêu chí phân hoạch (phần tử dãy), A chia thành dãy sau: A: 2 6 15 13 20 16 Dãy 1: 2 Dãy 2: 6 Dãy 3: 15 13 20 16 Giải thuật 26 Trương Phước Hải Quick Sort Tư tưởng chia để trị Quick Sort: Chia: Phân hoạch A[l1 r1] thành dãy con: A[l1 r2] < x, A[r2+1 l2-1] = x A[l2 r1] > x l2-1 r1+1 A[l1 r2] < x l1 A[r1+1 l2-1] = x r2 A[l2 r1] > x l2 r1 Trị: tiếp tục phân hoạch dãy A[l1 r1] A[l2 r1] cách đệ quy Gộp: khơng cần thao tác Chia thực dãy A Giải thuật 27 Trương Phước Hải Quick Sort Giải thuật Quick Sort: QuickSort(A[], l1, If (l < r) Then PhanHoach(A, QuickSort(A, QuickSort(A, Cuối If Cuối QuickSort Giải thuật r1) l1, r1, l2, r2) //chia l1, r2) //trị l2, r1) //trị 28 Trương Phước Hải Quick Sort Giải thuật phân hoạch: PhanHoach(A[], l1, r1, &l2, &r2) l2 = l1, r2 = r1 x = A[(l2+r2)/2] While (l2 < r2) Do While (A[l2] < x) Do l2++ While (A[r2] > x) Do r2-If (l2