1. Trang chủ
  2. » Cao đẳng - Đại học

Slide cấu trúc dữ liệu phương pháp chia để trị

36 11 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

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

Ngày đăng: 06/12/2021, 16:27

TỪ KHÓA LIÊN QUAN