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

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

36 13 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

Tiêu đề Phương Pháp Chia Để Trị
Tác giả Trương Phước Hải
Trường học Trường Đại Học
Thể loại bài giảng
Định dạng
Số trang 36
Dung lượng 464,27 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tư tưởng: chia nhỏ bài toán lớn thànhnhững bài toán con dễ giải quyết hơn.Để giải bài toán kích thước n:  Chia bài toán thành các bài toán con có kíchthước nhỏ hơn..  Bước 2: trị con

Trang 1

Phương pháp chia để trị

Devide and conquer

ThS Trương Phước Hải

Trang 2

Trương Phước Hải

Trang 3

Tư tưởng: chia nhỏ bài toán lớn thànhnhững bài toán con dễ giải quyết hơn.

Để giải bài toán kích thước n:

 Chia bài toán thành các bài toán con có kíchthước nhỏ hơn Có thể sử dụng kỹ thuật chia

để trị để tiếp tục chia nhỏ bài toán con

 Giải các bài toán con rồi tổng hợp lại để đượclời giải cho bài toán ban đầu

Phương pháp chia để trị

Trang 4

Trương Phước Hải

Mô hình tổng quát của kỹ thuật chia để trị

Trang 5

Các bước tiếp cận phương pháp chia đểtrị:

 Bước 1: chia (divide) bài toán thành 2 haynhiều bài toán con nhỏ hơn

 Bước 2: trị (conquer) (giải) các bài toán contheo phương pháp này một cách đệ quy

 Bước 3: gộp (combine) lời giải các bài toáncon để tạo thành lời giải cho bài toán banđầu

Phương pháp chia để trị

Trang 6

Trương Phước Hải

Giải thuật tổng quát

End If Cuối CDT

Phương pháp chia để trị

6

Giải thuật

Trang 7

Độ phức tạp của giải thuật:

 T(n): thời gian giải bài toán kích thước n

 a: số bài toán con; n/b: kích thước của các bàitoán con

 D(n): thời gian chia nhỏ bài toán ban đầu

 C(n): thời gian kết hợp các bài toán con

Trang 8

Trương Phước Hải

Trang 9

Cho dãy A gồm các phần tử được sắp thứ

tự không giảm Cho biết có tồn tại phần tử

x trong dãy A?

 Input: A[1…n], x

 Output: index với A[index] = x

Binary Search

Trang 10

Trương Phước Hải

Giải thuật chia để trị cho bài toán:

 Chia: chia dãy A thành 2 nửa dãy con

 Trị: dựa vào tính chất có thứ tự của A để xácđịnh nên tìm x trong nửa dãy con nào

 Gộp: không cần vì tìm ngay trên dãy A

Trang 11

Giải thuật chia để trị:

BinSearch (A[], l, r, x)

If (l > r) Then return -1

Else

m = [(l + r)/2]

If (A[m] = x) Then return m

Else If (x < A[m]) Then

return BinSearch(A, l, m-1, x)

Else

return BinSearch(A, m+1, r, x)

Cuối If Cuối If

Cuối BinSearch

Binary Search

Trang 12

Trương Phước Hải

Trang 13

Bài toán: cho dãy A gồm N phần tử, tìmcực trị (cực tiểu, cực đại) của dãy A.

Tư tưởng chia để trị:

 Chia dãy thành 2 dãy con và tìm cực trị trêntừng dãy con

 Tìm cực trị trên các giá trị cực trị của mỗi dãycon để tìm ra cực trị của dãy ban đầu

Tìm phần tử cực trị

Trang 14

Trương Phước Hải

Min = 3

Trang 15

Chia để trị cho bài toán tìm cực trị:

 Chia: chia dãy A[l r] thành 2 dãy con A[l m]

và A[m+1 r] với m = (l + r) div 2

 Trị: tìm cực trị của mỗi dãy con một cách đệquy Đặt left là cực trị của dãy A[l m], right làcực trị của dãy A[m+1 r]

 Gộp: so sánh giá trị của left và right để tìmcực trị cho dãy ban đầu

Tìm phần tử cực trị

Trang 16

Trương Phước Hải

Giải thuật tìm cực trị theo phương pháp chia

return (left < right)?left:right

Cuối CucTri

16

Giải thuật

Tìm phần tử cực trị

Trang 18

Trương Phước Hải

