1. Trang chủ
  2. » Công Nghệ Thông Tin

Cấu trúc dữ liệu - Phần 6 doc

37 177 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 37
Dung lượng 530,92 KB

Nội dung

GVGD: Trng Phc Hi Phng pháp chia đ tr (devide and conquer) 2 Ni dung 1. Phng pháp chia đ tr 3. Bài toán tìm cc tr ca dãy 4. Merge Sort 2. Tìm kim nh phân 5. Quick Sort 3 Phng pháp chia đ tr  T tng  Chia nh bài toán ln thành nh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ích th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 đ đc li gii cho bài toán ban đu 4 Phng pháp chia đ tr  Mô hình tng quát ca k thut chia đ tr … Bài toán c s (base problem) problem P … p 1 p 2 p k 5 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) bài toán thành 2 hay nhiu bài toán con nh hn  Bc 2: tr (conquer) (gii) các bài toán con theo 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án con đ to thành li gii cho bài toán ban đu 6 Phng pháp chia đ tr  Gii thut tng quát DAC(P) If (P đ nh) Then return LiGii(P) Else Chia P thành các th hin p1, p2, pk Áp dng chia đ tr cho tng th hin pi Kt Hp (DAC(p1), DAC(p2), , DAC(pk)) End If Cui DAC 7 Phng pháp chia đ tr   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ài toá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  Phng trình đ quy     vi  đ nh       ngc li 8 Ni dung 1. Phng pháp chia đ tr 3. Bài toán tìm cc tr ca dãy 4. Merge Sort 2. Tìm kim nh phân 5. Quick Sort 9 Tìm kim nh phân  Cho dãy A gm N phn t đc sp th t không gim. Cho bit phn t x có tn ti trong dãy A hay không, nu có ch ra v trí xut hin  Input: A[0…N-1], x  Output  index = -1, nu x không tn ti trong A  index ≥ 0 nu A[index] = x 10 Tìm kim nh phân  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 < m > m m x [...]... Tách 2 2 8 16 4 6 13 15 6 20 3 9 : 2 2 8 16 4 6 13 15 6 20 3 9 Tách B: 2 2 8 16 6 20 Tách B1: 2 2 8 16 C1: 6 20 B1 và C1 vào B: 2 2 6 8 16 20 Tách C: 4 6 13 15 3 9 Tách B2: 4 6 13 15 C2: 3 9 B2 và C2 vào C: 3 4 6 9 13 15 B và C vào A: 2 2 3 4 6 6 8 9 13 15 16 20 21 Merge Sort Cây minh quá trình chia A 2 2 8 16 4 6 13 15 6 20 3 9 B 2 2 8 16 6 20 B1 2 2 8 16 C 4 6 13 15 3 9 C1 6 20 B2 4 6 13 15 22 C2... chia pháp dãy A thành 2 dãy con Dãy 1 có giá Dãy 2 có giá x là giá phân tùy ý x x dãy A các dãy con 31 cách quy Quick Sort Ví A: 2 2 8 16 4 6 13 15 6 20 3 5 x = 6 là tiêu chí phân chia thành 2 dãy sau A: 2 2 5 3 4 6 13 15 6 20 16 8 Dãy 1: 2 2 5 3 4 6 Dãy 2: 13 15 6 20 16 8 32 dãy), A Quick Sort chia Quick Sort Chia: Phân và A[l2 r1] > x A[l1 r1] thành 2 dãy con: A[l1 r2] < x A[l1 r2] < x A[l2 r1] > x... pháp chia max dãy Max = 41 10, 16, 7, 39, 3, 24, 17, 41 39 10, 16, 7, 39 39 16 7 24 7, 39 16 10, 16 10 41 3, 24, 17, 41 3, 24 39 3 15 41 24 17, 41 17 41 Chia cho bài toán tìm max dãy Chia: chia dãy A[l r] thành 2 dãy con A[l m] và A[m+1 r] m = (l + r) div 2 : tìm max dãy con cách quy left là max dãy A[l m], right là max dãy A[m+1 r] : so sánh giá left và right ban 16 tìm max cho dãy tìm max theo pháp...chia áp cho Binary Search 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) If If BinSearch 11 Cài ngôn int BinSearch(int A[], int l, int r, int x) { if (l > r) return -1 else { int m = (l + r)/2; if (A[m] == x) return m; else if (x < A[m]) return BinSearch(A,... r2); r2); r1); Quick Sort phân 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 . phng pháp chia đ tr 10, 16, 7, 39, 3, 24, 17, 41 10, 16, 7, 39 3, 24, 17, 41 10, 16 7, 39 3, 24 17, 41 10 16 7 39 3 24 17 41 16 24 41 39 41 39 Max = 41 16 Bài toán tìm cc tr c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,. tn ti trong dãy A hay không, nu có ch ra v trí xut hin  Input: A[0…N-1], x  Output  index = -1 , nu x không tn ti trong A  index ≥ 0 nu A[index] = x 10 Tìm kim

Ngày đăng: 08/08/2014, 04:21