Ý tưởng phương pháp trộn tự nhiên:

 Tách và phân phối luân phiên các đườngchạy trên A vào 2 dãy B và C

 Trộn lần lượt từng cặp đường chạy trên B và

C vào A với mục đích giảm dần số đườngchạy trên A

Merge Sort

18

Giải thuật

Trang 19

Tách B: 4 6 8 13 15 16 22

C: 3 6 9 20Trộn A: 3 4 6 6 8 9 13 15 16 20 22

Merge Sort

Trang 20

Trương Phước Hải

Tư tưởng chia để trị của Merge Sort:

 Chia: phân phối các đường chạy từ dãy Asang 2 dãy con B và C theo nguyên tắc luânphiên

 Trị: áp dụng tư tưởng trên để tiếp tục phânchia các dãy B và C một cách đệ quy

 Gộp: trộn từng cặp đường chạy trên B và C

để tạo thành dãy A mới

Merge Sort

20

Giải thuật

Trang 21

Giải thuật trộn tự nhiên theo phương phápchia để trị:

Trang 22

Trương Phước Hải

Giải thuật phân phối đường chạy trên 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

Merge Sort

22

Giải thuật

Trang 23

Giải thuật trộn các đường chạy:

Tron (B, nB, C, nC, A[], &N)

While (i < nB) Do A[n++] = B[i++]

While (j < nC) Do A[n++] = C[j++]

Cuối Tron

Merge Sort

Trang 24

Trương Phước Hải

Trang 25

Bài toán sắp xếp dãy A bằng phương phápQuickSort:

 Phân hoạch dãy A thành 3 dãy con:

• Dãy 1 gồm những phần tử có giá trị nhỏ hơn x.

• Dãy 2 gồm những phần tử có giá trị bằng x.

• Dãy 3 gồm những phần tử có giá trị lớn hơn x.

 Với x là một giá trị tùy ý thuộc dãy A

 Tiếp tục phân hoạch các dãy con một cách đệquy

Quick Sort

Trang 26

Trương Phước Hải

Ví dụ:

A: 2 2 8 16 4 6 13 15 6 20 3 5

Chọn x = 6 là tiêu chí phân hoạch (phần

tử giữa dãy), A được chia thành 3 dãy sau:

Trang 27

Tư tưởng chia để trị của Quick Sort:

 Chia: Phân hoạch A[l1 r1] thành 3 dãy con:A[l1 r2] < x, A[r2+1 l2-1] = x và A[l2 r1] > x

 Trị: tiếp tục phân hoạch các dãy con A[l1 r1]

Trang 28

Trương Phước Hải

Giải thuật Quick Sort:

Trang 29

Giải thuật phân hoạch:

PhanHoach (A[], l1, r1, &l2, &r2)

Cuối If Cuối While

Cuối PhanHoach

Quick Sort

Trang 30

Trương Phước Hải

Trang 31

Bài toán: cho 2 ma trận A (n x n) và B (n

x n), tìm ma trận tích C = A x B

 Công thức tính phần tử 𝑐𝑖𝑗 của ma trận C:

 Độ phức tạp của công thức: O(n3)

Giải thuật Strassen

𝑐𝑖𝑗 = 𝑎𝑖𝑘𝑏𝑘𝑗

𝑛−1

𝑘=0

Trang 32

Trương Phước Hải

Trang 33

Giải thuật Strassen (đề xuất năm 1969)cho tích 2 ma trận vuông cấp n:

 Giả sử n là lũy thừa của 2

 Chia mỗi ma trận thành 4 ma trận vuông con:

Trang 34

Trương Phước Hải

Công thức Strassen đề xuất:

Với 𝑀𝑖 là các ma trận con sau:

độ phức tạp: O(n log7 ) ≈ O(n 2.81 )

Giải thuật Strassen

Trang 35

Phương pháp chia để trị cho giải thuậtStrassen:

 Chia: chia ma trận A, B thành từng 4 ma trậncon 𝐴𝑖𝑗, 𝐵𝑖𝑗

 Trị: tìm ma trận con kết quả 𝐶𝑖𝑗 theo công thứcStrassen

 Gộp: ghép các ma trận con kết quả để tạothành ma trận kết quả C

Giải thuật Strassen

Trang 36

Trương Phước Hải

Nếu n không phải là lũy thừa của 2:

 Thêm các cột và dòng đệm giá trị 0 vào matrận

Giải thuật Strassen

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

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm